pax_global_header00006660000000000000000000000064115315021710014506gustar00rootroot0000000000000052 comment=87e44b0744a94dbf17260e2097959fe25d2f3332 gtkboard/000077500000000000000000000000001153150217100126475ustar00rootroot00000000000000gtkboard/AUTHORS000066400000000000000000000001101153150217100137070ustar00rootroot00000000000000 Arvind Narayanan -- Primary author and maintainer gtkboard/COPYING000066400000000000000000000431231153150217100137050ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place - Suite 330, Boston, MA 02111 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 Appendix: 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) 19yy 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 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) 19yy 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. gtkboard/CREDITS000066400000000000000000000005631153150217100136730ustar00rootroot00000000000000* Prof. D. Khemani The idea behind the generic game tree search engine * Arthur J. O'Dwyer Capture pentominoes * Thomas Klausner Ideas, lots of bug reports and fixes * Tim Mann Author of xboard, from which I took the pixmaps for chess * Frank Gevaerts PowerPC bugfixes gtkboard/ChangeLog000066400000000000000000000153531153150217100144300ustar00rootroot000000000000002003-07-17 Arvind Narayanan * Initial release 2003-07-18 Arvind Narayanan * board.c: Changed gtk_drawing_area_size() to gtk_widget_set_size_request() 2003-07-19 Arvind Narayanan * parse_opts(): Implemented loading a game from .so file (only from command line; -G option) * checkers.c: fixed bug in check_who_won(), pointed out by Paddu, where it wouldn't reset the score string when the state changed from gameover to not gameover. * game.h: updated documentation 2003-07-20 Arvind Narayanan * ui: implemented feature to show row and column names * ui: implemented feature for game to change the user-visible label for white and black * ab.c: implemented end-of-game checking in game_ab_hash() * rgb: fixed eval function to use GAME_EVAL_INFTY * board: fixed bug where there was no way for samegame to know that the cursor had left the screen * bumped version to 0.10.1 2003-07-21 Arvind Narayanan * engine: fixed really nasty bug, pointed out by Uday, which caused all gtk1 two player games to freeze. * released version 0.10.2 * ui: fixed bug where ui would freeze when engine was killed (e.g, by closing the terminal) * ui: changed gtk_timeout_add to g_timeout_add so that quiet mode can run in the background 2003-07-22 Arvind Narayanan * menu: added Help->Begging 2003-07-25 Arvind Narayanan * flw.c: wrote a new game Four Letter Words. Still incomplete, needs highlighting of selected square, and is too simple to win. * board: added highlighting feature. Still needs to be implemented by games though. * menu.c: fixed bug where sb_update wasn't called when changing the player * bumped version to 0.10.3 2003-07-26 Arvind Narayanan * infiltrate.c: fixed bug, pointed out by Thomas Klausner, where you could make a ball disappear by making it the destination of a move * mastermind.c: changed the notation so that num_white doesn't count the balls in correct positions as well, as suggested by Thomas Klausner * mastermind.c: implemented who_won * mastermind.c: fixed bug which caused balls to become dice on resetting the game * flw.c: fixed bug, pointed out by Thomas Klausner, where return wouldn't work sometimes 2003-07-27 Arvind Narayanan * ui.c: fixed bug, pointed out by Thomas Klausner, where motion_notify events were not being received * wordtris.c: implemented wordtris * bumped version to 0.10.4 2003-07-28 Arvind Narayanan * wordtris.c: implemented lives * prefs.c: added OK button to "enter your name" dialog in gtk2 version * menu.c: implemented different cursor types reflecting the state of the game 2003-07-29 Arvind Narayanan * board: implemented support for bg image * ninemm: implemented pixmaps and getmove (partially) 2003-07-30 Arvind Narayanan * wordtris.c: fixed compiler warning on NetBsd * game.h: implemented highlighting in game_getmove; implemented support in mastermind and wordtris * :globally changed rand() to random() to fix freeze on some OSes * wordtris.c: implemented wildcard 2003-07-31 Arvind Narayanan * game.h: implemented render for getmove_kb * game.h: implemented game_setinitrender * wordtris.c: implemented changing render with kb * mastermind.c: implemented changing render with kb 2003-08-01 Arvind Narayanan * flw.c: implemented render * wordtris: fixed starting with words without any neighbor 2003-08-02 Arvind Narayanan * Makefile.am: changed CFLAGS to AM_CFLAGS as suggested by Frank Gevaerts * move.h: changed byte from char to gint8 to fix powerpc crash. Patch by Frank Gevaerts. 2003-08-03 Arvind Narayanan * board.c: fixed bug where bgimage wouldn't get drawn on non-empty squares * wordtris.c: fixed bug where blank would sometimes be chosen in preference to non-blank 2003-08-06 Arvind Narayanan * flw.c: wrote flw_get_render(). Support in ui.c still not added. 2003-08-10 Arvind Narayanan * ui.c: beginning to separate out the client side protocol handler module 2003-08-13 Arvind Narayanan * stopgate.c: implemented stopgate 2003-08-20 Arvind Narayanan * knights.c: partially implemented knights 2003-08-24 Arvind Narayanan * knights.c: fully implemented 2003-08-29 Arvind Narayanan * breakthrough.c: partially implemented 2003-08-30 Arvind Narayanan * cpento.c: Capture pentominoes by Arthur O'Dwyer 2003-09-01 Arvind Narayanan * knights.c: kickass eval function for knights :) * othello.c: tried several things with the eval function, remains poor as ever * ab.c: bugfixes * hash.c: bugfix: added a new field num_moves * board.c: implemented RENDER_REPLACE * ninemm.c: implemented partial move using RENDER_REPLACE 2003-09-02 Arvind Narayanan * mastermind.c: fixed bug where solution won't be displayed if all 10 tries are wrong * board.c: implemented RENDER_SHADE1 * aaball.c: implemented shadow in ball_gen MWAHAHAHAHA * board.c: implemented RENDER_BUTTONIZE 2003-09-03 Arvind Narayanan * breakthrough.c: lots of improvements to eval 2003-09-04 Arvind Narayanan * othello.c: mapped space key to passing * towers.c: started Towers of Hanoi 2003-09-05 Arvind Narayanan * towers.c: tower of Hanoi almost finished, but some decent looking pixmaps badly needed! 2003-09-06 Arvind Narayanan * towers.c: improved graphics * quarto.c: new game implemented * board.c: fixed some bugs in RENDER_SHADE etc * ataxx.c: implemented highlight 2003-09-07 Arvind Narayanan * kttour.c: knight's tour - new game 2003-09-08 Arvind Narayanan * eightqueens.c: eight queens puzzle - new game 2003-09-11 Arvind Narayanan * dotsandboxes.c: new game "dots and boxes", just started. 2003-09-20 Arvind Narayanan * forgot to write changelog for several days. * major changes: implemented move ordering heuristic and completed movegen() for chess 2003-09-24 Arvind Narayanan * lots of changes, but too lazy to write changelog gtkboard/INSTALL000066400000000000000000000172271153150217100137110ustar00rootroot00000000000000Basic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, a file `config.cache' that saves the results of its tests to speed up reconfiguring, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.in' is used to create `configure' by a program called `autoconf'. You only need `configure.in' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. You can give `configure' initial values for variables by setting them in the environment. Using a Bourne-compatible shell, you can do that on the command line like this: CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure Or on systems that have the `env' program, you can do it like this: env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not supports the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=PATH' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' can not figure out automatically, but needs to determine by the type of host the package will run on. Usually `configure' can figure that out, but if it prints a message saying it can not guess the host type, give it the `--host=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name with three fields: CPU-COMPANY-SYSTEM See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the host type. If you are building compiler tools for cross-compiling, you can also use the `--target=TYPE' option to select the type of system they will produce code for and the `--build=TYPE' option to select the type of system on which you are compiling the package. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Operation Controls ================== `configure' recognizes the following options to control how it operates. `--cache-file=FILE' Use and save the results of the tests in FILE instead of `./config.cache'. Set FILE to `/dev/null' to disable caching, for debugging `configure'. `--help' Print a summary of the options to `configure', and exit. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--version' Print the version of Autoconf used to generate the `configure' script, and exit. `configure' also accepts some other, not widely useful, options. gtkboard/Makefile.am000066400000000000000000000000751153150217100147050ustar00rootroot00000000000000 SUBDIRS=doc src sounds pixmaps EXTRA_DIST = gtkboard.spec gtkboard/Makefile.in000066400000000000000000000320161153150217100147160ustar00rootroot00000000000000# Makefile.in generated by automake 1.6.3 from Makefile.am. # @configure_input@ # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 # Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = . ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_HEADER = $(INSTALL_DATA) transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_alias = @host_alias@ host_triplet = @host@ EXEEXT = @EXEEXT@ OBJEXT = @OBJEXT@ PATH_SEPARATOR = @PATH_SEPARATOR@ AMTAR = @AMTAR@ AWK = @AWK@ CC = @CC@ DEPDIR = @DEPDIR@ GNOME_CFLAGS = @GNOME_CFLAGS@ GNOME_LIBS = @GNOME_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ PACKAGE = @PACKAGE@ PKG_CONFIG = @PKG_CONFIG@ STRIP = @STRIP@ VERSION = @VERSION@ am__include = @am__include@ am__quote = @am__quote@ install_sh = @install_sh@ SUBDIRS = doc src sounds pixmaps EXTRA_DIST = gtkboard.spec subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = DIST_SOURCES = RECURSIVE_TARGETS = info-recursive dvi-recursive install-info-recursive \ uninstall-info-recursive all-recursive install-data-recursive \ install-exec-recursive installdirs-recursive install-recursive \ uninstall-recursive check-recursive installcheck-recursive DIST_COMMON = README AUTHORS COPYING ChangeLog INSTALL Makefile.am \ Makefile.in NEWS TODO aclocal.m4 config.guess config.h.in \ config.sub configure configure.in depcomp install-sh missing \ mkinstalldirs DIST_SUBDIRS = $(SUBDIRS) all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe) $(top_builddir)/config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) cd $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): configure.in cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) config.h: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ $(MAKE) stamp-h1; \ else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOHEADER) touch $(srcdir)/config.h.in distclean-hdr: -rm -f config.h stamp-h1 uninstall-info-am: # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @set fnord $$MAKEFLAGS; amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $$MAKEFLAGS; amf=$$2; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ETAGS = etags ETAGSFLAGS = tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$tags$$unique" \ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) top_distdir = . distdir = $(PACKAGE)-$(VERSION) am__remove_distdir = \ { test ! -d $(distdir) \ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr $(distdir); }; } GZIP_ENV = --best distcleancheck_listfiles = find . -type f -print distdir: $(DISTFILES) $(am__remove_distdir) mkdir $(distdir) @list='$(DISTFILES)'; for file in $$list; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkinstalldirs) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ (cd $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" \ distdir=../$(distdir)/$$subdir \ distdir) \ || exit 1; \ fi; \ done -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r $(distdir) dist-gzip: distdir $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist dist-all: distdir $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist $(am__remove_distdir) GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf - chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/=build mkdir $(distdir)/=inst chmod a-w $(distdir) dc_install_base=`$(am__cd) $(distdir)/=inst && pwd` \ && cd $(distdir)/=build \ && ../configure --srcdir=.. --prefix=$$dc_install_base \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && (test `find $$dc_install_base -type f -print | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ find $$dc_install_base -type f -print ; \ exit 1; } >&2 ) \ && $(MAKE) $(AM_MAKEFLAGS) dist-gzip \ && rm -f $(distdir).tar.gz \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck $(am__remove_distdir) @echo "$(distdir).tar.gz is ready for distribution" | \ sed 'h;s/./=/g;p;x;p;x' distcleancheck: distclean if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile config.h installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) distclean-am: clean-am distclean-generic distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: info: info-recursive info-am: install-data-am: install-exec-am: install-info: install-info-recursive install-man: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf autom4te.cache maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic uninstall-am: uninstall-info-am uninstall-info: uninstall-info-recursive .PHONY: $(RECURSIVE_TARGETS) GTAGS all all-am check check-am clean \ clean-generic clean-recursive dist dist-all dist-gzip distcheck \ distclean distclean-generic distclean-hdr distclean-recursive \ distclean-tags distcleancheck distdir dvi dvi-am dvi-recursive \ info info-am info-recursive install install-am install-data \ install-data-am install-data-recursive install-exec \ install-exec-am install-exec-recursive install-info \ install-info-am install-info-recursive install-man \ install-recursive install-strip installcheck installcheck-am \ installdirs installdirs-am installdirs-recursive \ maintainer-clean maintainer-clean-generic \ maintainer-clean-recursive mostlyclean mostlyclean-generic \ mostlyclean-recursive tags tags-recursive uninstall \ uninstall-am uninstall-info-am uninstall-info-recursive \ uninstall-recursive # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gtkboard/NEWS000066400000000000000000000000001153150217100133340ustar00rootroot00000000000000gtkboard/README000066400000000000000000000000001153150217100135150ustar00rootroot00000000000000gtkboard/TODO000066400000000000000000000007671153150217100133510ustar00rootroot00000000000000 * Key press abstraction layer (major) * Change client-server model to p2p model (major) * Full impl of dyn loading (major) * Next tile in tetris * Text inside board area (major) * Widgets outside board area (major) * Drag and drop (major) * getmove fn dependent on square * context sensitive help * nine men morris * battleship * fix edge-square highlight bug by changing board size when game_draw_cell_boundaries is set * implement game_flippable * eval needs new parameter to give the result -- done gtkboard/aclocal.m4000066400000000000000000001203171153150217100145130ustar00rootroot00000000000000# aclocal.m4 generated automatically by aclocal 1.6.3 -*- Autoconf -*- # Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002 # Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. # Like AC_CONFIG_HEADER, but automatically create stamp file. -*- Autoconf -*- # Copyright 1996, 1997, 2000, 2001 Free Software Foundation, Inc. # 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, 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. AC_PREREQ([2.52]) # serial 6 # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. We must strip everything past the first ":", # and everything past the last "/". # _AM_DIRNAME(PATH) # ----------------- # Like AS_DIRNAME, only do it during macro expansion AC_DEFUN([_AM_DIRNAME], [m4_if(regexp([$1], [^.*[^/]//*[^/][^/]*/*$]), -1, m4_if(regexp([$1], [^//\([^/]\|$\)]), -1, m4_if(regexp([$1], [^/.*]), -1, [.], patsubst([$1], [^\(/\).*], [\1])), patsubst([$1], [^\(//\)\([^/].*\|$\)], [\1])), patsubst([$1], [^\(.*[^/]\)//*[^/][^/]*/*$], [\1]))[]dnl ])# _AM_DIRNAME # The stamp files are numbered to have different names. # We could number them on a directory basis, but that's additional # complications, let's have a unique counter. m4_define([_AM_STAMP_Count], [0]) # _AM_STAMP(HEADER) # ----------------- # The name of the stamp file for HEADER. AC_DEFUN([_AM_STAMP], [m4_define([_AM_STAMP_Count], m4_incr(_AM_STAMP_Count))dnl AS_ESCAPE(_AM_DIRNAME(patsubst([$1], [:.*])))/stamp-h[]_AM_STAMP_Count]) # _AM_CONFIG_HEADER(HEADER[:SOURCES], COMMANDS, INIT-COMMANDS) # ------------------------------------------------------------ # We used to try to get a real timestamp in stamp-h. But the fear is that # that will cause unnecessary cvs conflicts. AC_DEFUN([_AM_CONFIG_HEADER], [# Add the stamp file to the list of files AC keeps track of, # along with our hook. AC_CONFIG_HEADERS([$1], [# update the timestamp echo 'timestamp for $1' >"_AM_STAMP([$1])" $2], [$3]) ])# _AM_CONFIG_HEADER # AM_CONFIG_HEADER(HEADER[:SOURCES]..., COMMANDS, INIT-COMMANDS) # -------------------------------------------------------------- AC_DEFUN([AM_CONFIG_HEADER], [AC_FOREACH([_AM_File], [$1], [_AM_CONFIG_HEADER(_AM_File, [$2], [$3])]) ])# AM_CONFIG_HEADER # Do all the work for Automake. -*- Autoconf -*- # This macro actually does too much some checks are only needed if # your package does certain things. But this isn't really a big deal. # Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002 # Free Software Foundation, Inc. # 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, 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. # serial 8 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... AC_PREREQ([2.52]) # Autoconf 2.50 wants to disallow AM_ names. We explicitly allow # the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl AC_SUBST([PACKAGE], [AC_PACKAGE_TARNAME])dnl AC_SUBST([VERSION], [AC_PACKAGE_VERSION])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AM_MISSING_PROG(AMTAR, tar) AM_PROG_INSTALL_SH AM_PROG_INSTALL_STRIP # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_][CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_][CC], defn([AC_PROG_][CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_][CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_][CXX], defn([AC_PROG_][CXX])[_AM_DEPENDENCIES(CXX)])])dnl ]) ]) # Copyright 2002 Free Software Foundation, Inc. # 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, 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 # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. AC_DEFUN([AM_AUTOMAKE_VERSION],[am__api_version="1.6"]) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION so it can be traced. # This function is AC_REQUIREd by AC_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.6.3])]) # Helper functions for option handling. -*- Autoconf -*- # Copyright 2001, 2002 Free Software Foundation, Inc. # 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, 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. # serial 2 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # ------------------------------ # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # # Check to make sure that the build environment is sane. # # Copyright 1996, 1997, 2000, 2001 Free Software Foundation, Inc. # 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, 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. # serial 3 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # -*- Autoconf -*- # Copyright 1997, 1999, 2000, 2001 Free Software Foundation, Inc. # 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, 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. # serial 3 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # AM_AUX_DIR_EXPAND # Copyright 2001 Free Software Foundation, Inc. # 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, 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. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. # Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50]) AC_DEFUN([AM_AUX_DIR_EXPAND], [ # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. # Copyright 2001 Free Software Foundation, Inc. # 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, 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. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl install_sh=${install_sh-"$am_aux_dir/install-sh"} AC_SUBST(install_sh)]) # AM_PROG_INSTALL_STRIP # Copyright 2001 Free Software Foundation, Inc. # 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, 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. # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # serial 4 -*- Autoconf -*- # Copyright 1999, 2000, 2001 Free Software Foundation, Inc. # 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, 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. # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi for depmode in $am_compiler_list; do # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. echo '#include "conftest.h"' > conftest.c echo 'int i;' > conftest.h echo "${am__include} ${am__quote}conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=conftest.c object=conftest.o \ depfile=conftest.Po tmpdepfile=conftest.TPo \ $SHELL ./depcomp $depcc -c conftest.c -o conftest.o >/dev/null 2>&1 && grep conftest.h conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then am_cv_$1_dependencies_compiler_type=$depmode break fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [rm -f .deps 2>/dev/null mkdir .deps 2>/dev/null if test -d .deps; then DEPDIR=.deps else # MS-DOS does not allow filenames that begin with a dot. DEPDIR=_deps fi rmdir .deps 2>/dev/null AC_SUBST([DEPDIR]) ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking Speeds up one-time builds --enable-dependency-tracking Do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH]) ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc. # 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, 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. #serial 2 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [for mf in $CONFIG_FILES; do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # So let's grep whole file. if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi grep '^DEP_FILES *= *[[^ @%:@]]' < "$mf" > /dev/null || continue # Extract the definition of DEP_FILES from the Makefile without # running `make'. DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"` test -z "$DEPDIR" && continue # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n -e '/^U = / s///p' < "$mf"` test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR" # We invoke sed twice because it is the simplest approach to # changing $(DEPDIR) to its actual value in the expansion. for file in `sed -n -e ' /^DEP_FILES = .*\\\\$/ { s/^DEP_FILES = // :loop s/\\\\$// p n /\\\\$/ b loop p } /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Copyright 2001 Free Software Foundation, Inc. -*- Autoconf -*- # 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, 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. # serial 2 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' doit: @echo done END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | fgrep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi AC_SUBST(am__include) AC_SUBST(am__quote) AC_MSG_RESULT($_am_result) rm -f confinc confmf ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright 1997, 2000, 2001 Free Software Foundation, Inc. # 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, 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. # serial 5 AC_PREREQ(2.52) # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE]) AC_SUBST([$1_FALSE]) if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([conditional \"$1\" was never defined. Usually this means the macro was only invoked conditionally.]) fi])]) dnl PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not) dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page dnl also defines GSTUFF_PKG_ERRORS on error AC_DEFUN(PKG_CHECK_MODULES, [ succeeded=no if test -z "$PKG_CONFIG"; then AC_PATH_PROG(PKG_CONFIG, pkg-config, no) fi if test "$PKG_CONFIG" = "no" ; then echo "*** The pkg-config script could not be found. Make sure it is" echo "*** in your path, or set the PKG_CONFIG environment variable" echo "*** to the full path to pkg-config." echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config." else PKG_CONFIG_MIN_VERSION=0.9.0 if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then AC_MSG_CHECKING(for $2) if $PKG_CONFIG --exists "$2" ; then AC_MSG_RESULT(yes) succeeded=yes AC_MSG_CHECKING($1_CFLAGS) $1_CFLAGS=`$PKG_CONFIG --cflags "$2"` AC_MSG_RESULT($$1_CFLAGS) AC_MSG_CHECKING($1_LIBS) $1_LIBS=`$PKG_CONFIG --libs "$2"` AC_MSG_RESULT($$1_LIBS) else $1_CFLAGS="" $1_LIBS="" ## If we have a custom action on failure, don't print errors, but ## do set a variable so people can do so. $1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` ifelse([$4], ,echo $$1_PKG_ERRORS,) fi AC_SUBST($1_CFLAGS) AC_SUBST($1_LIBS) else echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer." echo "*** See http://www.freedesktop.org/software/pkgconfig" fi fi if test $succeeded = yes; then ifelse([$3], , :, [$3]) else ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4]) fi ]) # Configure paths for GTK+ # Owen Taylor 97-11-3 dnl AM_PATH_GTK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]]) dnl Test for GTK, and define GTK_CFLAGS and GTK_LIBS dnl AC_DEFUN(AM_PATH_GTK, [dnl dnl Get the cflags and libraries from the gtk-config script dnl AC_ARG_WITH(gtk-prefix,[ --with-gtk-prefix=PFX Prefix where GTK is installed (optional)], gtk_config_prefix="$withval", gtk_config_prefix="") AC_ARG_WITH(gtk-exec-prefix,[ --with-gtk-exec-prefix=PFX Exec prefix where GTK is installed (optional)], gtk_config_exec_prefix="$withval", gtk_config_exec_prefix="") AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program], , enable_gtktest=yes) for module in . $4 do case "$module" in gthread) gtk_config_args="$gtk_config_args gthread" ;; esac done if test x$gtk_config_exec_prefix != x ; then gtk_config_args="$gtk_config_args --exec-prefix=$gtk_config_exec_prefix" if test x${GTK_CONFIG+set} != xset ; then GTK_CONFIG=$gtk_config_exec_prefix/bin/gtk-config fi fi if test x$gtk_config_prefix != x ; then gtk_config_args="$gtk_config_args --prefix=$gtk_config_prefix" if test x${GTK_CONFIG+set} != xset ; then GTK_CONFIG=$gtk_config_prefix/bin/gtk-config fi fi AC_PATH_PROG(GTK_CONFIG, gtk-config, no) min_gtk_version=ifelse([$1], ,0.99.7,$1) AC_MSG_CHECKING(for GTK - version >= $min_gtk_version) no_gtk="" if test "$GTK_CONFIG" = "no" ; then no_gtk=yes else GTK_CFLAGS=`$GTK_CONFIG $gtk_config_args --cflags` GTK_LIBS=`$GTK_CONFIG $gtk_config_args --libs` gtk_config_major_version=`$GTK_CONFIG $gtk_config_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` gtk_config_minor_version=`$GTK_CONFIG $gtk_config_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` gtk_config_micro_version=`$GTK_CONFIG $gtk_config_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` if test "x$enable_gtktest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$GTK_LIBS $LIBS" dnl dnl Now check if the installed GTK is sufficiently new. (Also sanity dnl checks the results of gtk-config to some extent dnl rm -f conf.gtktest AC_TRY_RUN([ #include #include #include int main () { int major, minor, micro; char *tmp_version; system ("touch conf.gtktest"); /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = g_strdup("$min_gtk_version"); if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_gtk_version"); exit(1); } if ((gtk_major_version != $gtk_config_major_version) || (gtk_minor_version != $gtk_config_minor_version) || (gtk_micro_version != $gtk_config_micro_version)) { printf("\n*** 'gtk-config --version' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n", $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version, gtk_major_version, gtk_minor_version, gtk_micro_version); printf ("*** was found! If gtk-config was correct, then it is best\n"); printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n"); printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); printf("*** required on your system.\n"); printf("*** If gtk-config was wrong, set the environment variable GTK_CONFIG\n"); printf("*** to point to the correct copy of gtk-config, and remove the file config.cache\n"); printf("*** before re-running configure\n"); } #if defined (GTK_MAJOR_VERSION) && defined (GTK_MINOR_VERSION) && defined (GTK_MICRO_VERSION) else if ((gtk_major_version != GTK_MAJOR_VERSION) || (gtk_minor_version != GTK_MINOR_VERSION) || (gtk_micro_version != GTK_MICRO_VERSION)) { printf("*** GTK+ header files (version %d.%d.%d) do not match\n", GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); printf("*** library (version %d.%d.%d)\n", gtk_major_version, gtk_minor_version, gtk_micro_version); } #endif /* defined (GTK_MAJOR_VERSION) ... */ else { if ((gtk_major_version > major) || ((gtk_major_version == major) && (gtk_minor_version > minor)) || ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro))) { return 0; } else { printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n", gtk_major_version, gtk_minor_version, gtk_micro_version); printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n", major, minor, micro); printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n"); printf("***\n"); printf("*** If you have already installed a sufficiently new version, this error\n"); printf("*** probably means that the wrong copy of the gtk-config shell script is\n"); printf("*** being found. The easiest way to fix this is to remove the old version\n"); printf("*** of GTK+, but you can also set the GTK_CONFIG environment to point to the\n"); printf("*** correct copy of gtk-config. (In this case, you will have to\n"); printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); printf("*** so that the correct libraries are found at run-time))\n"); } } return 1; } ],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_gtk" = x ; then AC_MSG_RESULT(yes) ifelse([$2], , :, [$2]) else AC_MSG_RESULT(no) if test "$GTK_CONFIG" = "no" ; then echo "*** The gtk-config script installed by GTK could not be found" echo "*** If GTK was installed in PREFIX, make sure PREFIX/bin is in" echo "*** your path, or set the GTK_CONFIG environment variable to the" echo "*** full path to gtk-config." else if test -f conf.gtktest ; then : else echo "*** Could not run GTK test program, checking why..." CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$LIBS $GTK_LIBS" AC_TRY_LINK([ #include #include ], [ return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); ], [ echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding GTK or finding the wrong" echo "*** version of GTK. If it is not finding GTK, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" echo "***" echo "*** If you have a RedHat 5.0 system, you should remove the GTK package that" echo "*** came with the system with the command" echo "***" echo "*** rpm --erase --nodeps gtk gtk-devel" ], [ echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means GTK was incorrectly installed" echo "*** or that you have moved GTK since it was installed. In the latter case, you" echo "*** may want to edit the gtk-config script: $GTK_CONFIG" ]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi GTK_CFLAGS="" GTK_LIBS="" ifelse([$3], , :, [$3]) fi AC_SUBST(GTK_CFLAGS) AC_SUBST(GTK_LIBS) rm -f conf.gtktest ]) gtkboard/config.guess000077500000000000000000001131501153150217100151700ustar00rootroot00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. timestamp='2001-09-04' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 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. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Written by Per Bothner . # Please send patches to . # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi dummy=dummy-$$ trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int dummy(){}" > $dummy.c ; for c in cc gcc c89 ; do ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ; if test $? = 0 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; rm -f $dummy.c $dummy.o $dummy.rel ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # Netbsd (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # Determine the machine/vendor (is the vendor relevant). case "${UNAME_MACHINE}" in amiga) machine=m68k-unknown ;; arm32) machine=arm-unknown ;; atari*) machine=m68k-atari ;; sun3*) machine=m68k-sun ;; mac68k) machine=m68k-apple ;; macppc) machine=powerpc-apple ;; hp3[0-9][05]) machine=m68k-hp ;; ibmrt|romp-ibm) machine=romp-ibm ;; *) machine=${UNAME_MACHINE}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE}" in i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit 0 ;; alpha:OSF1:*:*) if test $UNAME_RELEASE = "V4.0"; then UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` fi # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. cat <$dummy.s .data \$Lformat: .byte 37,100,45,37,120,10,0 # "%d-%x\n" .text .globl main .align 4 .ent main main: .frame \$30,16,\$26,0 ldgp \$29,0(\$27) .prologue 1 .long 0x47e03d80 # implver \$0 lda \$2,-1 .long 0x47e20c21 # amask \$2,\$1 lda \$16,\$Lformat mov \$0,\$17 not \$1,\$18 jsr \$26,printf ldgp \$29,0(\$26) mov 0,\$16 jsr \$26,exit .end main EOF eval $set_cc_for_build $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null if test "$?" = 0 ; then case `./$dummy` in 0-0) UNAME_MACHINE="alpha" ;; 1-0) UNAME_MACHINE="alphaev5" ;; 1-1) UNAME_MACHINE="alphaev56" ;; 1-101) UNAME_MACHINE="alphapca56" ;; 2-303) UNAME_MACHINE="alphaev6" ;; 2-307) UNAME_MACHINE="alphaev67" ;; 2-1307) UNAME_MACHINE="alphaev68" ;; esac fi rm -f $dummy.s $dummy echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit 0 ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit 0 ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit 0 ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit 0;; amiga:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit 0 ;; arc64:OpenBSD:*:*) echo mips64el-unknown-openbsd${UNAME_RELEASE} exit 0 ;; arc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; hkmips:OpenBSD:*:*) echo mips-unknown-openbsd${UNAME_RELEASE} exit 0 ;; pmax:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sgi:OpenBSD:*:*) echo mips-unknown-openbsd${UNAME_RELEASE} exit 0 ;; wgrisc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:OS/390:*:*) echo i370-ibm-openedition exit 0 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit 0;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit 0;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit 0 ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit 0 ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; i86pc:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit 0 ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit 0 ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit 0 ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit 0 ;; sparc*:NetBSD:*) echo `uname -p`-unknown-netbsd${UNAME_RELEASE} exit 0 ;; atari*:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit 0 ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit 0 ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit 0 ;; sun3*:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mac68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme88k:OpenBSD:*:*) echo m88k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit 0 ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit 0 ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit 0 ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit 0 ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit 0 ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD $dummy.c -o $dummy \ && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ && rm -f $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy echo mips-mips-riscos${UNAME_RELEASE} exit 0 ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit 0 ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit 0 ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit 0 ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit 0 ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit 0 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit 0 ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit 0 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit 0 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit 0 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit 0 ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit 0 ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit 0 ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy echo rs6000-ibm-aix3.2.5 elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit 0 ;; *:AIX:*:[45]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:*:*) echo rs6000-ibm-aix exit 0 ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit 0 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit 0 ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit 0 ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit 0 ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit 0 ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit 0 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) case "${HPUX_REV}" in 11.[0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; esac ;; esac fi ;; esac if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy` if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi rm -f $dummy.c $dummy fi ;; esac echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit 0 ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit 0 ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy echo unknown-hitachi-hiuxwe2 exit 0 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit 0 ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit 0 ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit 0 ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit 0 ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit 0 ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit 0 ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit 0 ;; hppa*:OpenBSD:*:*) echo hppa-unknown-openbsd exit 0 ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit 0 ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit 0 ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit 0 ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit 0 ;; CRAY*X-MP:*:*:*) echo xmp-cray-unicos exit 0 ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*T3D:*:*:*) echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY-2:*:*:*) echo cray2-cray-unicos exit 0 ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; hp300:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit 0 ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:FreeBSD:*:*) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit 0 ;; *:OpenBSD:*:*) echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` exit 0 ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit 0 ;; i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit 0 ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit 0 ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i386-pc-interix exit 0 ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit 0 ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit 0 ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; *:GNU:*:*) echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit 0 ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit 0 ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux exit 0 ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; mips:Linux:*:*) case `sed -n '/^byte/s/^.*: \(.*\) endian/\1/p' < /proc/cpuinfo` in big) echo mips-unknown-linux-gnu && exit 0 ;; little) echo mipsel-unknown-linux-gnu && exit 0 ;; esac ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit 0 ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit 0 ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit 0 ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit 0 ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit 0 ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit 0 ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit 0 ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. ld_supported_targets=`cd /; ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit 0 ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit 0 ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit 0 ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build cat >$dummy.c < #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 printf ("%s-pc-linux-gnu\n", argv[1]); # else printf ("%s-pc-linux-gnulibc1\n", argv[1]); # endif # else printf ("%s-pc-linux-gnulibc1\n", argv[1]); # endif #else printf ("%s-pc-linux-gnuaout\n", argv[1]); #endif return 0; } EOF $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit 0 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit 0 ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit 0 ;; i*86:*:5:[78]*) case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit 0 ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit 0 ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit 0 ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit 0 ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit 0 ;; paragon:*:*:*) echo i860-intel-osf1 exit 0 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit 0 ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit 0 ;; M68*:*:R3V[567]*:*) test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4.3${OS_REL} && exit 0 /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4 && exit 0 ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit 0 ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit 0 ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit 0 ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit 0 ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit 0 ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit 0 ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit 0 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit 0 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit 0 ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit 0 ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit 0 ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit 0 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit 0 ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit 0 ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit 0 ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit 0 ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit 0 ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit 0 ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Darwin:*:*) echo `uname -p`-apple-darwin${UNAME_RELEASE} exit 0 ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) if test "${UNAME_MACHINE}" = "x86pc"; then UNAME_MACHINE=pc fi echo `uname -p`-${UNAME_MACHINE}-nto-qnx exit 0 ;; *:QNX:*:4*) echo i386-pc-qnx exit 0 ;; NSR-[KW]:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit 0 ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit 0 ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit 0 ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit 0 ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit 0 ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit 0 ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit 0 ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit 0 ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit 0 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit 0 ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit 0 ;; *:ITS:*:*) echo pdp10-unknown-its exit 0 ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit 0 ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit 0 ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit 0 ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; c34*) echo c34-convex-bsd exit 0 ;; c38*) echo c38-convex-bsd exit 0 ;; c4*) echo c4-convex-bsd exit 0 ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: gtkboard/config.h.in000066400000000000000000000032771153150217100147030ustar00rootroot00000000000000/* config.h.in. Generated from configure.in by autoheader. */ /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `mkdir' function. */ #undef HAVE_MKDIR /* Do we have the SDL library */ #undef HAVE_SDL /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `strtol' function. */ #undef HAVE_STRTOL /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define as the return type of signal handlers (`int' or `void'). */ #undef RETSIGTYPE /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION /* Define to empty if `const' does not conform to ANSI C. */ #undef const gtkboard/config.sub000077500000000000000000000671001153150217100146360ustar00rootroot00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. timestamp='2001-09-07' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 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. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit 0;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | storm-chaos* | os2-emx* | windows32-*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ | c4x | clipper \ | d10v | d30v | dsp16xx \ | fr30 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | m32r | m68000 | m68k | m88k | mcore \ | mips16 | mips64 | mips64el | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el | mips64vr4300 \ | mips64vr4300el | mips64vr5000 | mips64vr5000el \ | mipsbe | mipseb | mipsel | mipsle | mipstx39 | mipstx39el \ | mipsisa32 \ | mn10200 | mn10300 \ | ns16k | ns32k \ | openrisc \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | s390 | s390x \ | sh | sh[34] | sh[34]eb | shbe | shle \ | sparc | sparc64 | sparclet | sparclite | sparcv9 | sparcv9b \ | stormy16 | strongarm \ | tahoe | thumb | tic80 | tron \ | v850 \ | we32k \ | x86 | xscale \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alphapca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armv*-* \ | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c54x-* \ | clipper-* | cray2-* | cydra-* \ | d10v-* | d30v-* \ | elxsi-* \ | f30[01]-* | f700-* | fr30-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | m32r-* \ | m68000-* | m680[01234]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | mcore-* \ | mips-* | mips16-* | mips64-* | mips64el-* | mips64orion-* \ | mips64orionel-* | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* | mipsbe-* | mipseb-* \ | mipsle-* | mipsel-* | mipstx39-* | mipstx39el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | s390-* | s390x-* \ | sh-* | sh[34]-* | sh[34]eb-* | shbe-* | shle-* \ | sparc-* | sparc64-* | sparc86x-* | sparclite-* \ | sparcv9-* | sparcv9b-* | stormy16-* | strongarm-* | sv1-* \ | t3e-* | tahoe-* | thumb-* | tic30-* | tic54x-* | tic80-* | tron-* \ | v850-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xmp-* | xps100-* | xscale-* \ | ymp-* \ | z8k-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | ymp) basic_machine=ymp-cray os=-unicos ;; cray2) basic_machine=cray2-cray os=-unicos ;; [cjt]90) basic_machine=${basic_machine}-cray os=-unicos ;; crds | unos) basic_machine=m68k-crds ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mipsel*-linux*) basic_machine=mipsel-unknown os=-linux-gnu ;; mips*-linux*) basic_machine=mips-unknown os=-linux-gnu ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; mmix*) basic_machine=mmix-knuth os=-mmixware ;; monitor) basic_machine=m68k-rom68k os=-coff ;; msdos) basic_machine=i386-pc os=-msdos ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pentium | p5 | k5 | k6 | nexgen) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon) basic_machine=i686-pc ;; pentiumii | pentium2) basic_machine=i686-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sparclite-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=t3e-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; tower | tower-32) basic_machine=m68k-ncr ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; windows32) basic_machine=i386-pc os=-windows32-msvcrt ;; xmp) basic_machine=xmp-cray os=-unicos ;; xps | xps100) basic_machine=xps100-honeywell ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; mips) if [ x$os = x-linux-gnu ]; then basic_machine=mips-unknown else basic_machine=mips-mips fi ;; romp) basic_machine=romp-ibm ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh3 | sh4 | sh3eb | sh4eb) basic_machine=sh-unknown ;; sparc | sparcv9 | sparcv9b) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; c4x*) basic_machine=c4x-none os=-coff ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto*) os=-nto-qnx ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-ibm) os=-aix ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -ptx*) vendor=sequent ;; -vxsim* | -vxworks*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: gtkboard/configure000077500000000000000000005160331153150217100145660ustar00rootroot00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.57. # # Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 # Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi # Support unset when possible. if (FOO=FOO; unset FOO) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" # Sed expression to map a string onto a valid variable name. as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local ac_config_libobj_dir=. cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= ac_unique_file="src/" # Factoring default headers for most tests. ac_includes_default="\ #include #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if STDC_HEADERS # include # include #else # if HAVE_STDLIB_H # include # endif #endif #if HAVE_STRING_H # if !STDC_HEADERS && HAVE_MEMORY_H # include # endif # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_INTTYPES_H # include #else # if HAVE_STDINT_H # include # endif #endif #if HAVE_UNISTD_H # include #endif" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO AMTAR install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM AWK SET_MAKE CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE PKG_CONFIG GTK_CFLAGS GTK_LIBS GTK_CONFIG GNOME_CFLAGS GNOME_LIBS WITH_GNOME_TRUE WITH_GNOME_FALSE CPP EGREP LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' ac_prev= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" ac_prev= continue fi ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_option in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "enable_$ac_feature='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/-/_/g'` eval "with_$ac_package=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$ac_envvar='$ac_optarg'" export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_confdir=`(dirname "$0") 2>/dev/null || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$0" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi (cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 { (exit 1); exit 1; }; } srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias ac_env_CC_set=${CC+set} ac_env_CC_value=$CC ac_cv_env_CC_set=${CC+set} ac_cv_env_CC_value=$CC ac_env_CFLAGS_set=${CFLAGS+set} ac_env_CFLAGS_value=$CFLAGS ac_cv_env_CFLAGS_set=${CFLAGS+set} ac_cv_env_CFLAGS_value=$CFLAGS ac_env_LDFLAGS_set=${LDFLAGS+set} ac_env_LDFLAGS_value=$LDFLAGS ac_cv_env_LDFLAGS_set=${LDFLAGS+set} ac_cv_env_LDFLAGS_value=$LDFLAGS ac_env_CPPFLAGS_set=${CPPFLAGS+set} ac_env_CPPFLAGS_value=$CPPFLAGS ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} ac_cv_env_CPPFLAGS_value=$CPPFLAGS ac_env_CPP_set=${CPP+set} ac_env_CPP_value=$CPP ac_cv_env_CPP_set=${CPP+set} ac_cv_env_CPP_value=$CPP # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] _ACEOF cat <<_ACEOF Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --datadir=DIR read-only architecture-independent data [PREFIX/share] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --infodir=DIR info documentation [PREFIX/info] --mandir=DIR man documentation [PREFIX/man] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] --target=TARGET configure for building compilers for TARGET [HOST] _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-dependency-tracking Speeds up one-time builds --enable-dependency-tracking Do not reject slow dependency extractors --disable-gtk2 Don't look for GTK2 libraries --disable-gtktest Do not try to compile and run a test GTK program --disable-sdl Don't look for the SDL library --enable-gnome Turn on gnome Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gtk-prefix=PFX Prefix where GTK is installed (optional) --with-gtk-exec-prefix=PFX Exec prefix where GTK is installed (optional) Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. _ACEOF fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d $ac_dir || continue ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be # absolute. ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` cd $ac_dir # Check for guested configure; otherwise get Cygnus style configure. if test -f $ac_srcdir/configure.gnu; then echo $SHELL $ac_srcdir/configure.gnu --help=recursive elif test -f $ac_srcdir/configure; then echo $SHELL $ac_srcdir/configure --help=recursive elif test -f $ac_srcdir/configure.ac || test -f $ac_srcdir/configure.in; then echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi cd $ac_popdir done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit 0 fi exec 5>config.log cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.57. Invocation command line was $ $0 $@ _ACEOF { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` hostinfo = `(hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. echo "PATH: $as_dir" done } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_sep= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" # Get rid of the leading space. ac_sep=" " ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Be sure not to use single quotes in there, as some shells, # such as our DU 5.0 friend, will then `close' the trap. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------- ## ## Output files. ## ## ------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo sed "/^$/d" confdefs.h | sort echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core core.* *.core && rm -rf conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; *) . ./$cache_file;; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val="\$ac_cv_env_${ac_var}_value" eval ac_new_val="\$ac_env_${ac_var}_value" case $ac_old_set,$ac_new_set in set,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do if test -f $ac_dir/install-sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f $ac_dir/install.sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f $ac_dir/shtool; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} { (exit 1); exit 1; }; } fi ac_config_guess="$SHELL $ac_aux_dir/config.guess" ac_config_sub="$SHELL $ac_aux_dir/config.sub" ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # Make sure we can run config.sub. $ac_config_sub sun4 >/dev/null 2>&1 || { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 echo "$as_me: error: cannot run $ac_config_sub" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking build system type" >&5 echo $ECHO_N "checking build system type... $ECHO_C" >&6 if test "${ac_cv_build+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_build_alias=$build_alias test -z "$ac_cv_build_alias" && ac_cv_build_alias=`$ac_config_guess` test -z "$ac_cv_build_alias" && { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_build" >&5 echo "${ECHO_T}$ac_cv_build" >&6 build=$ac_cv_build build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$as_me:$LINENO: checking host system type" >&5 echo $ECHO_N "checking host system type... $ECHO_C" >&6 if test "${ac_cv_host+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_host_alias=$host_alias test -z "$ac_cv_host_alias" && ac_cv_host_alias=$ac_cv_build_alias ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_host" >&5 echo "${ECHO_T}$ac_cv_host" >&6 host=$ac_cv_host host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$as_me:$LINENO: checking target system type" >&5 echo $ECHO_N "checking target system type... $ECHO_C" >&6 if test "${ac_cv_target+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_target_alias=$target_alias test "x$ac_cv_target_alias" = "x" && ac_cv_target_alias=$ac_cv_host_alias ac_cv_target=`$ac_config_sub $ac_cv_target_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_target_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_target_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_target" >&5 echo "${ECHO_T}$ac_cv_target" >&6 target=$ac_cv_target target_cpu=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` target_vendor=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` target_os=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # The aliases save the names the user supplied, while $host etc. # will get canonicalized. test -n "$target_alias" && test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_prefix=${target_alias}- # Add the stamp file to the list of files AC keeps track of, # along with our hook. ac_config_headers="$ac_config_headers config.h" am__api_version="1.6" # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL=$ac_install_sh fi fi echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo "$as_me:$LINENO: checking whether build environment is sane" >&5 echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi test "$2" = conftest.file ) then # Ok. : else { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 test "$program_prefix" != NONE && program_transform_name="s,^,$program_prefix,;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s,\$,$program_suffix,;$program_transform_name" # Double any \ or $. echo might interpret backslashes. # By default was `s,x,x', remove it if useless. cat <<\_ACEOF >conftest.sed s/[\\$]/&&/g;s/;s,x,x,$// _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm conftest.sed # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then echo "$as_me:$LINENO: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$AWK" && break done echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,./+-,__p_,'` if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF all: @echo 'ac_maketemp="$(MAKE)"' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftest.make fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 SET_MAKE= else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 SET_MAKE="MAKE=${MAKE-make}" fi # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } fi # Define the identity of the package. PACKAGE=gtkboard VERSION=0.11pre0 cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} AMTAR=${AMTAR-"${am_missing_run}tar"} install_sh=${install_sh-"$am_aux_dir/install-sh"} # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi STRIP=$ac_ct_STRIP else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" # We need awk for the "check" target. The system "awk" is bad on # some platforms. ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CC" && break done CC=$ac_ct_CC fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. echo "$as_me:$LINENO: checking for C compiler default output" >&5 echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6 ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last # resort. # Be careful to initialize this variable, since it used to be cached. # Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. ac_cv_exeext= # b.out is created by i960 compilers. for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; conftest.$ac_ext ) # This is the source file. ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` # FIXME: I believe we export ac_cv_exeext for Libtool, # but it would be cool to find out if it's true. Does anybody # maintain Libtool? --akim. export ac_cv_exeext break;; * ) break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6 echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` export ac_cv_exeext break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6 rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6 OBJEXT=$ac_cv_objext ac_objext=$OBJEXT echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cc_g=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_stdc=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX 10.20 and later -Ae # HP-UX older versions -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_stdc=$ac_arg break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext done rm -f conftest.$ac_ext conftest.$ac_objext CC=$ac_save_CC fi case "x$ac_cv_prog_cc_stdc" in x|xno) echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 CC="$CC $ac_cv_prog_cc_stdc" ;; esac # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >conftest.$ac_ext <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ ''\ '#include ' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu rm -f .deps 2>/dev/null mkdir .deps 2>/dev/null if test -d .deps; then DEPDIR=.deps else # MS-DOS does not allow filenames that begin with a dot. DEPDIR=_deps fi rmdir .deps 2>/dev/null ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' doit: @echo done END # If we don't find an include directive, just comment out the code. echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | fgrep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi echo "$as_me:$LINENO: result: $_am_result" >&5 echo "${ECHO_T}$_am_result" >&6 rm -f confinc confmf # Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then enableval="$enable_dependency_tracking" fi; if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi for depmode in $am_compiler_list; do # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. echo '#include "conftest.h"' > conftest.c echo 'int i;' > conftest.h echo "${am__include} ${am__quote}conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=conftest.c object=conftest.o \ depfile=conftest.Po tmpdepfile=conftest.TPo \ $SHELL ./depcomp $depcc -c conftest.c -o conftest.o >/dev/null 2>&1 && grep conftest.h conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then am_cv_CC_dependencies_compiler_type=$depmode break fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type # Check whether --enable-gtk2 or --disable-gtk2 was given. if test "${enable_gtk2+set}" = set; then enableval="$enable_gtk2" enable_gtk2=$enableval else enable_gtk2="yes" fi; found_gtk2=0; if test "$enable_gtk2" = "yes" ; then succeeded=no if test -z "$PKG_CONFIG"; then # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_PKG_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 echo "${ECHO_T}$PKG_CONFIG" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test "$PKG_CONFIG" = "no" ; then echo "*** The pkg-config script could not be found. Make sure it is" echo "*** in your path, or set the PKG_CONFIG environment variable" echo "*** to the full path to pkg-config." echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config." else PKG_CONFIG_MIN_VERSION=0.9.0 if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then echo "$as_me:$LINENO: checking for gtk+-2.0 >= 2.0.0" >&5 echo $ECHO_N "checking for gtk+-2.0 >= 2.0.0... $ECHO_C" >&6 if $PKG_CONFIG --exists "gtk+-2.0 >= 2.0.0" ; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 succeeded=yes echo "$as_me:$LINENO: checking GTK_CFLAGS" >&5 echo $ECHO_N "checking GTK_CFLAGS... $ECHO_C" >&6 GTK_CFLAGS=`$PKG_CONFIG --cflags "gtk+-2.0 >= 2.0.0"` echo "$as_me:$LINENO: result: $GTK_CFLAGS" >&5 echo "${ECHO_T}$GTK_CFLAGS" >&6 echo "$as_me:$LINENO: checking GTK_LIBS" >&5 echo $ECHO_N "checking GTK_LIBS... $ECHO_C" >&6 GTK_LIBS=`$PKG_CONFIG --libs "gtk+-2.0 >= 2.0.0"` echo "$as_me:$LINENO: result: $GTK_LIBS" >&5 echo "${ECHO_T}$GTK_LIBS" >&6 else GTK_CFLAGS="" GTK_LIBS="" ## If we have a custom action on failure, don't print errors, but ## do set a variable so people can do so. GTK_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gtk+-2.0 >= 2.0.0"` fi else echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer." echo "*** See http://www.freedesktop.org/software/pkgconfig" fi fi if test $succeeded = yes; then found_gtk2=1 else found_gtk2=0 fi fi if test $found_gtk2 = 0; then # Check whether --with-gtk-prefix or --without-gtk-prefix was given. if test "${with_gtk_prefix+set}" = set; then withval="$with_gtk_prefix" gtk_config_prefix="$withval" else gtk_config_prefix="" fi; # Check whether --with-gtk-exec-prefix or --without-gtk-exec-prefix was given. if test "${with_gtk_exec_prefix+set}" = set; then withval="$with_gtk_exec_prefix" gtk_config_exec_prefix="$withval" else gtk_config_exec_prefix="" fi; # Check whether --enable-gtktest or --disable-gtktest was given. if test "${enable_gtktest+set}" = set; then enableval="$enable_gtktest" else enable_gtktest=yes fi; for module in . do case "$module" in gthread) gtk_config_args="$gtk_config_args gthread" ;; esac done if test x$gtk_config_exec_prefix != x ; then gtk_config_args="$gtk_config_args --exec-prefix=$gtk_config_exec_prefix" if test x${GTK_CONFIG+set} != xset ; then GTK_CONFIG=$gtk_config_exec_prefix/bin/gtk-config fi fi if test x$gtk_config_prefix != x ; then gtk_config_args="$gtk_config_args --prefix=$gtk_config_prefix" if test x${GTK_CONFIG+set} != xset ; then GTK_CONFIG=$gtk_config_prefix/bin/gtk-config fi fi # Extract the first word of "gtk-config", so it can be a program name with args. set dummy gtk-config; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_GTK_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $GTK_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_GTK_CONFIG="$GTK_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GTK_CONFIG="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_GTK_CONFIG" && ac_cv_path_GTK_CONFIG="no" ;; esac fi GTK_CONFIG=$ac_cv_path_GTK_CONFIG if test -n "$GTK_CONFIG"; then echo "$as_me:$LINENO: result: $GTK_CONFIG" >&5 echo "${ECHO_T}$GTK_CONFIG" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi min_gtk_version=1.2.3 echo "$as_me:$LINENO: checking for GTK - version >= $min_gtk_version" >&5 echo $ECHO_N "checking for GTK - version >= $min_gtk_version... $ECHO_C" >&6 no_gtk="" if test "$GTK_CONFIG" = "no" ; then no_gtk=yes else GTK_CFLAGS=`$GTK_CONFIG $gtk_config_args --cflags` GTK_LIBS=`$GTK_CONFIG $gtk_config_args --libs` gtk_config_major_version=`$GTK_CONFIG $gtk_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` gtk_config_minor_version=`$GTK_CONFIG $gtk_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` gtk_config_micro_version=`$GTK_CONFIG $gtk_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` if test "x$enable_gtktest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$GTK_LIBS $LIBS" rm -f conf.gtktest if test "$cross_compiling" = yes; then echo $ac_n "cross compiling; assumed OK... $ac_c" else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include int main () { int major, minor, micro; char *tmp_version; system ("touch conf.gtktest"); /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = g_strdup("$min_gtk_version"); if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_gtk_version"); exit(1); } if ((gtk_major_version != $gtk_config_major_version) || (gtk_minor_version != $gtk_config_minor_version) || (gtk_micro_version != $gtk_config_micro_version)) { printf("\n*** 'gtk-config --version' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n", $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version, gtk_major_version, gtk_minor_version, gtk_micro_version); printf ("*** was found! If gtk-config was correct, then it is best\n"); printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n"); printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); printf("*** required on your system.\n"); printf("*** If gtk-config was wrong, set the environment variable GTK_CONFIG\n"); printf("*** to point to the correct copy of gtk-config, and remove the file config.cache\n"); printf("*** before re-running configure\n"); } #if defined (GTK_MAJOR_VERSION) && defined (GTK_MINOR_VERSION) && defined (GTK_MICRO_VERSION) else if ((gtk_major_version != GTK_MAJOR_VERSION) || (gtk_minor_version != GTK_MINOR_VERSION) || (gtk_micro_version != GTK_MICRO_VERSION)) { printf("*** GTK+ header files (version %d.%d.%d) do not match\n", GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); printf("*** library (version %d.%d.%d)\n", gtk_major_version, gtk_minor_version, gtk_micro_version); } #endif /* defined (GTK_MAJOR_VERSION) ... */ else { if ((gtk_major_version > major) || ((gtk_major_version == major) && (gtk_minor_version > minor)) || ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro))) { return 0; } else { printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n", gtk_major_version, gtk_minor_version, gtk_micro_version); printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n", major, minor, micro); printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n"); printf("***\n"); printf("*** If you have already installed a sufficiently new version, this error\n"); printf("*** probably means that the wrong copy of the gtk-config shell script is\n"); printf("*** being found. The easiest way to fix this is to remove the old version\n"); printf("*** of GTK+, but you can also set the GTK_CONFIG environment to point to the\n"); printf("*** correct copy of gtk-config. (In this case, you will have to\n"); printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); printf("*** so that the correct libraries are found at run-time))\n"); } } return 1; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) no_gtk=yes fi rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_gtk" = x ; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 : else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 if test "$GTK_CONFIG" = "no" ; then echo "*** The gtk-config script installed by GTK could not be found" echo "*** If GTK was installed in PREFIX, make sure PREFIX/bin is in" echo "*** your path, or set the GTK_CONFIG environment variable to the" echo "*** full path to gtk-config." else if test -f conf.gtktest ; then : else echo "*** Could not run GTK test program, checking why..." CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$LIBS $GTK_LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding GTK or finding the wrong" echo "*** version of GTK. If it is not finding GTK, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" echo "***" echo "*** If you have a RedHat 5.0 system, you should remove the GTK package that" echo "*** came with the system with the command" echo "***" echo "*** rpm --erase --nodeps gtk gtk-devel" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means GTK was incorrectly installed" echo "*** or that you have moved GTK since it was installed. In the latter case, you" echo "*** may want to edit the gtk-config script: $GTK_CONFIG" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi GTK_CFLAGS="" GTK_LIBS="" { { echo "$as_me:$LINENO: error: gtkboard needs GTK 1.2.3 or higher" >&5 echo "$as_me: error: gtkboard needs GTK 1.2.3 or higher" >&2;} { (exit 1); exit 1; }; } fi rm -f conf.gtktest fi # Check whether --enable-sdl or --disable-sdl was given. if test "${enable_sdl+set}" = set; then enableval="$enable_sdl" enable_sdl=$enableval else enable_sdl="yes" fi; if test "$enable_sdl" = "yes" ; then # SDL_VERSION=1.2.0 # AM_PATH_SDL($SDL_VERSION, # AC_DEFINE([HAVE_SDL], [], [Do we have the SDL library]), # AC_MSG_WARN([*** SDL version $SDL_VERSION not found. Sound will be disabled]) # ) echo "$as_me:$LINENO: checking for Mix_OpenAudio in -lSDL_mixer" >&5 echo $ECHO_N "checking for Mix_OpenAudio in -lSDL_mixer... $ECHO_C" >&6 if test "${ac_cv_lib_SDL_mixer_Mix_OpenAudio+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lSDL_mixer $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char Mix_OpenAudio (); int main () { Mix_OpenAudio (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_SDL_mixer_Mix_OpenAudio=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_SDL_mixer_Mix_OpenAudio=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_SDL_mixer_Mix_OpenAudio" >&5 echo "${ECHO_T}$ac_cv_lib_SDL_mixer_Mix_OpenAudio" >&6 if test $ac_cv_lib_SDL_mixer_Mix_OpenAudio = yes; then have_SDL_mixer=yes else have_SDL_mixer=no fi if test "$have_SDL_mixer" = "yes" ; then # CFLAGS="$CFLAGS -DHAVE_SDL" cat >>confdefs.h <<\_ACEOF #define HAVE_SDL _ACEOF LIBS="$LIBS -lSDL_mixer" else echo "*** SDL_mixer not found. Configuring without audio support." fi # CFLAGS="$CFLAGS $SDL_CFLAGS" # LIBS="$LIBS $SDL_LIBS -lSDL_mixer" fi gnome=false GNOME_CFLAGS="" GNOME_LIBS="" # Check whether --enable-gnome or --disable-gnome was given. if test "${enable_gnome+set}" = set; then enableval="$enable_gnome" if test "x$enableval" = "xyes"; then gnome=true fi fi; if test "$gnome" = true ; then succeeded=no if test -z "$PKG_CONFIG"; then # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_PKG_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 echo "${ECHO_T}$PKG_CONFIG" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test "$PKG_CONFIG" = "no" ; then echo "*** The pkg-config script could not be found. Make sure it is" echo "*** in your path, or set the PKG_CONFIG environment variable" echo "*** to the full path to pkg-config." echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config." else PKG_CONFIG_MIN_VERSION=0.9.0 if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then echo "$as_me:$LINENO: checking for libgnome-2.0 >= 2.0.0 libgnomeui-2.0 >= 2.0.0 " >&5 echo $ECHO_N "checking for libgnome-2.0 >= 2.0.0 libgnomeui-2.0 >= 2.0.0 ... $ECHO_C" >&6 if $PKG_CONFIG --exists " libgnome-2.0 >= 2.0.0 libgnomeui-2.0 >= 2.0.0 " ; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 succeeded=yes echo "$as_me:$LINENO: checking GNOME_CFLAGS" >&5 echo $ECHO_N "checking GNOME_CFLAGS... $ECHO_C" >&6 GNOME_CFLAGS=`$PKG_CONFIG --cflags " libgnome-2.0 >= 2.0.0 libgnomeui-2.0 >= 2.0.0 "` echo "$as_me:$LINENO: result: $GNOME_CFLAGS" >&5 echo "${ECHO_T}$GNOME_CFLAGS" >&6 echo "$as_me:$LINENO: checking GNOME_LIBS" >&5 echo $ECHO_N "checking GNOME_LIBS... $ECHO_C" >&6 GNOME_LIBS=`$PKG_CONFIG --libs " libgnome-2.0 >= 2.0.0 libgnomeui-2.0 >= 2.0.0 "` echo "$as_me:$LINENO: result: $GNOME_LIBS" >&5 echo "${ECHO_T}$GNOME_LIBS" >&6 else GNOME_CFLAGS="" GNOME_LIBS="" ## If we have a custom action on failure, don't print errors, but ## do set a variable so people can do so. GNOME_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors " libgnome-2.0 >= 2.0.0 libgnomeui-2.0 >= 2.0.0 "` echo $GNOME_PKG_ERRORS fi else echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer." echo "*** See http://www.freedesktop.org/software/pkgconfig" fi fi if test $succeeded = yes; then : else { { echo "$as_me:$LINENO: error: Library requirements ( libgnome-2.0 >= 2.0.0 libgnomeui-2.0 >= 2.0.0 ) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them." >&5 echo "$as_me: error: Library requirements ( libgnome-2.0 >= 2.0.0 libgnomeui-2.0 >= 2.0.0 ) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them." >&2;} { (exit 1); exit 1; }; } fi GNOME_CFLAGS="$GNOME_CFLAGS -DHAVE_GNOME=1" fi if test "x$gnome" = "xtrue"; then WITH_GNOME_TRUE= WITH_GNOME_FALSE='#' else WITH_GNOME_TRUE='#' WITH_GNOME_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$CPP" >&6 ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6 if test "${ac_cv_prog_egrep+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi fi echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 echo "${ECHO_T}$ac_cv_prog_egrep" >&6 EGREP=$ac_cv_prog_egrep echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc in yes:no ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} ( cat <<\_ASBOX ## ------------------------------------ ## ## Report this to bug-autoconf@gnu.org. ## ## ------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; no:yes ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} ( cat <<\_ASBOX ## ------------------------------------ ## ## Report this to bug-autoconf@gnu.org. ## ## ------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6 if test "${ac_cv_c_const+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { /* FIXME: Include the comments suggested by Paul. */ #ifndef __cplusplus /* Ultrix mips cc rejects this. */ typedef int charset[2]; const charset x; /* SunOS 4.1.1 cc rejects this. */ char const *const *ccp; char **p; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; ccp = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++ccp; p = (char**) ccp; ccp = (char const *const *) p; { /* SCO 3.2v4 cc rejects this. */ char *t; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; }; struct s *b; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; } #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_c_const=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_c_const=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 echo "${ECHO_T}$ac_cv_c_const" >&6 if test $ac_cv_c_const = no; then cat >>confdefs.h <<\_ACEOF #define const _ACEOF fi echo "$as_me:$LINENO: checking return type of signal handlers" >&5 echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6 if test "${ac_cv_type_signal+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #ifdef signal # undef signal #endif #ifdef __cplusplus extern "C" void (*signal (int, void (*)(int)))(int); #else void (*signal ()) (); #endif int main () { int i; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_signal=void else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_signal=int fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5 echo "${ECHO_T}$ac_cv_type_signal" >&6 cat >>confdefs.h <<_ACEOF #define RETSIGTYPE $ac_cv_type_signal _ACEOF for ac_func in mkdir strtol do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else char (*f) () = $ac_func; #endif #ifdef __cplusplus } #endif int main () { return f != $ac_func; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done ac_config_files="$ac_config_files Makefile doc/Makefile src/Makefile sounds/Makefile pixmaps/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. { (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | sed ' t clear : clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end' >>confcache if diff $cache_file confcache >/dev/null 2>&1; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/; s/:*\${srcdir}:*/:/; s/:*@srcdir@:*/:/; s/^\([^=]*=[ ]*\):*/\1/; s/:*$//; s/^[^=]*=[ ]*$//; }' fi DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_i=`echo "$ac_i" | sed 's/\$U\././;s/\.o$//;s/\.obj$//'` # 2. Add them. ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${WITH_GNOME_TRUE}" && test -z "${WITH_GNOME_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"WITH_GNOME\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"WITH_GNOME\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi # Support unset when possible. if (FOO=FOO; unset FOO) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" # Sed expression to map a string onto a valid variable name. as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH exec 6>&1 # Open the log real soon, to keep \$[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. Logging --version etc. is OK. exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX } >&5 cat >&5 <<_CSEOF This file was extended by $as_me, which was generated by GNU Autoconf 2.57. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ _CSEOF echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 echo >&5 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.57, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." srcdir=$srcdir INSTALL="$INSTALL" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "x$1" : 'x\([^=]*\)='` ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` ac_shift=: ;; -*) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; *) # This is not an option, so the user has probably given explicit # arguments. ac_option=$1 ac_need_defaults=false;; esac case $ac_option in # Handling of the options. _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header { { echo "$as_me:$LINENO: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF if \$ac_cs_recheck; then echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # INIT-COMMANDS section. # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; "doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "src/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "sounds/Makefile" ) CONFIG_FILES="$CONFIG_FILES sounds/Makefile" ;; "pixmaps/Makefile" ) CONFIG_FILES="$CONFIG_FILES pixmaps/Makefile" ;; "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason to put it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./confstat$$-$RANDOM (umask 077 && mkdir $tmp) } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "\$CONFIG_FILES"; then # Protect against being on the right side of a sed subst in config.status. sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@DEFS@,$DEFS,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@LIBS@,$LIBS,;t t s,@build@,$build,;t t s,@build_cpu@,$build_cpu,;t t s,@build_vendor@,$build_vendor,;t t s,@build_os@,$build_os,;t t s,@host@,$host,;t t s,@host_cpu@,$host_cpu,;t t s,@host_vendor@,$host_vendor,;t t s,@host_os@,$host_os,;t t s,@target@,$target,;t t s,@target_cpu@,$target_cpu,;t t s,@target_vendor@,$target_vendor,;t t s,@target_os@,$target_os,;t t s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t s,@INSTALL_DATA@,$INSTALL_DATA,;t t s,@PACKAGE@,$PACKAGE,;t t s,@VERSION@,$VERSION,;t t s,@ACLOCAL@,$ACLOCAL,;t t s,@AUTOCONF@,$AUTOCONF,;t t s,@AUTOMAKE@,$AUTOMAKE,;t t s,@AUTOHEADER@,$AUTOHEADER,;t t s,@MAKEINFO@,$MAKEINFO,;t t s,@AMTAR@,$AMTAR,;t t s,@install_sh@,$install_sh,;t t s,@STRIP@,$STRIP,;t t s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t s,@AWK@,$AWK,;t t s,@SET_MAKE@,$SET_MAKE,;t t s,@CC@,$CC,;t t s,@CFLAGS@,$CFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t s,@CPPFLAGS@,$CPPFLAGS,;t t s,@ac_ct_CC@,$ac_ct_CC,;t t s,@EXEEXT@,$EXEEXT,;t t s,@OBJEXT@,$OBJEXT,;t t s,@DEPDIR@,$DEPDIR,;t t s,@am__include@,$am__include,;t t s,@am__quote@,$am__quote,;t t s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t s,@CCDEPMODE@,$CCDEPMODE,;t t s,@PKG_CONFIG@,$PKG_CONFIG,;t t s,@GTK_CFLAGS@,$GTK_CFLAGS,;t t s,@GTK_LIBS@,$GTK_LIBS,;t t s,@GTK_CONFIG@,$GTK_CONFIG,;t t s,@GNOME_CFLAGS@,$GNOME_CFLAGS,;t t s,@GNOME_LIBS@,$GNOME_LIBS,;t t s,@WITH_GNOME_TRUE@,$WITH_GNOME_TRUE,;t t s,@WITH_GNOME_FALSE@,$WITH_GNOME_FALSE,;t t s,@CPP@,$CPP,;t t s,@EGREP@,$EGREP,;t t s,@LIBOBJS@,$LIBOBJS,;t t s,@LTLIBOBJS@,$LTLIBOBJS,;t t CEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_lines` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be # absolute. ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_builddir$INSTALL ;; esac if test x"$ac_file" != x-; then { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then configure_input= else configure_input="$ac_file. " fi configure_input=$configure_input"Generated from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo $f;; *) # Relative if test -f "$f"; then # Build tree echo $f elif test -f "$srcdir/$f"; then # Source tree echo $srcdir/$f else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;t t s,@srcdir@,$ac_srcdir,;t t s,@abs_srcdir@,$ac_abs_srcdir,;t t s,@top_srcdir@,$ac_top_srcdir,;t t s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t s,@builddir@,$ac_builddir,;t t s,@abs_builddir@,$ac_abs_builddir,;t t s,@top_builddir@,$ac_top_builddir,;t t s,@abs_top_builddir@,$ac_abs_top_builddir,;t t s,@INSTALL@,$ac_INSTALL,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then mv $tmp/out $ac_file else cat $tmp/out rm -f $tmp/out fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_HEADER section. # # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='[ ].*$,\1#\2' ac_dC=' ' ac_dD=',;t' # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='$,\1#\2define\3' ac_uC=' ' ac_uD=',;t' for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo $f;; *) # Relative if test -f "$f"; then # Build tree echo $f elif test -f "$srcdir/$f"; then # Source tree echo $srcdir/$f else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } # Remove the trailing spaces. sed 's/[ ]*$//' $ac_file_inputs >$tmp/in _ACEOF # Transform confdefs.h into two sed scripts, `conftest.defines' and # `conftest.undefs', that substitutes the proper values into # config.h.in to produce config.h. The first handles `#define' # templates, and the second `#undef' templates. # And first: Protect against being on the right side of a sed subst in # config.status. Protect against being in an unquoted here document # in config.status. rm -f conftest.defines conftest.undefs # Using a here document instead of a string reduces the quoting nightmare. # Putting comments in sed scripts is not portable. # # `end' is used to avoid that the second main sed command (meant for # 0-ary CPP macros) applies to n-ary macro definitions. # See the Autoconf documentation for `clear'. cat >confdef2sed.sed <<\_ACEOF s/[\\&,]/\\&/g s,[\\$`],\\&,g t clear : clear s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp t end s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp : end _ACEOF # If some macros were called several times there might be several times # the same #defines, which is useless. Nevertheless, we may not want to # sort them, since we want the *last* AC-DEFINE to be honored. uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs rm -f confdef2sed.sed # This sed command replaces #undef with comments. This is necessary, for # example, in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. cat >>conftest.undefs <<\_ACEOF s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, _ACEOF # Break up conftest.defines because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS echo ' :' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.defines >/dev/null do # Write a limited-size here document to $tmp/defines.sed. echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#define' lines. echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/defines.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail rm -f conftest.defines mv conftest.tail conftest.defines done rm -f conftest.defines echo ' fi # grep' >>$CONFIG_STATUS echo >>$CONFIG_STATUS # Break up conftest.undefs because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #undef templates' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.undefs >/dev/null do # Write a limited-size here document to $tmp/undefs.sed. echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#undef' echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/undefs.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail rm -f conftest.undefs mv conftest.tail conftest.undefs done rm -f conftest.undefs cat >>$CONFIG_STATUS <<\_ACEOF # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then echo "/* Generated by configure. */" >$tmp/config.h else echo "/* $ac_file. Generated by configure. */" >$tmp/config.h fi cat $tmp/in >>$tmp/config.h rm -f $tmp/in if test x"$ac_file" != x-; then if diff $ac_file $tmp/config.h >/dev/null 2>&1; then { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 echo "$as_me: $ac_file is unchanged" >&6;} else ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } rm -f $ac_file mv $tmp/config.h $ac_file fi else cat $tmp/config.h rm -f $tmp/config.h fi # Run the commands associated with the file. case $ac_file in config.h ) # update the timestamp echo 'timestamp for config.h' >"./stamp-h1" ;; esac done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_COMMANDS section. # for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue ac_dest=`echo "$ac_file" | sed 's,:.*,,'` ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_dir=`(dirname "$ac_dest") 2>/dev/null || $as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_dest" : 'X\(//\)[^/]' \| \ X"$ac_dest" : 'X\(//\)$' \| \ X"$ac_dest" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_dest" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be # absolute. ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 echo "$as_me: executing $ac_dest commands" >&6;} case $ac_dest in depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # So let's grep whole file. if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then dirpart=`(dirname "$mf") 2>/dev/null || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` else continue fi grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue # Extract the definition of DEP_FILES from the Makefile without # running `make'. DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"` test -z "$DEPDIR" && continue # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n -e '/^U = / s///p' < "$mf"` test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR" # We invoke sed twice because it is the simplest approach to # changing $(DEPDIR) to its actual value in the expansion. for file in `sed -n -e ' /^DEP_FILES = .*\\\\$/ { s/^DEP_FILES = // :loop s/\\\\$// p n /\\\\$/ b loop p } /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`(dirname "$file") 2>/dev/null || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p $dirpart/$fdir else as_dir=$dirpart/$fdir as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} { (exit 1); exit 1; }; }; } # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ;; esac done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi echo " " if test "$enable_gtk2" = "yes" ; then echo "$as_me:$LINENO: result: GTK2 enabled." >&5 echo "${ECHO_T} GTK2 enabled." >&6 else echo "$as_me:$LINENO: result: GTK2 disabled." >&5 echo "${ECHO_T} GTK2 disabled." >&6 fi if test "$enable_sdl" = "yes" ; then echo "$as_me:$LINENO: result: SDL enabled." >&5 echo "${ECHO_T} SDL enabled." >&6 else echo "$as_me:$LINENO: result: SDL disabled." >&5 echo "${ECHO_T} SDL disabled." >&6 fi if test "$enable_gnome" = "yes" ; then echo "$as_me:$LINENO: result: GNOME enabled." >&5 echo "${ECHO_T} GNOME enabled." >&6 else echo "$as_me:$LINENO: result: GNOME disabled." >&5 echo "${ECHO_T} GNOME disabled." >&6 fi gtkboard/configure.in000066400000000000000000000046041153150217100151640ustar00rootroot00000000000000 AC_INIT(src/) AC_CANONICAL_HOST AC_CANONICAL_TARGET AM_CONFIG_HEADER(config.h) AM_INIT_AUTOMAKE(gtkboard,0.11pre0) AC_PROG_CC AC_ARG_ENABLE(gtk2, [ --disable-gtk2 Don't look for GTK2 libraries], enable_gtk2=$enableval, enable_gtk2="yes") found_gtk2=0; if test "$enable_gtk2" = "yes" ; then dnl check if user has gtk2 PKG_CHECK_MODULES(GTK, gtk+-2.0 >= 2.0.0, found_gtk2=1, found_gtk2=0) fi if test $found_gtk2 = 0; then AM_PATH_GTK(1.2.3, , AC_MSG_ERROR(gtkboard needs GTK 1.2.3 or higher)) fi AC_ARG_ENABLE(sdl, [ --disable-sdl Don't look for the SDL library], enable_sdl=$enableval, enable_sdl="yes") if test "$enable_sdl" = "yes" ; then dnl Check for SDL # SDL_VERSION=1.2.0 # AM_PATH_SDL($SDL_VERSION, # AC_DEFINE([HAVE_SDL], [], [Do we have the SDL library]), # AC_MSG_WARN([*** SDL version $SDL_VERSION not found. Sound will be disabled]) # ) AC_CHECK_LIB( SDL_mixer, Mix_OpenAudio, have_SDL_mixer=yes, have_SDL_mixer=no) if test "$have_SDL_mixer" = "yes" ; then # CFLAGS="$CFLAGS -DHAVE_SDL" AC_DEFINE([HAVE_SDL], [], [Do we have the SDL library]) LIBS="$LIBS -lSDL_mixer" else echo "*** SDL_mixer not found. Configuring without audio support." fi # CFLAGS="$CFLAGS $SDL_CFLAGS" # LIBS="$LIBS $SDL_LIBS -lSDL_mixer" fi gnome=false GNOME_CFLAGS="" GNOME_LIBS="" AC_ARG_ENABLE(gnome,[ --enable-gnome Turn on gnome ],[ if test "x$enableval" = "xyes"; then gnome=true fi ]) if test "$gnome" = true ; then PKG_CHECK_MODULES(GNOME, [ libgnome-2.0 >= 2.0.0 libgnomeui-2.0 >= 2.0.0 ]) GNOME_CFLAGS="$GNOME_CFLAGS -DHAVE_GNOME=1" fi AC_SUBST(GNOME_CFLAGS) AC_SUBST(GNOME_LIBS) AM_CONDITIONAL(WITH_GNOME, test "x$gnome" = "xtrue") dnl Checks for header files. AC_HEADER_STDC AC_CHECK_HEADERS(unistd.h) dnl Checks for typedefs, structures, and compiler characteristics. AC_C_CONST dnl Checks for library functions. AC_TYPE_SIGNAL AC_CHECK_FUNCS(mkdir strtol) AC_OUTPUT([ Makefile doc/Makefile src/Makefile sounds/Makefile pixmaps/Makefile ]) echo " " if test "$enable_gtk2" = "yes" ; then AC_MSG_RESULT([ GTK2 enabled.]) else AC_MSG_RESULT([ GTK2 disabled.]) fi if test "$enable_sdl" = "yes" ; then AC_MSG_RESULT([ SDL enabled.]) else AC_MSG_RESULT([ SDL disabled.]) fi if test "$enable_gnome" = "yes" ; then AC_MSG_RESULT([ GNOME enabled.]) else AC_MSG_RESULT([ GNOME disabled.]) fi gtkboard/depcomp000077500000000000000000000275331153150217100142360ustar00rootroot00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects # Copyright 1999, 2000 Free Software Foundation, Inc. # 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, 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. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # `libtool' can also be set to `yes' or `no'. if test -z "$depfile"; then base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'` dir=`echo "$object" | sed 's,/.*$,/,'` if test "$dir" = "$object"; then dir= fi # FIXME: should be _deps on DOS. depfile="$dir.deps/$base" fi tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> $depfile echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> $depfile else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. This file always lives in the current directory. # Also, the AIX compiler puts `$object:' at the start of each line; # $object doesn't have directory information. stripped=`echo "$object" | sed -e 's,^.*/,,' -e 's/\(.*\)\..*$/\1/'` tmpdepfile="$stripped.u" outname="$stripped.o" if test "$libtool" = yes; then "$@" -Wc,-M else "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi if test -f "$tmpdepfile"; then # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1="$dir.libs/$base.lo.d" tmpdepfile2="$dir.libs/$base.d" "$@" -Wc,-MD else tmpdepfile1="$dir$base.o.d" tmpdepfile2="$dir$base.d" "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi if test -f "$tmpdepfile1"; then tmpdepfile="$tmpdepfile1" else tmpdepfile="$tmpdepfile2" fi if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a space and a tab in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the proprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. We will use -o /dev/null later, # however we can't do the remplacement now because # `-o $object' might simply not be used IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M "$@" -o /dev/null $dashmflag | sed 's:^[^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # X makedepend shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes ;; esac case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; -*) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix="`echo $object | sed 's/^.*\././'`" touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the proprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the proprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. "$@" || exit $? IFS=" " for arg do case "$arg" in "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 gtkboard/doc/000077500000000000000000000000001153150217100134145ustar00rootroot00000000000000gtkboard/doc/Makefile.am000066400000000000000000000001371153150217100154510ustar00rootroot00000000000000EXTRA_DIST = index.html devel/ doxygen/doxygen_config doxygen/header.html doxygen/footer.html gtkboard/doc/Makefile.in000066400000000000000000000125431153150217100154660ustar00rootroot00000000000000# Makefile.in generated by automake 1.6.3 from Makefile.am. # @configure_input@ # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 # Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_HEADER = $(INSTALL_DATA) transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_alias = @host_alias@ host_triplet = @host@ EXEEXT = @EXEEXT@ OBJEXT = @OBJEXT@ PATH_SEPARATOR = @PATH_SEPARATOR@ AMTAR = @AMTAR@ AWK = @AWK@ CC = @CC@ DEPDIR = @DEPDIR@ GNOME_CFLAGS = @GNOME_CFLAGS@ GNOME_LIBS = @GNOME_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ PACKAGE = @PACKAGE@ PKG_CONFIG = @PKG_CONFIG@ STRIP = @STRIP@ VERSION = @VERSION@ am__include = @am__include@ am__quote = @am__quote@ install_sh = @install_sh@ EXTRA_DIST = index.html devel/ doxygen/doxygen_config doxygen/header.html doxygen/footer.html subdir = doc mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = DIST_SOURCES = DIST_COMMON = Makefile.am Makefile.in all: all-am .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) uninstall-info-am: tags: TAGS TAGS: DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) top_distdir = .. distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) distdir: $(DISTFILES) $(mkinstalldirs) $(distdir)/doxygen @list='$(DISTFILES)'; for file in $$list; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkinstalldirs) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: info: info-am info-am: install-data-am: install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic uninstall-am: uninstall-info-am .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am info info-am install \ install-am install-data install-data-am install-exec \ install-exec-am install-info install-info-am install-man \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic uninstall uninstall-am uninstall-info-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gtkboard/doc/devel/000077500000000000000000000000001153150217100145135ustar00rootroot00000000000000gtkboard/doc/devel/index.html000066400000000000000000000371211153150217100165140ustar00rootroot00000000000000 Gtkboard developer documentation

Gtkboard developer documentation

This is the developer documentation for gtkboard version 0.10.0. The end-user documentation is here.

[ Home
|
Download
|
Screenshots
|
Documentation
|
Hacking
|
Project page
|
Contact ]

Gtkboard philosophy

No duplication. The raison d'etre of gtkboard is to reduce the duplication of effort involved in writing hundreds of board games. Therefore, anything that is common between two or more board games must be implemented by gtkboard and available to all games.

Allow games to be created incrementally. Just because a feature exists, a game shouldn't be forced to do something about it. Thus, when writing a new game you can concentrate on exactly what you need and ignore the rest. For instance, you can make a new game compile and display the board without writing any code, just specifying the dimensions, colors and images for the pieces. (Several common pixmaps are available for reuse.) Further, the user can already replay a game from a file -- the game doesn't need to implement anything.

Homogenize. If two games require a thing to be done in slightly different ways, see if both can be expressed as special cases of a more generic way, and the differences expressed in data rather than code. That way, if a new game required the thing to be done in a third way, it is more likely that it can be accomodated without modifying the existing code. This principle is related to the next one.

Generality is more important than efficiency. This is an application of the maxim that premature optimization is the root of all evil. For example, the AI of some games would probably become somwhat more efficient if the search strategy incorporated game specific information, and the evaluation function and the move generation function were tightly coupled. However, the extra complexity is judged to be not worth the gain in efficiency.

TIMTOWTDI. There is more than one way to do it. As far as possible, nothing will be forced on the games. Everything is a hook. The game can choose from among the defaults or provide its own. For example, three defaults are provided for ordering the highscores: decreasing order of score, increasing order of score and decreasing order of time. The game can use one of these or write its own.

Client-server model. This is the most important part. Gtkboard is currently implemented as a pair of processes, one for the ui and one for the number crunching, which communicate through a pair of pipes. This has several benefits:

  • Ui won't feel slow when the machine is thinking
  • Keeps the code clean
  • It is relatively easy to change the code to communicate through sockets and thus have network functionality.

TODO: complete this

Writing a new game

This is a simple step-by-step guide to get you started writing a new game.
  • Get the latest source from cvs using the command:
    $ cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/gtkboard co gtkboard
    Getting the latest source release from the file releases page is usually OK.
  • Think about what game you want to implement and decide basic things like will it be a single or a two player game, the dimensions and colors of the board, etc.
  • Read the game.h documentation. This is very important. All the details might need to know are in that file. You need to create a Game struct for your game before you can compile your game.
    • In the "src/" directory of the source, create a new file "yourgame.c".
    • In "yourgame.c" you should #include game.h and define a Game yourgame.
    • Edit the file "ui.c" and add your game to the list of games (the Game *games[] array).
  • You are now ready to compile your game! In the root directory of the source invoke automake and then make.
  • Now run gtkboard. Your game should appear in the "Game->Select game" menu. When you choose it you will see the initial board position that you specified. However, you can not do anything yet. If you try to make a move a dialog will pop up saying "Not yet implemented."
  • Your next job is to write a function that will take user input and return a move. Moves are represented in a standard format for all games. See the move.h documentation for a description of this format. You should also see the source of some other game to get a feel for the code. The function you will need to implement is game_getmove(). After writing the function remember to add a function pointer to this function in your game_init() function.
  • If your game is a single player game you are nearly done. The user will be able to play your game, the only thing missing is that there is no notification of when the game is over. Skip the next step. In two player games, at this stage two humans can play the game against each other but not human vs. machine. Read the next step.
  • (Only for two player games.) You need to implement two functions, game_movegen() and game_eval(). The first function generates a list of legal moves in a given position and the second associates a "goodness" value to a given position. This is used by the AI in deciding which move to make, in conjuction with the alpha-beta search strategy and transposition tables. Writing these functions (movegen and eval) is probably the most time consuming part.
  • Next you have to write a function to determine whether the game is over. This function has the dual role of showing the "score", for most single player games and some two player games too. This function is game_who_won(). Again see the game.h documentation for details.
  • Congrats! Now you've got a fully working game, with features like highscores (for single player games), ability to go back and forward, saving and loading the game etc. There are several frills that you could add to your game, such as animations.
  • When you feel your game is complete mail me a copy of "yourgame.c".

How you can help

Here's a list of ways you can help gtkboard:
  • Write code for gtkboard. Good at AI, search trees and the like? You could work on the back end. Like doing UI stuff? There's a lot of front end work left to do, too.
  • Write a new game. You've always wanted to write a game, didn't you? You don't get a better opportunity than this! The mundane part is already taken care of, you just have to worry about the rules and strategy of the game you want to implement.
  • Describe a game: If the rules and strategy (i.e, evaluation function) of a game are described precisely, it usually takes only an hour to code it up :) Therefore if there's a game you're good at that's not been implemented, please please consider visiting the forum and describing the game.
  • Write documentation. End-user documentation, that is. The rules haven't been documented for several games yet. If you are good at some game, please consider writing a strategy document for the game.
  • Create artwork. We badly need a logo, a splash screen, some icons etc. Apart from that, many games currently have simple colored balls as their pieces. While this helps rapid development, it doesn't hurt to have some eye candy!
  • Be a tester. The hard part of fixing a bug is finding it. We could use your help!
  • Contribute builds: Even though gtkboard should build without problems on any Unix with gtk+-1.2 or greater, not all users would be willing to compile from source. So if there's no build available for your platform, and you have compiled gtkboard, please contribute a build. Thanks.

Coding style

You are requested to follow these guidelines if you intend to contribute to gtkboard.
  • Spaces and tabs. This being the subject of eternal flamewars, the project maintainer is usually allowed to make their decision binding on everybody, so I will take that liberty :) Your code should use only tabs for indenting, not spaces. Further, your code should look right whatever be the tabstop setting (I use 4; 3 and 8 are also common.) Therefore, no end-of-line comments. (See the section on comments.) Also
    int foo;
    float bar;
    ^
    // NO tab here
  • Don't make your lines too long. 80 chars is not a rigid limit, because after all not many people are going to be looking at the code on 80 character terminals, I mean, its gtkboard, so a little over 80 chars is probably OK, but still don't make your lines too long.
  • Minimize comments. Another subject of heated controversy. Comments are good, because they let other people understand your code. Comments are bad, because they are a maintenance nightmare. Over time, comment rot happens: your code was updated but the comment wasn't, so it serves to confuse rather than to enlighten. In my experience, the best way out is to write self-documenting code augmented by sparse comments. Therefore the rules are:
    • Use clear variable (esp. global) and function names that describes what it is. A function name should typically be module_verb_noun().
    • Describe what a function does rather than how it does it.
    • Documenting module interfaces is more important than documenting modules.
    • Use doxygen for documentation. (No learning curve here; `//!' for single line comments, and `/** ... */' for multi-line comments is all you need to know.)
    • Comments inside a function should be limited, as far as possible, to: FIXMEs, TODOs, indication of ugly hacks and misc gotchas.
Well that's it I guess. And also keep in mind the general words of C wisdom, like remember to free() everything, use snprintf rather than sprintf, use lots of assert()s and that sort of thing. So far the code's been rather clean, I've never had a gdb session longer than a couple of minutes, let's keep it that way :)

Gtkboard features

Features currently provided by gtkboard

  • Common user interface
  • AI using alpha beta search and transposition tables
  • Common representation of board position and moves of all board games
  • Highscores
  • Human vs. human, human vs. machine, machine vs. machine modes
  • Animations
  • Move back and forward
  • Pause and unpause games
  • Common interface to game documentation
  • Tournament mode: create a computer game tournament among several evaluation functions!

Features coming real soon now

  • Games available as dynamically loadable plugins
  • Common board game format (cbgf): this format is still being decided. Once this is finalized all games will be able to save and load their games in a common format.
  • Drag and drop support
  • Genetic algorithm for evolving an evaluation function
  • pgn2cbgf: convert a chess game (Portable Game Notation) into a cbgf game.
  • Network support: this one's a killer :) Hopefully we'll be able to do something like FICS (Free Internet Chess Server).

Roadmap

The current priority is to get a stable 1.0 release out.

The main things that have to be done before this are:

  • Plugin support (i.e, implement games as plugins)
  • Standardize and implement the cbgf format
  • Implement several more games, so that this will reveal missing features of the game.h API.

The last is very important, because at 1.0 we will freeze the game API. Until then it will be fluid. We hope that a huge number of games will be written for the 1.0 release, and also that some major distros will include gtkboard 1.0 :) Therefore the API should be complete enough that almost anything that can be called a board game should be implementable in gtkboard.

Post 1.0, our focus will shift to two things:

  • Network support. This will involve a lot of time and planning
  • Alternate implementations -- Possibilities are a java client, and a stripped down javascript client so that users can view a database of games through their browser.

Of course all this is kinda the best case scenario since gtkboard is entirely a spare time/hobby project.


Valid HTML 4.01! Created with vim SourceForge.net Logo
gtkboard/doc/doxygen/000077500000000000000000000000001153150217100150715ustar00rootroot00000000000000gtkboard/doc/doxygen/doxygen_config000066400000000000000000000134271153150217100200250ustar00rootroot00000000000000# Doxygen configuration generated by Doxywizard version 0.1 #--------------------------------------------------------------------------- # General configuration options #--------------------------------------------------------------------------- PROJECT_NAME = gtkboard PROJECT_NUMBER = 0.10.7 OUTPUT_DIRECTORY = . OUTPUT_LANGUAGE = English EXTRACT_ALL = YES EXTRACT_PRIVATE = NO EXTRACT_STATIC = YES HIDE_UNDOC_MEMBERS = NO HIDE_UNDOC_CLASSES = NO BRIEF_MEMBER_DESC = YES REPEAT_BRIEF = YES ALWAYS_DETAILED_SEC = NO FULL_PATH_NAMES = NO STRIP_FROM_PATH = INTERNAL_DOCS = NO CLASS_DIAGRAMS = YES SOURCE_BROWSER = YES INLINE_SOURCES = NO STRIP_CODE_COMMENTS = YES CASE_SENSE_NAMES = YES HIDE_SCOPE_NAMES = NO VERBATIM_HEADERS = YES SHOW_INCLUDE_FILES = YES JAVADOC_AUTOBRIEF = NO INHERIT_DOCS = YES INLINE_INFO = YES SORT_MEMBER_DOCS = YES DISTRIBUTE_GROUP_DOC = NO TAB_SIZE = 8 ENABLED_SECTIONS = GENERATE_TODOLIST = YES GENERATE_TESTLIST = YES GENERATE_BUGLIST = YES ALIASES = MAX_INITIALIZER_LINES = 30 OPTIMIZE_OUTPUT_FOR_C = YES SHOW_USED_FILES = YES #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- QUIET = NO WARNINGS = YES WARN_IF_UNDOCUMENTED = YES WARN_FORMAT = "$file:$line: $text" WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- INPUT = ../.. FILE_PATTERNS = *.c \ *.h RECURSIVE = YES EXCLUDE = EXCLUDE_PATTERNS = EXAMPLE_PATH = EXAMPLE_PATTERNS = IMAGE_PATH = INPUT_FILTER = FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- ALPHABETICAL_INDEX = NO COLS_IN_ALPHA_INDEX = 5 IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- GENERATE_HTML = YES HTML_OUTPUT = . HTML_HEADER = header.html HTML_FOOTER = footer.html HTML_STYLESHEET = HTML_ALIGN_MEMBERS = YES GENERATE_HTMLHELP = NO GENERATE_CHI = NO BINARY_TOC = NO TOC_EXPAND = NO DISABLE_INDEX = NO ENUM_VALUES_PER_LINE = 4 GENERATE_TREEVIEW = YES TREEVIEW_WIDTH = 250 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- GENERATE_LATEX = NO LATEX_OUTPUT = latex COMPACT_LATEX = NO PAPER_TYPE = a4wide EXTRA_PACKAGES = LATEX_HEADER = PDF_HYPERLINKS = NO USE_PDFLATEX = NO LATEX_BATCHMODE = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- GENERATE_RTF = NO RTF_OUTPUT = rtf COMPACT_RTF = NO RTF_HYPERLINKS = NO RTF_STYLESHEET_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- GENERATE_MAN = NO MAN_OUTPUT = man MAN_EXTENSION = .3 #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- ENABLE_PREPROCESSING = YES MACRO_EXPANSION = NO EXPAND_ONLY_PREDEF = NO SEARCH_INCLUDES = YES INCLUDE_PATH = INCLUDE_FILE_PATTERNS = PREDEFINED = EXPAND_AS_DEFINED = #--------------------------------------------------------------------------- # Configuration::addtions related to external references #--------------------------------------------------------------------------- TAGFILES = GENERATE_TAGFILE = YES ALLEXTERNALS = NO PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- HAVE_DOT = NO CLASS_GRAPH = YES COLLABORATION_GRAPH = YES INCLUDE_GRAPH = YES INCLUDED_BY_GRAPH = YES GRAPHICAL_HIERARCHY = YES DOT_PATH = MAX_DOT_GRAPH_WIDTH = 1024 MAX_DOT_GRAPH_HEIGHT = 1024 GENERATE_LEGEND = YES DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::addtions related to the search engine #--------------------------------------------------------------------------- SEARCHENGINE = NO CGI_NAME = search.cgi CGI_URL = DOC_URL = DOC_ABSPATH = BIN_ABSPATH = /usr/local/bin/ EXT_DOC_PATHS = gtkboard/doc/doxygen/footer.html000066400000000000000000000000171153150217100172530ustar00rootroot00000000000000 gtkboard/doc/doxygen/header.html000066400000000000000000000002151153150217100172050ustar00rootroot00000000000000

This is the doxygen documentation for gtkboard.

. gtkboard/doc/header.html000066400000000000000000000010761153150217100155360ustar00rootroot00000000000000

[ Home | Download | Screenshots | Documentation | Hacking | Project page | Contact ]
gtkboard/doc/index.html000066400000000000000000000131511153150217100154120ustar00rootroot00000000000000 Gtkboard documentation

Gtkboard documentation

This is the end user documentation for gtkboard version 0.11. If you are interested in hacking gtkboard or writing a new game for gtkboard you can also read the developer documentation.

Please note that a stable version of gtkboard has not been released yet. 0.11 is a developer release and hence this documentation is necessarily incomplete.

[ Home | Download | Screenshots | Documentation | Hacking | Project page | Contact ]

Installation

You can download the source tarball or the source or binary (i386) rpm from the download page. To install from the sources, do the usual
$ gzip -cd gtkboard-x.y.z.tar.gz | tar xvf -
$ cd gtkboard-x.y.z
$ ./configure
$ make
$ make install
For make install to work you must be root.

To install from rpm do
$ rpm -ivh gtkboard-x.y.z-v.i386.rpm

Requirements

gtk+ version 1.2 or higher is required. However, there are a few features that will work only if gtk+ version 2.0 or higher is available.

Getting started

Gtkboard aims to provide a common platform for all board games. What this means for the user is that all games will have a common interface. The first thing you do on starting gtkboard is to select a game from the "Game->Select Game" menu. Currently over 30 games are implemented. Some are single player and some are two player games. You can find out about the game from the Help menu.

The menubar

The Game menu

From the Game menu you can select a game, reset the current game ("Game->New game"), or pause/restart the game. "Game->Highscores" displays the highscores (only for single player games) and "Game->Zap Highscores" clears it.

The File menu

Gtkboard can save your game to a file and replay it. All games are stored in a common format, called cbgf (common board game format). This is currently not fully implemented.

The move menu

You can go back and forward to any point in the current game, in other words you have infinite levels of undo and redo.

The settings menu

In two player games you can play with another person, or with the computer, or let the computer play with itself.

Flipping the board rotates it by 180°

You can also set the average time taken by the computer to move.

The game bar

Below the menu bar is the game bar (or whatever you want to call it). It is divided into 7 parts. (Not all are shown at the same time) The first shows the name of the game. The second displays "H/H", "H/M" etc indicating human vs. human, human vs. machine etc. The third shows whose turn it is, white or black (the last 2 are only for two player games). The player who moves first is always denoted by white. The fourth shows the score. The fifth is supposed to show the current move but is not yet implemented. The sixth shows the time spent so far (only for single player games). The last is a status indicator. This is available only in the gtk2 version. The color denotes as follows:
  • Dark green: it's your turn to move and your clock is running.
  • Light green: it's your turn and your clock is not running (e.g, you paused the game or the displayed position is not the current position).
  • Dark red: it's the computer's turn to move and it's thinking.
  • Light red: it's the computer's turn but it's not thinking right now.
  • Dark blue: In two player games with both players human, it's the second player's turn to move and their clock is running
  • Light blue: In two player games with... well you get the idea.
  • Grey: No game is selected, or the game is a saved game being replayed.

Command line options

There are a few command line options. You should know about them because there are certain things (like setting the time per move) that can currently be done only through command line options and not through the GUI. The output of gtkboard -h is shown below:
Usage: gtkboard 	[-qvh] [-g game] [-f file] [-l logfile] [-d msec]
			[-p XX] [-w wheur -b bheur] 
	-g	name of the game
	-f	file to load game from
	-l	log file to record game
	-q	don't show board
	-d	delay in milliseconds
	-p	human or machine players. Each X must be 'h' or 'm'
	-w	name of heuristic function for white
	-b	name of heuristic function for black
	-v	be verbose
	-h	print this help

gtkboard/gtkboard.spec000066400000000000000000000010341153150217100153160ustar00rootroot00000000000000%define name gtkboard %define ver 0.11pre0 %define rel 1 Summary: Board games suite Name: %name Version: %ver Release: %rel Copyright: GPL Group: Games URL: http://gtkboard.sourceforge.net/ Source: %{name}-%{version}.tar.gz BuildRoot: /tmp/%{name}-root Prefix: /usr/local Docdir: /usr/local/doc %description gtkboard is a board games architecture and implementation. %prep %setup -q %build %configure make %install %makeinstall %clean rm -rf $RPM_BUILD_ROOT %files /usr/local/bin/gtkboard %doc COPYING README AUTHORS ChangeLog doc/ gtkboard/install-sh000077500000000000000000000127361153150217100146640ustar00rootroot00000000000000#!/bin/sh # # install - install a program, script, or datafile # This comes from X11R5 (mit/util/scripts/install.sh). # # Copyright 1991 by the Massachusetts Institute of Technology # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of M.I.T. not be used in advertising or # publicity pertaining to distribution of the software without specific, # written prior permission. M.I.T. makes no representations about the # suitability of this software for any purpose. It is provided "as is" # without express or implied warranty. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" transformbasename="" transform_arg="" instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" dir_arg="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; *) if [ x"$src" = x ] then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 else true fi if [ x"$dir_arg" != x ]; then dst=$src src="" if [ -d $dst ]; then instcmd=: chmodcmd="" else instcmd=mkdir fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ -f $src -o -d $src ] then true else echo "install: $src does not exist" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 else true fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` else true fi fi ## this sed command emulates the dirname command dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-${defaultIFS}}" oIFS="${IFS}" # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` IFS="${oIFS}" pathcomp='' while [ $# -ne 0 ] ; do pathcomp="${pathcomp}${1}" shift if [ ! -d "${pathcomp}" ] ; then $mkdirprog "${pathcomp}" else true fi pathcomp="${pathcomp}/" done fi if [ x"$dir_arg" != x ] then $doit $instcmd $dst && if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi else # If we're going to rename the final executable, determine the name now. if [ x"$transformarg" = x ] then dstfile=`basename $dst` else dstfile=`basename $dst $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename if [ x"$dstfile" = x ] then dstfile=`basename $dst` else true fi # Make a temp file name in the proper directory. dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp && trap "rm -f ${dsttmp}" 0 && # and set any options; do chmod last to preserve setuid bits # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && # Now rename the file to the real destination. $doit $rmcmd -f $dstdir/$dstfile && $doit $mvcmd $dsttmp $dstdir/$dstfile fi && exit 0 gtkboard/missing000077500000000000000000000240361153150217100142530ustar00rootroot00000000000000#! /bin/sh # Common stub for a few missing GNU programs while installing. # Copyright (C) 1996, 1997, 1999, 2000, 2002 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # 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, 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. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi case "$1" in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case "$1" in -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch]" ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing 0.4 - GNU automake" ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; aclocal*) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is needed, and you do not seem to have it handy on your system. You might have modified some files without having the proper tools for further handling them. You can get \`$1Help2man' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` fi if [ -f "$file" ]; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then # We have makeinfo, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` fi touch $file ;; tar) shift if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 fi # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case "$firstarg" in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case "$firstarg" in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and you do not seem to have it handy on your system. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequirements for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 gtkboard/mkinstalldirs000077500000000000000000000012371153150217100154600ustar00rootroot00000000000000#! /bin/sh # mkinstalldirs --- make directory hierarchy # Author: Noah Friedman # Created: 1993-05-16 # Public domain # $Id$ errstatus=0 for file do set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` shift pathcomp= for d do pathcomp="$pathcomp$d" case "$pathcomp" in -* ) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr fi fi pathcomp="$pathcomp/" done done exit $errstatus # mkinstalldirs ends here gtkboard/pixmaps/000077500000000000000000000000001153150217100143305ustar00rootroot00000000000000gtkboard/pixmaps/Makefile.am000066400000000000000000000004371153150217100163700ustar00rootroot00000000000000 gtkboard_PIXMAPS = gtkboard.png noinst_HEADERS = alpha.xpm arrows.xpm ball.xpm chess.xpm cpento.xpm logo48.xpm memory.xpm misc.xpm ninemm_bg.xpm pacman.xpm splash.xpm EXTRA_DIST = $(gtkboard_PIXMAPS) gtkboardpixmapsdir = $(datadir)/pixmaps gtkboardpixmaps_DATA = $(gtkboard_PIXMAPS) gtkboard/pixmaps/Makefile.in000066400000000000000000000170231153150217100164000ustar00rootroot00000000000000# Makefile.in generated by automake 1.6.3 from Makefile.am. # @configure_input@ # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 # Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_HEADER = $(INSTALL_DATA) transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_alias = @host_alias@ host_triplet = @host@ EXEEXT = @EXEEXT@ OBJEXT = @OBJEXT@ PATH_SEPARATOR = @PATH_SEPARATOR@ AMTAR = @AMTAR@ AWK = @AWK@ CC = @CC@ DEPDIR = @DEPDIR@ GNOME_CFLAGS = @GNOME_CFLAGS@ GNOME_LIBS = @GNOME_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ PACKAGE = @PACKAGE@ PKG_CONFIG = @PKG_CONFIG@ STRIP = @STRIP@ VERSION = @VERSION@ am__include = @am__include@ am__quote = @am__quote@ install_sh = @install_sh@ gtkboard_PIXMAPS = gtkboard.png noinst_HEADERS = alpha.xpm arrows.xpm ball.xpm chess.xpm cpento.xpm logo48.xpm memory.xpm misc.xpm ninemm_bg.xpm pacman.xpm splash.xpm EXTRA_DIST = $(gtkboard_PIXMAPS) gtkboardpixmapsdir = $(datadir)/pixmaps gtkboardpixmaps_DATA = $(gtkboard_PIXMAPS) subdir = pixmaps mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = DIST_SOURCES = DATA = $(gtkboardpixmaps_DATA) HEADERS = $(noinst_HEADERS) DIST_COMMON = $(noinst_HEADERS) Makefile.am Makefile.in all: all-am .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && \ $(AUTOMAKE) --gnu pixmaps/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) uninstall-info-am: gtkboardpixmapsDATA_INSTALL = $(INSTALL_DATA) install-gtkboardpixmapsDATA: $(gtkboardpixmaps_DATA) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(gtkboardpixmapsdir) @list='$(gtkboardpixmaps_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " $(gtkboardpixmapsDATA_INSTALL) $$d$$p $(DESTDIR)$(gtkboardpixmapsdir)/$$f"; \ $(gtkboardpixmapsDATA_INSTALL) $$d$$p $(DESTDIR)$(gtkboardpixmapsdir)/$$f; \ done uninstall-gtkboardpixmapsDATA: @$(NORMAL_UNINSTALL) @list='$(gtkboardpixmaps_DATA)'; for p in $$list; do \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " rm -f $(DESTDIR)$(gtkboardpixmapsdir)/$$f"; \ rm -f $(DESTDIR)$(gtkboardpixmapsdir)/$$f; \ done ETAGS = etags ETAGSFLAGS = tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$tags$$unique" \ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) top_distdir = .. distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) distdir: $(DISTFILES) @list='$(DISTFILES)'; for file in $$list; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkinstalldirs) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) $(HEADERS) installdirs: $(mkinstalldirs) $(DESTDIR)$(gtkboardpixmapsdir) install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: info: info-am info-am: install-data-am: install-gtkboardpixmapsDATA install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic uninstall-am: uninstall-gtkboardpixmapsDATA uninstall-info-am .PHONY: GTAGS all all-am check check-am clean clean-generic distclean \ distclean-generic distclean-tags distdir dvi dvi-am info \ info-am install install-am install-data install-data-am \ install-exec install-exec-am install-gtkboardpixmapsDATA \ install-info install-info-am install-man install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic tags \ uninstall uninstall-am uninstall-gtkboardpixmapsDATA \ uninstall-info-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gtkboard/pixmaps/alpha.xpm000066400000000000000000001305561153150217100161550ustar00rootroot00000000000000/*XPM*/ static char *char_A_grey_36_36_xpm[] = { "36 36 16 1", "0 c #000000", "1 c #0E0E0E", "2 c #1C1C1C", "3 c #2B2B2B", "4 c #393939", "5 c #474747", "6 c #565656", "7 c #646464", "8 c #727272", "9 c #818181", "A c #8F8F8F", "B c #9D9D9D", "C c #ACACAC", "D c #BABABA", "E c #C8C8C8", "F c #D7D7D7", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF727FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF303FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFB101BFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFF70207FFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFF40404FFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFC20702CFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFF801C108FFFFFFFFFFFFFF", "FFFFFFFFFFFFFFF503F305FFFFFFFFFFFFFF", "FFFFFFFFFFFFFFE206F602EFFFFFFFFFFFFF", "FFFFFFFFFFFFFFA11AFA11AFFFFFFFFFFFFF", "FFFFFFFFFFFFFF603FFF306FFFFFFFFFFFFF", "FFFFFFFFFFFFFF305FFF503FFFFFFFFFFFFF", "FFFFFFFFFFFFFB109FFF901BFFFFFFFFFFFF", "FFFFFFFFFFFFF702DFFFD207FFFFFFFFFFFF", "FFFFFFFFFFFFF404FFFFF404FFFFFFFFFFFF", "FFFFFFFFFFFFC207FFFFF702CFFFFFFFFFFF", "FFFFFFFFFFFF801CFFFFFC108FFFFFFFFFFF", "FFFFFFFFFFFF503FFFFFFF305FFFFFFFFFFF", "FFFFFFFFFFFE206FFFFFFF602EFFFFFFFFFF", "FFFFFFFFFFFA11AFFFFFFFA11AFFFFFFFFFF", "FFFFFFFFFFF602222222222206FFFFFFFFFF", "FFFFFFFFFFF300000000000003FFFFFFFFFF", "FFFFFFFFFFB107777777777701BFFFFFFFFF", "FFFFFFFFFF702DFFFFFFFFFD207FFFFFFFFF", "FFFFFFFFFF404FFFFFFFFFFF404FFFFFFFFF", "FFFFFFFFFC207FFFFFFFFFFF702CFFFFFFFF", "FFFFFFFFF801CFFFFFFFFFFFC108FFFFFFFF", "FFFFFFFFF503FFFFFFFFFFFFF305FFFFFFFF", "FFFFFFFFE206FFFFFFFFFFFFF602EFFFFFFF", "FFFFFFFFA11AFFFFFFFFFFFFFA11AFFFFFFF", "FFFFFFFFB23FFFFFFFFFFFFFFF32BFFFFFFF", "FFFFFFFFFDEFFFFFFFFFFFFFFFEDFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", }; /*XPM*/ static char *char_B_grey_36_36_xpm[] = { "36 36 16 1", "0 c #000000", "1 c #0E0E0E", "2 c #1C1C1C", "3 c #2B2B2B", "4 c #393939", "5 c #474747", "6 c #565656", "7 c #646464", "8 c #727272", "9 c #818181", "A c #8F8F8F", "B c #9D9D9D", "C c #ACACAC", "D c #BABABA", "E c #C8C8C8", "F c #D7D7D7", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFDCCCCCCCCCDFFFFFFFFFFFFFFFF", "FFFFFFFFB2111111111236BFFFFFFFFFFFFF", "FFFFFFFF9000000000000027FFFFFFFFFFFF", "FFFFFFFF90299999999852006FFFFFFFFFFF", "FFFFFFFF902DFFFFFFFFFC4018FFFFFFFFFF", "FFFFFFFF902DFFFFFFFFFFE402EFFFFFFFFF", "FFFFFFFF902DFFFFFFFFFFFA109FFFFFFFFF", "FFFFFFFF902DFFFFFFFFFFFF306FFFFFFFFF", "FFFFFFFF902DFFFFFFFFFFFF405FFFFFFFFF", "FFFFFFFF902DFFFFFFFFFFFF306FFFFFFFFF", "FFFFFFFF902DFFFFFFFFFFF9109FFFFFFFFF", "FFFFFFFF902DFFFFFFFFFFD303FFFFFFFFFF", "FFFFFFFF902DFFFFFFFFFA4018FFFFFFFFFF", "FFFFFFFF90288888888741017FFFFFFFFFFF", "FFFFFFFF9000000000000028FFFFFFFFFFFF", "FFFFFFFF90222222222210027FFFFFFFFFFF", "FFFFFFFF902DEEEEEEEDA62005FFFFFFFFFF", "FFFFFFFF902DFFFFFFFFFFC5006FFFFFFFFF", "FFFFFFFF902DFFFFFFFFFFFF501AFFFFFFFF", "FFFFFFFF902DFFFFFFFFFFFFD205FFFFFFFF", "FFFFFFFF902DFFFFFFFFFFFFF702DFFFFFFF", "FFFFFFFF902DFFFFFFFFFFFFFB11AFFFFFFF", "FFFFFFFF902DFFFFFFFFFFFFFD209FFFFFFF", "FFFFFFFF902DFFFFFFFFFFFFFC109FFFFFFF", "FFFFFFFF902DFFFFFFFFFFFFF901BFFFFFFF", "FFFFFFFF902DFFFFFFFFFFFFF503FFFFFFFF", "FFFFFFFF902DFFFFFFFFFFFFA106FFFFFFFF", "FFFFFFFF902DFFFFFFFFFFFB303DFFFFFFFF", "FFFFFFFF902DFFFFFFFFFF82019FFFFFFFFF", "FFFFFFFF902999999998630028FFFFFFFFFF", "FFFFFFFF9000000000000014AFFFFFFFFFFF", "FFFFFFFFB21111111112359FFFFFFFFFFFFF", "FFFFFFFFFDCCCCCCCCCDFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", }; /*XPM*/ static char *char_C_grey_36_36_xpm[] = { "36 36 16 1", "0 c #000000", "1 c #0E0E0E", "2 c #1C1C1C", "3 c #2B2B2B", "4 c #393939", "5 c #474747", "6 c #565656", "7 c #646464", "8 c #727272", "9 c #818181", "A c #8F8F8F", "B c #9D9D9D", "C c #ACACAC", "D c #BABABA", "E c #C8C8C8", "F c #D7D7D7", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFDCEFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFB6321237DFFFFFFFFFF", "FFFFFFFFFFFFFFFE61000000028FFFFFFFFF", "FFFFFFFFFFFFFFD4002689851018FFFFFFFF", "FFFFFFFFFFFFFE4015DFFFFFB429FFFFFFFF", "FFFFFFFFFFFFF5017FFFFFFFFFDFFFFFFFFF", "FFFFFFFFFFFF9106FFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFF303EFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFF9119FFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFF503FFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFD207FFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF901BFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF603FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF504FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF406FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF306FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF306FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF406FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF504FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF603FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF901BFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFD207FFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFF503FFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFF9119FFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFF303EFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFF9106FFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFF5017FFFFFFFFFAFFFFFFFFF", "FFFFFFFFFFFFFE4015DFFFFFB416FFFFFFFF", "FFFFFFFFFFFFFFD4002689851017FFFFFFFF", "FFFFFFFFFFFFFFFE61000000028FFFFFFFFF", "FFFFFFFFFFFFFFFFFB6321237DFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFDCEFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", }; /*XPM*/ static char *char_D_grey_36_36_xpm[] = { "36 36 16 1", "0 c #000000", "1 c #0E0E0E", "2 c #1C1C1C", "3 c #2B2B2B", "4 c #393939", "5 c #474747", "6 c #565656", "7 c #646464", "8 c #727272", "9 c #818181", "A c #8F8F8F", "B c #9D9D9D", "C c #ACACAC", "D c #BABABA", "E c #C8C8C8", "F c #D7D7D7", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFCCCCCCDFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF5111111135BFFFFFFFFFFFFFFF", "FFFFFFFFFF300000000027FFFFFFFFFFFFFF", "FFFFFFFFFF3079999962016FFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFC4018FFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFD402CFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFB205FFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFF601BFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFC206FFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFF503FFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFF901BFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFD208FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF306FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF504FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF603FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF603FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF603FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF603FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF504FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF306FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFD208FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFF901BFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFF503FFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFC206FFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFF601BFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFB205FFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFD402CFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFC4018FFFFFFFFFFFF", "FFFFFFFFFF3079999962016FFFFFFFFFFFFF", "FFFFFFFFFF300000000027FFFFFFFFFFFFFF", "FFFFFFFFFF5111111135BFFFFFFFFFFFFFFF", "FFFFFFFFFFFCCCCCCDFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", }; /*XPM*/ static char *char_E_grey_36_36_xpm[] = { "36 36 16 1", "0 c #000000", "1 c #0E0E0E", "2 c #1C1C1C", "3 c #2B2B2B", "4 c #393939", "5 c #474747", "6 c #565656", "7 c #646464", "8 c #727272", "9 c #818181", "A c #8F8F8F", "B c #9D9D9D", "C c #ACACAC", "D c #BABABA", "E c #C8C8C8", "F c #D7D7D7", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFCCCCCCCCCCCCCCCFFFFFFFFFF", "FFFFFFFFFF51111111111111115FFFFFFFFF", "FFFFFFFFFF30000000000000004FFFFFFFFF", "FFFFFFFFFF3079999999999999DFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF3055555555556FFFFFFFFFFFFF", "FFFFFFFFFF3000000000001AFFFFFFFFFFFF", "FFFFFFFFFF3055555555556FFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF3079999999999999DFFFFFFFFF", "FFFFFFFFFF30000000000000004FFFFFFFFF", "FFFFFFFFFF51111111111111115FFFFFFFFF", "FFFFFFFFFFFCCCCCCCCCCCCCCCFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", }; /*XPM*/ static char *char_F_grey_36_36_xpm[] = { "36 36 16 1", "0 c #000000", "1 c #0E0E0E", "2 c #1C1C1C", "3 c #2B2B2B", "4 c #393939", "5 c #474747", "6 c #565656", "7 c #646464", "8 c #727272", "9 c #818181", "A c #8F8F8F", "B c #9D9D9D", "C c #ACACAC", "D c #BABABA", "E c #C8C8C8", "F c #D7D7D7", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFCCCCCCCCCCCCCCCFFFFFFFFFF", "FFFFFFFFFF51111111111111115FFFFFFFFF", "FFFFFFFFFF30000000000000004FFFFFFFFF", "FFFFFFFFFF3079999999999999DFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF3055555555556FFFFFFFFFFFFF", "FFFFFFFFFF3000000000001AFFFFFFFFFFFF", "FFFFFFFFFF3055555555556FFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF529FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", }; /*XPM*/ static char *char_G_grey_36_36_xpm[] = { "36 36 16 1", "0 c #000000", "1 c #0E0E0E", "2 c #1C1C1C", "3 c #2B2B2B", "4 c #393939", "5 c #474747", "6 c #565656", "7 c #646464", "8 c #727272", "9 c #818181", "A c #8F8F8F", "B c #9D9D9D", "C c #ACACAC", "D c #BABABA", "E c #C8C8C8", "F c #D7D7D7", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFECDFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFF84212358EFFFFFFFFFFFF", "FFFFFFFFFFFFFC40000000038FFFFFFFFFFF", "FFFFFFFFFFFFC3004899641006FFFFFFFFFF", "FFFFFFFFFFFF4017FFFFFFA415FFFFFFFFFF", "FFFFFFFFFFF7017FFFFFFFFFBFFFFFFFFFFF", "FFFFFFFFFFC205FFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF602CFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFE205FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFF901AFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFF603FFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFF305FFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFE208FFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFB10AFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFA01CFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFF901DFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFF902DFFFFFFAAAAAAAAFFFFFFFFFF", "FFFFFFFF901DFFFFF5000000016FFFFFFFFF", "FFFFFFFFA01CFFFFF6111111105FFFFFFFFF", "FFFFFFFFB10AFFFFFFCCCCCC306FFFFFFFFF", "FFFFFFFFE208FFFFFFFFFFFF207FFFFFFFFF", "FFFFFFFFF305FFFFFFFFFFFD208FFFFFFFFF", "FFFFFFFFF603FFFFFFFFFFFA11BFFFFFFFFF", "FFFFFFFFF901AFFFFFFFFFF702EFFFFFFFFF", "FFFFFFFFFE205FFFFFFFFFF404FFFFFFFFFF", "FFFFFFFFFF602CFFFFFFFFB108FFFFFFFFFF", "FFFFFFFFFFC205FFFFFFFF502DFFFFFFFFFF", "FFFFFFFFFFF7017FFFFFF9106FFFFFFFFFFF", "FFFFFFFFFFFF4017FFFFB303DFFFFFFFFFFF", "FFFFFFFFFFFFC30048972019FFFFFFFFFFFF", "FFFFFFFFFFFFFC400000028FFFFFFFFFFFFF", "FFFFFFFFFFFFFFF842125BFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFECEFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", }; /*XPM*/ static char *char_H_grey_36_36_xpm[] = { "36 36 16 1", "0 c #000000", "1 c #0E0E0E", "2 c #1C1C1C", "3 c #2B2B2B", "4 c #393939", "5 c #474747", "6 c #565656", "7 c #646464", "8 c #727272", "9 c #818181", "A c #8F8F8F", "B c #9D9D9D", "C c #ACACAC", "D c #BABABA", "E c #C8C8C8", "F c #D7D7D7", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFCFFFFFFFFFFFFFCFFFFFFFFFF", "FFFFFFFFFF518FFFFFFFFFFF924FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF30555555555555503FFFFFFFFF", "FFFFFFFFFF30000000000000003FFFFFFFFF", "FFFFFFFFFF30555555555555503FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF529FFFFFFFFFFF925FFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", }; /*XPM*/ static char *char_I_grey_36_36_xpm[] = { "36 36 16 1", "0 c #000000", "1 c #0E0E0E", "2 c #1C1C1C", "3 c #2B2B2B", "4 c #393939", "5 c #474747", "6 c #565656", "7 c #646464", "8 c #727272", "9 c #818181", "A c #8F8F8F", "B c #9D9D9D", "C c #ACACAC", "D c #BABABA", "E c #C8C8C8", "F c #D7D7D7", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFDCCCCCCCCCCCDFFFFFFFFFFF", "FFFFFFFFFFF92111111111112AFFFFFFFFFF", "FFFFFFFFFFF810000000000019FFFFFFFFFF", "FFFFFFFFFFFFA99995059999AFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFA99995059999AFFFFFFFFFFF", "FFFFFFFFFFF810000000000019FFFFFFFFFF", "FFFFFFFFFFF92111111111112AFFFFFFFFFF", "FFFFFFFFFFFFDCCCCCCCCCCCDFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", }; /*XPM*/ static char *char_J_grey_36_36_xpm[] = { "36 36 16 1", "0 c #000000", "1 c #0E0E0E", "2 c #1C1C1C", "3 c #2B2B2B", "4 c #393939", "5 c #474747", "6 c #565656", "7 c #646464", "8 c #727272", "9 c #818181", "A c #8F8F8F", "B c #9D9D9D", "C c #ACACAC", "D c #BABABA", "E c #C8C8C8", "F c #D7D7D7", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFF429FFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFF207FFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFF207FFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFF207FFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFF207FFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFF207FFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFF207FFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFF207FFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFF207FFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFF207FFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFF207FFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFF207FFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFF207FFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFF207FFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFF207FFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFF207FFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFF207FFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFF207FFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFF207FFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFF207FFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFF207FFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFF207FFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFE208FFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFB10AFFFFFFFFFF", "FFFFFFFFFFFFC6BFFFFFFF802CFFFFFFFFFF", "FFFFFFFFFFFF504FFFFFFF404FFFFFFFFFFF", "FFFFFFFFFFFF8019FFFFF9108FFFFFFFFFFF", "FFFFFFFFFFFFE303BFFFB303EFFFFFFFFFFF", "FFFFFFFFFFFFF91027972019FFFFFFFFFFFF", "FFFFFFFFFFFFFF820000028FFFFFFFFFFFFF", "FFFFFFFFFFFFFFFB52125BFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFECEFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", }; /*XPM*/ static char *char_K_grey_36_36_xpm[] = { "36 36 16 1", "0 c #000000", "1 c #0E0E0E", "2 c #1C1C1C", "3 c #2B2B2B", "4 c #393939", "5 c #474747", "6 c #565656", "7 c #646464", "8 c #727272", "9 c #818181", "A c #8F8F8F", "B c #9D9D9D", "C c #ACACAC", "D c #BABABA", "E c #C8C8C8", "F c #D7D7D7", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFCFFFFFFFFFFFFDFFFFFFFFFFF", "FFFFFFFFFF518FFFFFFFFFF429FFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFF6008FFFFFFFFFF", "FFFFFFFFFF307FFFFFFFF8105FFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFA204EFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFC302BFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFF4019FFFFFFFFFFFFF", "FFFFFFFFFF307FFFFF6007FFFFFFFFFFFFFF", "FFFFFFFFFF307FFFF8105FFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFA204EFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFC302BFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FF4019FFFFFFFFFFFFFFFFF", "FFFFFFFFFF30796007FFFFFFFFFFFFFFFFFF", "FFFFFFFFFF3002105FFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF302004EFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF303005FFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF3001018FFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF3068402AFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FB203EFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FF8105FFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFF6018FFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFE402AFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFB203EFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFF8105FFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFF6018FFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFE402AFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFB203EFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFF8105FFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFF6018FFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFE402AFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFB203FFFFFFFFF", "FFFFFFFFFF529FFFFFFFFFFF825FFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", }; /*XPM*/ static char *char_L_grey_36_36_xpm[] = { "36 36 16 1", "0 c #000000", "1 c #0E0E0E", "2 c #1C1C1C", "3 c #2B2B2B", "4 c #393939", "5 c #474747", "6 c #565656", "7 c #646464", "8 c #727272", "9 c #818181", "A c #8F8F8F", "B c #9D9D9D", "C c #ACACAC", "D c #BABABA", "E c #C8C8C8", "F c #D7D7D7", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFCFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF518FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF3079999999999999DFFFFFFFFF", "FFFFFFFFFF30000000000000004FFFFFFFFF", "FFFFFFFFFF51111111111111115FFFFFFFFF", "FFFFFFFFFFFCCCCCCCCCCCCCCCFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", }; /*XPM*/ static char *char_M_grey_36_36_xpm[] = { "36 36 16 1", "0 c #000000", "1 c #0E0E0E", "2 c #1C1C1C", "3 c #2B2B2B", "4 c #393939", "5 c #474747", "6 c #565656", "7 c #646464", "8 c #727272", "9 c #818181", "A c #8F8F8F", "B c #9D9D9D", "C c #ACACAC", "D c #BABABA", "E c #C8C8C8", "F c #D7D7D7", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFCFFFFFFFFFFFFFFFFFFFCFFFFFFF", "FFFFFFF617FFFFFFFFFFFFFFFFF716FFFFFF", "FFFFFFF403EFFFFFFFFFFFFFFFE304FFFFFF", "FFFFFFF4007FFFFFFFFFFFFFFF7004FFFFFF", "FFFFFFF4003EFFFFFFFFFFFFFE3004FFFFFF", "FFFFFFF40107FFFFFFFFFFFFF70104FFFFFF", "FFFFFFF40503EFFFFFFFFFFFE30504FFFFFF", "FFFFFFF405107FFFFFFFFFFF701504FFFFFF", "FFFFFFF405503EFFFFFFFFFE305504FFFFFF", "FFFFFFF405A107FFFFFFFFF701A504FFFFFF", "FFFFFFF405F503EFFFFFFFE305F504FFFFFF", "FFFFFFF405FA107FFFFFFF701AF504FFFFFF", "FFFFFFF405FF503EFFFFFE305FF504FFFFFF", "FFFFFFF405FFA107FFFFF701AFF504FFFFFF", "FFFFFFF405FFF503EFFFE305FFF504FFFFFF", "FFFFFFF405FFFA107FFF701AFFF504FFFFFF", "FFFFFFF405FFFF503EFE305FFFF504FFFFFF", "FFFFFFF405FFFFA107F701AFFFF504FFFFFF", "FFFFFFF405FFFFF503E305FFFFF504FFFFFF", "FFFFFFF405FFFFFA10701AFFFFF504FFFFFF", "FFFFFFF405FFFFFF50305FFFFFF504FFFFFF", "FFFFFFF405FFFFFFA101AFFFFFF504FFFFFF", "FFFFFFF405FFFFFFF505FFFFFFF504FFFFFF", "FFFFFFF405FFFFFFFD9DFFFFFFF504FFFFFF", "FFFFFFF405FFFFFFFFFFFFFFFFF504FFFFFF", "FFFFFFF405FFFFFFFFFFFFFFFFF504FFFFFF", "FFFFFFF405FFFFFFFFFFFFFFFFF504FFFFFF", "FFFFFFF405FFFFFFFFFFFFFFFFF504FFFFFF", "FFFFFFF405FFFFFFFFFFFFFFFFF504FFFFFF", "FFFFFFF405FFFFFFFFFFFFFFFFF504FFFFFF", "FFFFFFF405FFFFFFFFFFFFFFFFF504FFFFFF", "FFFFFFF728FFFFFFFFFFFFFFFFF827FFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", }; /*XPM*/ static char *char_N_grey_36_36_xpm[] = { "36 36 16 1", "0 c #000000", "1 c #0E0E0E", "2 c #1C1C1C", "3 c #2B2B2B", "4 c #393939", "5 c #474747", "6 c #565656", "7 c #646464", "8 c #727272", "9 c #818181", "A c #8F8F8F", "B c #9D9D9D", "C c #ACACAC", "D c #BABABA", "E c #C8C8C8", "F c #D7D7D7", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFCFFFFFFFFFFFFFCFFFFFFFFFF", "FFFFFFFFFF518FFFFFFFFFFF924FFFFFFFFF", "FFFFFFFFFF304FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF3019FFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF3004FFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF30119FFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF30404FFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307119FFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307404FFFFFFFF703FFFFFFFFF", "FFFFFFFFFF3079119FFFFFFF703FFFFFFFFF", "FFFFFFFFFF307F404FFFFFFF703FFFFFFFFF", "FFFFFFFFFF307F9119FFFFFF703FFFFFFFFF", "FFFFFFFFFF307FF404FFFFFF703FFFFFFFFF", "FFFFFFFFFF307FF9119FFFFF703FFFFFFFFF", "FFFFFFFFFF307FFF404FFFFF703FFFFFFFFF", "FFFFFFFFFF307FFF9119FFFF703FFFFFFFFF", "FFFFFFFFFF307FFFF404FFFF703FFFFFFFFF", "FFFFFFFFFF307FFFF9119FFF703FFFFFFFFF", "FFFFFFFFFF307FFFFF404FFF703FFFFFFFFF", "FFFFFFFFFF307FFFFF9119FF703FFFFFFFFF", "FFFFFFFFFF307FFFFFF404FF703FFFFFFFFF", "FFFFFFFFFF307FFFFFF9119F703FFFFFFFFF", "FFFFFFFFFF307FFFFFFF404F703FFFFFFFFF", "FFFFFFFFFF307FFFFFFF9119703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFF404703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFF911703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFF40403FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFF91103FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFF4003FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFF9103FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF403FFFFFFFFF", "FFFFFFFFFF529FFFFFFFFFFF925FFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", }; /*XPM*/ static char *char_O_grey_36_36_xpm[] = { "36 36 16 1", "0 c #000000", "1 c #0E0E0E", "2 c #1C1C1C", "3 c #2B2B2B", "4 c #393939", "5 c #474747", "6 c #565656", "7 c #646464", "8 c #727272", "9 c #818181", "A c #8F8F8F", "B c #9D9D9D", "C c #ACACAC", "D c #BABABA", "E c #C8C8C8", "F c #D7D7D7", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFECDFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFF8421248FFFFFFFFFFFFFF", "FFFFFFFFFFFFFC400000004CFFFFFFFFFFFF", "FFFFFFFFFFFFC30048984003CFFFFFFFFFFF", "FFFFFFFFFFFF4017FFFFF7104FFFFFFFFFFF", "FFFFFFFFFFF7017FFFFFFF7107FFFFFFFFFF", "FFFFFFFFFFC205FFFFFFFFF502CFFFFFFFFF", "FFFFFFFFFF602CFFFFFFFFFC206FFFFFFFFF", "FFFFFFFFFE306FFFFFFFFFFF502EFFFFFFFF", "FFFFFFFFF901AFFFFFFFFFFFA109FFFFFFFF", "FFFFFFFFF603FFFFFFFFFFFFF306FFFFFFFF", "FFFFFFFFF305FFFFFFFFFFFFF503FFFFFFFF", "FFFFFFFFE208FFFFFFFFFFFFF802EFFFFFFF", "FFFFFFFFB11AFFFFFFFFFFFFFA11BFFFFFFF", "FFFFFFFFA11CFFFFFFFFFFFFFC11AFFFFFFF", "FFFFFFFF901DFFFFFFFFFFFFFD109FFFFFFF", "FFFFFFFF902DFFFFFFFFFFFFFD209FFFFFFF", "FFFFFFFF901DFFFFFFFFFFFFFD109FFFFFFF", "FFFFFFFFA11CFFFFFFFFFFFFFC11AFFFFFFF", "FFFFFFFFB11AFFFFFFFFFFFFFA11BFFFFFFF", "FFFFFFFFE208FFFFFFFFFFFFF802EFFFFFFF", "FFFFFFFFF305FFFFFFFFFFFFF503FFFFFFFF", "FFFFFFFFF603FFFFFFFFFFFFF306FFFFFFFF", "FFFFFFFFF901AFFFFFFFFFFFA109FFFFFFFF", "FFFFFFFFFE306FFFFFFFFFFF502EFFFFFFFF", "FFFFFFFFFF602CFFFFFFFFFC206FFFFFFFFF", "FFFFFFFFFFC205FFFFFFFFF502CFFFFFFFFF", "FFFFFFFFFFF7017FFFFFFF7107FFFFFFFFFF", "FFFFFFFFFFFF4017FFFFF7104FFFFFFFFFFF", "FFFFFFFFFFFFC30048984003CFFFFFFFFFFF", "FFFFFFFFFFFFFC400000004CFFFFFFFFFFFF", "FFFFFFFFFFFFFFF8421248FFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFECDFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", }; /*XPM*/ static char *char_P_grey_36_36_xpm[] = { "36 36 16 1", "0 c #000000", "1 c #0E0E0E", "2 c #1C1C1C", "3 c #2B2B2B", "4 c #393939", "5 c #474747", "6 c #565656", "7 c #646464", "8 c #727272", "9 c #818181", "A c #8F8F8F", "B c #9D9D9D", "C c #ACACAC", "D c #BABABA", "E c #C8C8C8", "F c #D7D7D7", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFCCCCCCCEFFFFFFFFFFFFFFFFF", "FFFFFFFFFF51111111247CFFFFFFFFFFFFFF", "FFFFFFFFFF3000000000027FFFFFFFFFFFFF", "FFFFFFFFFF30799999751005FFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFB4005FFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFF5018FFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFF403EFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFA109FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF305FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF603FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF603FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF404FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFD207FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFF601BFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFF9105FFFFFFFFFF", "FFFFFFFFFF307FFFFFFFF9202CFFFFFFFFFF", "FFFFFFFFFF307FFFFFEA51029FFFFFFFFFFF", "FFFFFFFFFF3033333321003AFFFFFFFFFFFF", "FFFFFFFFFF300000000126DFFFFFFFFFFFFF", "FFFFFFFFFF306666667AEFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF529FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", }; /*XPM*/ static char *char_Q_grey_36_36_xpm[] = { "36 36 16 1", "0 c #000000", "1 c #0E0E0E", "2 c #1C1C1C", "3 c #2B2B2B", "4 c #393939", "5 c #474747", "6 c #565656", "7 c #646464", "8 c #727272", "9 c #818181", "A c #8F8F8F", "B c #9D9D9D", "C c #ACACAC", "D c #BABABA", "E c #C8C8C8", "F c #D7D7D7", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFECDFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFF8421248FFFFFFFFFFFFFF", "FFFFFFFFFFFFFC400000004CFFFFFFFFFFFF", "FFFFFFFFFFFFC30048984003CFFFFFFFFFFF", "FFFFFFFFFFFF4017FFFFF7104FFFFFFFFFFF", "FFFFFFFFFFF7017FFFFFFF7107FFFFFFFFFF", "FFFFFFFFFFC205FFFFFFFFF502CFFFFFFFFF", "FFFFFFFFFF602CFFFFFFFFFC206FFFFFFFFF", "FFFFFFFFFE306FFFFFFFFFFF502EFFFFFFFF", "FFFFFFFFF901AFFFFFFFFFFFA109FFFFFFFF", "FFFFFFFFF603FFFFFFFFFFFFF306FFFFFFFF", "FFFFFFFFF305FFFFFFFFFFFFF503FFFFFFFF", "FFFFFFFFE208FFFFFFFFFFFFF802EFFFFFFF", "FFFFFFFFB11AFFFFFFFFFFFFFA11BFFFFFFF", "FFFFFFFFA11CFFFFFFFFFFFFFC11AFFFFFFF", "FFFFFFFF901DFFFFFFFFFFFFFD109FFFFFFF", "FFFFFFFF902DFFFFFFFFFFFFFD209FFFFFFF", "FFFFFFFF901DFFFFFFFFFFFFFD109FFFFFFF", "FFFFFFFFA11CFFFFFFF64BFFFC11AFFFFFFF", "FFFFFFFFB11AFFFFFFF205FFFA11BFFFFFFF", "FFFFFFFFE208FFFFFFF7019FF802EFFFFFFF", "FFFFFFFFF305FFFFFFFE303EF503FFFFFFFF", "FFFFFFFFF603FFFFFFFF9107F306FFFFFFFF", "FFFFFFFFF901AFFFFFFFF502A109FFFFFFFF", "FFFFFFFFFE306FFFFFFFFB20502EFFFFFFFF", "FFFFFFFFFF602CFFFFFFFF70106FFFFFFFFF", "FFFFFFFFFFC205FFFFFFFFE302CFFFFFFFFF", "FFFFFFFFFFF7017FFFFFFF71007FFFFFFFFF", "FFFFFFFFFFFF4017FFFFF710402BFFFFFFFF", "FFFFFFFFFFFFC30048984003B205FFFFFFFF", "FFFFFFFFFFFFFC400000004CF701AFFFFFFF", "FFFFFFFFFFFFFFF8421248FFFE32BFFFFFFF", "FFFFFFFFFFFFFFFFFECDFFFFFFFEFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", }; /*XPM*/ static char *char_R_grey_36_36_xpm[] = { "36 36 16 1", "0 c #000000", "1 c #0E0E0E", "2 c #1C1C1C", "3 c #2B2B2B", "4 c #393939", "5 c #474747", "6 c #565656", "7 c #646464", "8 c #727272", "9 c #818181", "A c #8F8F8F", "B c #9D9D9D", "C c #ACACAC", "D c #BABABA", "E c #C8C8C8", "F c #D7D7D7", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFCCCCCCCEFFFFFFFFFFFFFFFFF", "FFFFFFFFFF51111111247CFFFFFFFFFFFFFF", "FFFFFFFFFF3000000000027FFFFFFFFFFFFF", "FFFFFFFFFF30799999751005FFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFB4005FFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFF5018FFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFF403EFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFA109FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF305FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF603FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF603FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF404FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFD207FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFF601BFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFF9105FFFFFFFFFF", "FFFFFFFFFF307FFFFFFFF9202CFFFFFFFFFF", "FFFFFFFFFF307FFFFFEA51029FFFFFFFFFFF", "FFFFFFFFFF3033333321003AFFFFFFFFFFFF", "FFFFFFFFFF300000000126DFFFFFFFFFFFFF", "FFFFFFFFFF30666666106FFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFF601AFFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFD303FFFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFF8107FFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFF502BFFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFB204FFFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFF7018FFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFF403DFFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFA106FFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFF601AFFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFD304FFFFFFFFF", "FFFFFFFFFF529FFFFFFFFFFF825FFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", }; /*XPM*/ static char *char_S_grey_36_36_xpm[] = { "36 36 16 1", "0 c #000000", "1 c #0E0E0E", "2 c #1C1C1C", "3 c #2B2B2B", "4 c #393939", "5 c #474747", "6 c #565656", "7 c #646464", "8 c #727272", "9 c #818181", "A c #8F8F8F", "B c #9D9D9D", "C c #ACACAC", "D c #BABABA", "E c #C8C8C8", "F c #D7D7D7", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFDCDFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFA53212247BFFFFFFFFFFFF", "FFFFFFFFFFFFC510000000015CFFFFFFFFFF", "FFFFFFFFFFFB300368997420029FFFFFFFFF", "FFFFFFFFFFD3017EFFFFFFD62019FFFFFFFF", "FFFFFFFFFF5019FFFFFFFFFFA308FFFFFFFF", "FFFFFFFFFC206FFFFFFFFFFFFC9FFFFFFFFF", "FFFFFFFFF802CFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFF603FFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFF504FFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFF702DFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFB106FFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF6006EFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFE40039FFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFE510149FFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFF9300148FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFF8300038FFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF8410039FFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFF941015EFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFF93004EFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFE6006FFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFF601BFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFD207FFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFF405FFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFF306FFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFC208FFFFFFFF", "FFFFFFFFFF9CFFFFFFFFFFFF602CFFFFFFFF", "FFFFFFFFF803AFFFFFFFFFF9105FFFFFFFFF", "FFFFFFFFF91026DFFFFFFE7103DFFFFFFFFF", "FFFFFFFFFF920024799863003BFFFFFFFFFF", "FFFFFFFFFFFC510000000015CFFFFFFFFFFF", "FFFFFFFFFFFFFB74221235AFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFDCDFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", }; /*XPM*/ static char *char_T_grey_36_36_xpm[] = { "36 36 16 1", "0 c #000000", "1 c #0E0E0E", "2 c #1C1C1C", "3 c #2B2B2B", "4 c #393939", "5 c #474747", "6 c #565656", "7 c #646464", "8 c #727272", "9 c #818181", "A c #8F8F8F", "B c #9D9D9D", "C c #ACACAC", "D c #BABABA", "E c #C8C8C8", "F c #D7D7D7", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFCCCCCCCCCCCCCCCFFFFFFFFFF", "FFFFFFFFFF51111111111111115FFFFFFFFF", "FFFFFFFFFF40000000000000004FFFFFFFFF", "FFFFFFFFFFD999999505999999DFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF727FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", }; /*XPM*/ static char *char_U_grey_36_36_xpm[] = { "36 36 16 1", "0 c #000000", "1 c #0E0E0E", "2 c #1C1C1C", "3 c #2B2B2B", "4 c #393939", "5 c #474747", "6 c #565656", "7 c #646464", "8 c #727272", "9 c #818181", "A c #8F8F8F", "B c #9D9D9D", "C c #ACACAC", "D c #BABABA", "E c #C8C8C8", "F c #D7D7D7", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFCFFFFFFFFFFFFFCFFFFFFFFFF", "FFFFFFFFFF518FFFFFFFFFFF924FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF307FFFFFFFFFFF703FFFFFFFFF", "FFFFFFFFFF306FFFFFFFFFFF603FFFFFFFFF", "FFFFFFFFFF504FFFFFFFFFFF405FFFFFFFFF", "FFFFFFFFFF802CFFFFFFFFFC208FFFFFFFFF", "FFFFFFFFFFC206FFFFFFFFF602CFFFFFFFFF", "FFFFFFFFFFF6019FFFFFFF9106FFFFFFFFFF", "FFFFFFFFFFFD3029FFFFF9203DFFFFFFFFFF", "FFFFFFFFFFFFA20148984102AFFFFFFFFFFF", "FFFFFFFFFFFFFA300000003AFFFFFFFFFFFF", "FFFFFFFFFFFFFFE7421247EFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFDCDFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", }; /*XPM*/ static char *char_V_grey_36_36_xpm[] = { "36 36 16 1", "0 c #000000", "1 c #0E0E0E", "2 c #1C1C1C", "3 c #2B2B2B", "4 c #393939", "5 c #474747", "6 c #565656", "7 c #646464", "8 c #727272", "9 c #818181", "A c #8F8F8F", "B c #9D9D9D", "C c #ACACAC", "D c #BABABA", "E c #C8C8C8", "F c #D7D7D7", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFDEFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFB23FFFFFFFFFFFFFFF43CFFFFFFF", "FFFFFFFFA11AFFFFFFFFFFFFFA11AFFFFFFF", "FFFFFFFFE206FFFFFFFFFFFFF602EFFFFFFF", "FFFFFFFFF503FFFFFFFFFFFFF305FFFFFFFF", "FFFFFFFFF801CFFFFFFFFFFFC108FFFFFFFF", "FFFFFFFFFC207FFFFFFFFFFF702CFFFFFFFF", "FFFFFFFFFF404FFFFFFFFFFF404FFFFFFFFF", "FFFFFFFFFF702DFFFFFFFFFD207FFFFFFFFF", "FFFFFFFFFFB109FFFFFFFFF901BFFFFFFFFF", "FFFFFFFFFFF305FFFFFFFFF503FFFFFFFFFF", "FFFFFFFFFFF603FFFFFFFFF306FFFFFFFFFF", "FFFFFFFFFFFA11AFFFFFFFA11AFFFFFFFFFF", "FFFFFFFFFFFE206FFFFFFF602EFFFFFFFFFF", "FFFFFFFFFFFF503FFFFFFF305FFFFFFFFFFF", "FFFFFFFFFFFF801CFFFFFC108FFFFFFFFFFF", "FFFFFFFFFFFFC207FFFFF702CFFFFFFFFFFF", "FFFFFFFFFFFFF404FFFFF404FFFFFFFFFFFF", "FFFFFFFFFFFFF702DFFFD207FFFFFFFFFFFF", "FFFFFFFFFFFFFB109FFF901BFFFFFFFFFFFF", "FFFFFFFFFFFFFF305FFF503FFFFFFFFFFFFF", "FFFFFFFFFFFFFF603FFF306FFFFFFFFFFFFF", "FFFFFFFFFFFFFFA11AFA11AFFFFFFFFFFFFF", "FFFFFFFFFFFFFFE206F602EFFFFFFFFFFFFF", "FFFFFFFFFFFFFFF503F305FFFFFFFFFFFFFF", "FFFFFFFFFFFFFFF801C108FFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFC20702CFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFF40404FFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFF70207FFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFB101BFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF303FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF616FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", }; /*XPM*/ static char *char_W_grey_36_36_xpm[] = { "36 36 16 1", "0 c #000000", "1 c #0E0E0E", "2 c #1C1C1C", "3 c #2B2B2B", "4 c #393939", "5 c #474747", "6 c #565656", "7 c #646464", "8 c #727272", "9 c #818181", "A c #8F8F8F", "B c #9D9D9D", "C c #ACACAC", "D c #BABABA", "E c #C8C8C8", "F c #D7D7D7", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFF815FFFFFFFFFFFFFFFFFFF53AFFFFF", "FFFFFF702EFFFFFFFFFFFFFFFFFE207FFFFF", "FFFFFF901CFFFFFFFFFFFFFFFFFC109FFFFF", "FFFFFFB10AFFFFFFFFFFFFFFFFFA01BFFFFF", "FFFFFFE208FFFFFFFFFFFFFFFFF802EFFFFF", "FFFFFFF306FFFFFFFFFFFFFFFFF603FFFFFF", "FFFFFFF404FFFFFFFFFFFFFFFFF404FFFFFF", "FFFFFFF603FFFFFFFFFFFFFFFFF306FFFFFF", "FFFFFFF802DFFFFFFD9DFFFFFFD208FFFFFF", "FFFFFFFA11BFFFFFF505FFFFFFB11AFFFFFF", "FFFFFFFC109FFFFFD202DFFFFF901CFFFFFF", "FFFFFFFF207FFFFF90109FFFFF702FFFFFFF", "FFFFFFFF405FFFFF50305FFFFF504FFFFFFF", "FFFFFFFF504FFFFE20602EFFFF405FFFFFFF", "FFFFFFFF703FFFF911A119FFFF307FFFFFFF", "FFFFFFFF902DFFF503F305FFFD209FFFFFFF", "FFFFFFFFB11AFFF306F603FFFA11BFFFFFFF", "FFFFFFFFD208FFA11AFA11AFF802DFFFFFFF", "FFFFFFFFF306FF603EFE306FF603FFFFFFFF", "FFFFFFFFF405FF305FFF503FF504FFFFFFFF", "FFFFFFFFF603FA109FFF901AF306FFFFFFFF", "FFFFFFFFF702E602EFFFE206E207FFFFFFFF", "FFFFFFFFF901C305FFFFF503C109FFFFFFFF", "FFFFFFFFFB10A109FFFFF901A01BFFFFFFFF", "FFFFFFFFFE20702DFFFFFD20702EFFFFFFFF", "FFFFFFFFFF30305FFFFFFF50303FFFFFFFFF", "FFFFFFFFFF50108FFFFFFF80105FFFFFFFFF", "FFFFFFFFFF6002DFFFFFFFD2006FFFFFFFFF", "FFFFFFFFFF8004FFFFFFFFF4008FFFFFFFFF", "FFFFFFFFFFA108FFFFFFFFF801AFFFFFFFFF", "FFFFFFFFFFD32CFFFFFFFFFC23DFFFFFFFFF", "FFFFFFFFFFFEDFFFFFFFFFFFDEFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", }; /*XPM*/ static char *char_X_grey_36_36_xpm[] = { "36 36 16 1", "0 c #000000", "1 c #0E0E0E", "2 c #1C1C1C", "3 c #2B2B2B", "4 c #393939", "5 c #474747", "6 c #565656", "7 c #646464", "8 c #727272", "9 c #818181", "A c #8F8F8F", "B c #9D9D9D", "C c #ACACAC", "D c #BABABA", "E c #C8C8C8", "F c #D7D7D7", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFCFFFFFFFFFFFFFCFFFFFFFFFF", "FFFFFFFFFF518FFFFFFFFFFF924FFFFFFFFF", "FFFFFFFFFF404FFFFFFFFFFF403FFFFFFFFF", "FFFFFFFFFF9119FFFFFFFFF9119FFFFFFFFF", "FFFFFFFFFFF404FFFFFFFFF404FFFFFFFFFF", "FFFFFFFFFFF9119FFFFFFF9119FFFFFFFFFF", "FFFFFFFFFFFF404FFFFFFF404FFFFFFFFFFF", "FFFFFFFFFFFF9119FFFFF9119FFFFFFFFFFF", "FFFFFFFFFFFFF404FFFFF404FFFFFFFFFFFF", "FFFFFFFFFFFFF9119FFF9119FFFFFFFFFFFF", "FFFFFFFFFFFFFF404FFF404FFFFFFFFFFFFF", "FFFFFFFFFFFFFF9119F9119FFFFFFFFFFFFF", "FFFFFFFFFFFFFFF404F404FFFFFFFFFFFFFF", "FFFFFFFFFFFFFFF9119119FFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFF40404FFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFF91119FFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF404FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFF91119FFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFF40404FFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFF9119119FFFFFFFFFFFFFF", "FFFFFFFFFFFFFFF404F404FFFFFFFFFFFFFF", "FFFFFFFFFFFFFF9119F9119FFFFFFFFFFFFF", "FFFFFFFFFFFFFF404FFF404FFFFFFFFFFFFF", "FFFFFFFFFFFFF9119FFF9119FFFFFFFFFFFF", "FFFFFFFFFFFFF404FFFFF404FFFFFFFFFFFF", "FFFFFFFFFFFF9119FFFFF9119FFFFFFFFFFF", "FFFFFFFFFFFF404FFFFFFF404FFFFFFFFFFF", "FFFFFFFFFFF9119FFFFFFF9119FFFFFFFFFF", "FFFFFFFFFFF404FFFFFFFFF404FFFFFFFFFF", "FFFFFFFFFF9119FFFFFFFFF9119FFFFFFFFF", "FFFFFFFFFF404FFFFFFFFFFF404FFFFFFFFF", "FFFFFFFFFF629FFFFFFFFFFF926FFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", }; /*XPM*/ static char *char_Y_grey_36_36_xpm[] = { "36 36 16 1", "0 c #000000", "1 c #0E0E0E", "2 c #1C1C1C", "3 c #2B2B2B", "4 c #393939", "5 c #474747", "6 c #565656", "7 c #646464", "8 c #727272", "9 c #818181", "A c #8F8F8F", "B c #9D9D9D", "C c #ACACAC", "D c #BABABA", "E c #C8C8C8", "F c #D7D7D7", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFDEFFFFFFFFFFFFFFFEDFFFFFFFF", "FFFFFFFFB23FFFFFFFFFFFFFFF32BFFFFFFF", "FFFFFFFFA108FFFFFFFFFFFFF801AFFFFFFF", "FFFFFFFFF403FFFFFFFFFFFFF304FFFFFFFF", "FFFFFFFFF9108FFFFFFFFFFF8019FFFFFFFF", "FFFFFFFFFF403FFFFFFFFFFF304FFFFFFFFF", "FFFFFFFFFF9108FFFFFFFFF8019FFFFFFFFF", "FFFFFFFFFFF403FFFFFFFFF304FFFFFFFFFF", "FFFFFFFFFFF9108FFFFFFF8019FFFFFFFFFF", "FFFFFFFFFFFF403FFFFFFF304FFFFFFFFFFF", "FFFFFFFFFFFF9108FFFFF8019FFFFFFFFFFF", "FFFFFFFFFFFFF403FFFFF304FFFFFFFFFFFF", "FFFFFFFFFFFFF9108FFF8019FFFFFFFFFFFF", "FFFFFFFFFFFFFF403FFF304FFFFFFFFFFFFF", "FFFFFFFFFFFFFF9108F8019FFFFFFFFFFFFF", "FFFFFFFFFFFFFFF403F304FFFFFFFFFFFFFF", "FFFFFFFFFFFFFFF9108019FFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFF40304FFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFF91019FFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF404FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF505FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF727FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", }; /*XPM*/ static char *char_Z_grey_36_36_xpm[] = { "36 36 16 1", "0 c #000000", "1 c #0E0E0E", "2 c #1C1C1C", "3 c #2B2B2B", "4 c #393939", "5 c #474747", "6 c #565656", "7 c #646464", "8 c #727272", "9 c #818181", "A c #8F8F8F", "B c #9D9D9D", "C c #ACACAC", "D c #BABABA", "E c #C8C8C8", "F c #D7D7D7", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFCCCCCCCCCCCCCCCCCFFFFFFFFF", "FFFFFFFFF7111111111111111117FFFFFFFF", "FFFFFFFFF6000000000000000006FFFFFFFF", "FFFFFFFFFF99999999999999502DFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFF9107FFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFF403EFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFF8008FFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFE304FFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFF7019FFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFD205FFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFF601BFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFB206FFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFF502CFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFA106FFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFF403DFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF9108FFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFF303FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFF8019FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFD304FFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFF701AFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFC205FFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFF602BFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFB106FFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFF502DFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFF9107FFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFF403EFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFF8008FFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFE304FFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFF7019FFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFD20599999999999999FFFFFFFFF", "FFFFFFFFF6000000000000000007FFFFFFFF", "FFFFFFFFF7111111111111111118FFFFFFFF", "FFFFFFFFFFCCCCCCCCCCCCCCCCCFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", }; gtkboard/pixmaps/arrows.xpm000066400000000000000000000106411153150217100163750ustar00rootroot00000000000000/* XPM */ /* FIXME: encode the size into the name */ static char * arrow_blue_s_xpm[]= { "20 20 2 1", ". c blue", " c none", " .... ", " .... ", " .... ", " .... ", " .... ", " .... ", " .... ", " .... ", " .... ", " .... ", " .... ", " .... ", " .... ", " .............. ", " ............ ", " .......... ", " ........ ", " ...... ", " .... ", " .. ", }; static char * arrow_blue_n_xpm[]= { "20 20 2 1", ". c blue", " c none", " .. ", " .... ", " ...... ", " ........ ", " .......... ", " ............ ", " .............. ", " .... ", " .... ", " .... ", " .... ", " .... ", " .... ", " .... ", " .... ", " .... ", " .... ", " .... ", " .... ", " .... ", }; static char * arrow_blue_e_xpm[]= { "20 20 2 1", ". c blue", " c none", " ", " ", " ", " . ", " .. ", " ... ", " .... ", " ..... ", "................... ", "....................", "....................", "................... ", " ..... ", " .... ", " ... ", " .. ", " . ", " ", " ", " ", }; static char * arrow_blue_w_xpm[]= { "20 20 2 1", ". c blue", " c none", " ", " ", " ", " . ", " .. ", " ... ", " .... ", " ..... ", " ...................", "....................", "....................", " ...................", " ..... ", " .... ", " ... ", " .. ", " . ", " ", " ", " ", }; static char * arrow_blue_ne_xpm[]= { "20 20 2 1", ". c blue", " c none", " .......", " ......", " .....", " ......", " .......", " ..... ..", " ..... .", " ..... ", " ..... ", " ..... ", " ..... ", " ..... ", " ..... ", " ..... ", " ..... ", " ..... ", " ..... ", "..... ", ".... ", "... ", }; static char * arrow_blue_se_xpm[]= { "20 20 2 1", ". c blue", " c none", "... ", ".... ", "..... ", " ..... ", " ..... ", " ..... ", " ..... ", " ..... ", " ..... ", " ..... ", " ..... ", " ..... ", " ..... ", " ..... .", " ..... ..", " .......", " ......", " .....", " ......", " .......", }; static char * arrow_blue_sw_xpm[]= { "20 20 2 1", ". c blue", " c none", " ...", " ....", " .....", " ..... ", " ..... ", " ..... ", " ..... ", " ..... ", " ..... ", " ..... ", " ..... ", " ..... ", " ..... ", ". ..... ", ".. ..... ", "....... ", "...... ", "..... ", "...... ", "....... ", }; static char * arrow_blue_nw_xpm[]= { "20 20 2 1", ". c blue", " c none", "....... ", "...... ", "..... ", "...... ", "....... ", ".. ..... ", ". ..... ", " ..... ", " ..... ", " ..... ", " ..... ", " ..... ", " ..... ", " ..... ", " ..... ", " ..... ", " ..... ", " .....", " ....", " ...", }; gtkboard/pixmaps/ball.xpm000066400000000000000000000317741153150217100160040ustar00rootroot00000000000000/* XPM */ static char * red_ball_55_xpm[]= { "55 55 2 1", " c red", ". c none", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", "....................... .......................", ".................... ....................", ".................. ..................", "................ ................", "............... ...............", ".............. ..............", "............. .............", "............ ............", "........... ...........", ".......... ..........", ".......... ..........", "......... .........", "......... .........", "........ ........", "........ ........", "........ ........", "....... .......", "....... .......", "....... .......", "....... .......", "....... .......", "....... .......", "....... .......", "....... .......", "....... .......", "........ ........", "........ ........", "........ ........", "......... .........", "......... .........", ".......... ..........", ".......... ..........", "........... ...........", "............ ............", "............. .............", ".............. ..............", "............... ...............", "................ ................", ".................. ..................", ".................... ....................", "....................... .......................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", }; static char * green_ball_55_xpm[]= { "55 55 2 1", " c green", ". c none", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", "....................... .......................", ".................... ....................", ".................. ..................", "................ ................", "............... ...............", ".............. ..............", "............. .............", "............ ............", "........... ...........", ".......... ..........", ".......... ..........", "......... .........", "......... .........", "........ ........", "........ ........", "........ ........", "....... .......", "....... .......", "....... .......", "....... .......", "....... .......", "....... .......", "....... .......", "....... .......", "....... .......", "........ ........", "........ ........", "........ ........", "......... .........", "......... .........", ".......... ..........", ".......... ..........", "........... ...........", "............ ............", "............. .............", ".............. ..............", "............... ...............", "................ ................", ".................. ..................", ".................... ....................", "....................... .......................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", }; static char *blue_ball_55_xpm[] = { "55 55 2 1", " c blue", ". c none", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", "....................... .......................", ".................... ....................", ".................. ..................", "................ ................", "............... ...............", ".............. ..............", "............. .............", "............ ............", "........... ...........", ".......... ..........", ".......... ..........", "......... .........", "......... .........", "........ ........", "........ ........", "........ ........", "....... .......", "....... .......", "....... .......", "....... .......", "....... .......", "....... .......", "....... .......", "....... .......", "....... .......", "........ ........", "........ ........", "........ ........", "......... .........", "......... .........", ".......... ..........", ".......... ..........", "........... ...........", "............ ............", "............. .............", ".............. ..............", "............... ...............", "................ ................", ".................. ..................", ".................... ....................", "....................... .......................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", }; static char * grey_ball_55_xpm[]= { "55 55 2 1", " c grey", ". c none", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", "....................... .......................", ".................... ....................", ".................. ..................", "................ ................", "............... ...............", ".............. ..............", "............. .............", "............ ............", "........... ...........", ".......... ..........", ".......... ..........", "......... .........", "......... .........", "........ ........", "........ ........", "........ ........", "....... .......", "....... .......", "....... .......", "....... .......", "....... .......", "....... .......", "....... .......", "....... .......", "....... .......", "........ ........", "........ ........", "........ ........", "......... .........", "......... .........", ".......... ..........", ".......... ..........", "........... ...........", "............ ............", "............. .............", ".............. ..............", "............... ...............", "................ ................", ".................. ..................", ".................... ....................", "....................... .......................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", }; gtkboard/pixmaps/chess.xpm000066400000000000000000001134671153150217100161770ustar00rootroot00000000000000/* XPM */ static char *chess_wk_54_xpm [] = { "54 54 3 1", " c black", "X c white", ". c none", "......................................................", "......................................................", "......................................................", ".......................... ..........................", ".......................... ..........................", ".......................... ..........................", "....................... .......................", "....................... .......................", ".......................... ..........................", ".......................... ..........................", ".......................... ..........................", ".......................... ..........................", ".......................... ..........................", "........................ ........................", "....................... XX .......................", "....................... XXXX .......................", "...................... XXXX ......................", "........... ..... XXXXXX ..... ...........", "......... .. XXXXXX .. .........", "....... XXXXXX XXXXXX XXXXXX .......", "...... XXXXXXXXXXX XXXXXX XXXXXXXXXXX ......", "..... XXXXXXXXXXXXX XXXX XXXXXXXXXXXXX .....", "..... XXXXXXXXXXXXXXX XXXX XXXXXXXXXXXXXXX .....", ".... XXXXXXXXXXXXXXXX XX XXXXXXXXXXXXXXXX ....", ".... XXXXXXXXXXXXXXXXXX XX XXXXXXXXXXXXXXXXXX ....", ".... XXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXX ....", ".... XXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXX ....", ".... XXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXX ....", ".... XXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXX ....", "..... XXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXX .....", "..... XXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXX .....", "...... XXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXX ......", "....... XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX .......", "........ XXXXXXXXX XXXXXXXXX ........", "......... XX XX .........", ".......... XXXXXXXXXXXXXX ..........", "........... XXXXXXXXXXXXXXXXXXXXXXXXXX ...........", "........... XXXXXXXXXXXXXXXXXXXXXXXXXXXX ...........", "........... XXXXXXXX XXXXXXXX ...........", "........... XXX XXX ...........", "........... XXXXXXXXXXXX ...........", "............ XXXXXXXXXXXXXXXXXXXXXX ............", "............ XXXXXXX XXXXXXX ............", "............ XX XX ............", "............ XXXXXXXXXXXX ............", "............ XXXXXXXXXXXXXXXXXXXXXX ............", "............ XXXXXXXXXXXXXXXXXXXXXX ............", ".............. XXXXXXXXXXXX ..............", "................ ................", "..................... .....................", "......................................................", "......................................................", "......................................................", "......................................................", }; static char *chess_wq_54_xpm [] = { "54 54 3 1", " c black ", "X c white ", ". c none", "......................................................", "......................................................", "......................................................", "......................... .........................", "........................ ........................", "............. ...... XX ...... .............", "............ ..... XX ..... ............", "............ XXX ..... XX ..... XXX ............", "............ XXX ..... ..... XXX ............", "... .... XX ...... ...... XX .... ...", ".. ... ........ ........ ... ..", ".. XXX .... ........ ........ .... XXX ..", ".. XXX ...... ....... ....... ...... XXX ..", ".. XX ...... ....... ....... ...... XX ..", ".. ....... ...... ...... ....... ..", "... ....... ...... ...... ....... ...", "..... ....... ..... ..... ....... .....", "...... ...... .... XX .... ...... ......", "...... ...... X .... XX .... X ...... ......", "...... ..... X .... XX .... X ..... ......", "...... .... X ... XX ... X ..... ......", "...... ... XXX ... XX ... XX ... ......", "...... .. XXX .. XX .. XXX .. ......", "....... X .. XXX . XXXX . XXX .. X .......", "....... X . XXXX . XXXX . XXXX . X .......", "....... XX . XXXX XXXX XXXX . XX .......", "....... XX XXXXX XXXX XXXXX XX .......", "....... XXX XXXXX XXXX XXXXX XXX .......", "....... XX XX XX XX XX XX XX XX .......", "........ XXX X X XXX ........", "........ XX ........", "........ XXXXXXXXXXXXXXXXXXXX ........", "........ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ........", "......... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .........", ".......... XXXXXXX XXXXXXX ..........", ".......... X X ..........", "........... XXXXXXXXXXXXXXXX ...........", "............ XXXXXXXXXXXXXXXXXXXXXXXXXX ............", "............ XXXXXXXXXXXXXXXXXXXXXXXXXX ............", "............ XXXXX XXXXX ............", "............ ............", "............ XXXXXXXXXXXXXXXX ............", "............ XXXXXXXXXXXXXXXXXXXXXXXXXX ............", "............ XXXXX XXXXX ............", "........... ...........", "........... XXXXXXXXXXXXXXXX ...........", "........... XXXXXXXXXXXXXXXXXXXXXXXXXXXX ...........", "........... XXXXXXXXXXXXXXXX ...........", "............ ............", "................... ...................", "......................................................", "......................................................", "......................................................", "......................................................", }; static char *chess_wr_54_xpm [] = { "54 54 3 1", " c black", "X c white", ". c none", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", ".......... ..... .... ..........", ".......... ..... .... ..........", ".......... XXXX ..... XXXX .... XXXXX ..........", ".......... XXXX XXXX XXXXX ..........", ".......... XXXX XXXX XXXXX ..........", ".......... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ..........", ".......... ..........", ".......... ..........", "........... XXXXXXXXXXXXXXXXXXXXXXXXXX ...........", "............ XXXXXXXXXXXXXXXXXXXXXX ............", ".............. ..............", "............... ...............", "............... XXXXXXXXXXXXXXXXXXXX ...............", "............... XXXXXXXXXXXXXXXXXXXX ...............", "............... XXXXXXXXXXXXXXXXXXXX ...............", "............... XXXXXXXXXXXXXXXXXXXX ...............", "............... XXXXXXXXXXXXXXXXXXXX ...............", "............... XXXXXXXXXXXXXXXXXXXX ...............", "............... XXXXXXXXXXXXXXXXXXXX ...............", "............... XXXXXXXXXXXXXXXXXXXX ...............", "............... XXXXXXXXXXXXXXXXXXXX ...............", "............... XXXXXXXXXXXXXXXXXXXX ...............", "............... XXXXXXXXXXXXXXXXXXXX ...............", "............... XXXXXXXXXXXXXXXXXXXX ...............", "............... XXXXXXXXXXXXXXXXXXXX ...............", "............... XXXXXXXXXXXXXXXXXXXX ...............", "............... XXXXXXXXXXXXXXXXXXXX ...............", "............... XXXXXXXXXXXXXXXXXXXX ...............", "............... XXXXXXXXXXXXXXXXXXXX ...............", ".............. ..............", "............. .............", "............ XXXXXXXXXXXXXXXXXXXXXXXX ............", "........... ...........", "........... ...........", "........... XXXXXXXXXXXXXXXXXXXXXXXXXXXX ...........", "........... XXXXXXXXXXXXXXXXXXXXXXXXXXXX ...........", "........ ........", "........ ........", "........ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ........", "........ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ........", "........ ........", "........ ........", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", }; static char *chess_wb_54_xpm [] = { "54 54 3 1", " c black", "X c white", ". c none", "......................................................", "......................................................", "......................................................", ".......................... ..........................", "........................ ........................", "....................... XX .......................", "....................... XXXX .......................", "....................... XXXX .......................", "....................... XX .......................", "........................ ........................", "........................ ........................", "...................... XX ......................", "..................... XXXXXX .....................", "................... XXXXXXXX ...................", ".................. XXXXXXXXXXXX ..................", "................. XXXXXXXXXXXXXX .................", "................ XXXXXXXXXXXXXXXX ................", "............... XXXXXXXX XXXXXXXX ...............", "............... XXXXXXXXX XXXXXXXXX ...............", ".............. XXXXXXXXX XXXXXXXXX ..............", ".............. XXXXXXXXXX XXXXXXXXXX ..............", ".............. XXXXXX XXXXXX ..............", ".............. XXXXXX XXXXXX ..............", ".............. XXXXXXXXXX XXXXXXXXXX ..............", ".............. XXXXXXXXXX XXXXXXXXXX ..............", ".............. XXXXXXXXXX XXXXXXXXXX ..............", ".............. XXXXXXXXX XXXXXXXXX ..............", "............... XXXXXXXXXXXXXXXXXXXX ...............", "............... XXXXXXXXXXXXXXXXXX ...............", "................ XXXXXXXXXXXXXXXXXX ................", "................ XX XX ................", "................. .................", ".................. XXXXXXXXXXXX ..................", ".................. XXXXXXXXXXXXXX ..................", "................. XXXXXXXXXXXXXX .................", "................. X X .................", "................ ................", "................ XXXXXXXXXXXXXX ................", "................ XXXXXXXXXXXXXXXXXX ................", "............... XXXXXXXXXXXXXX ...............", "................ ................", ".................... ....................", "...................... XX ......................", "....... XXXXXX .......", "..... XXXXXXXXXX .....", "... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ...", ".... XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX ....", ".... XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX ....", "..... .. .....", "...... ........ ......", "....... ...................................... .......", "......................................................", "......................................................", "......................................................", }; static char *chess_wn_54_xpm [] = { "54 54 3 1", " c black", "X c white", ". c none", "......................................................", "......................................................", "......................................................", "......................................................", ".............. ....... ............................", ".............. ..... ...........................", ".............. .... ..........................", ".............. X .. X ..........................", ".............. X XX . ........................", "............... XX XX .....................", "............... X XX XX ..................", ".............. XXXXXX XXXXX ................", "............. X XXXXXXXXXXXXXXXX ...............", "............ XXXXXXXXXXXXXXXXXXXXX ..............", "............ XXXXXXXXXXXXXXXXXXXXXXX .............", "........... XX XXXXXXXXXXXXXXXXXX ............", "........... XX XXXXXXXXXXXXXXXXXXX ...........", "........... XX XXXXXXXXXXXXXXXXXXXX ...........", "........... XX XXXXXXXXXXXXXXXXXXXXXX ..........", "........... XX XXXXXXXXXXXX XXXXXXXXXX .........", ".......... XXXXXXXXXXXXXXX XXXXXXXXXXX .........", ".......... XXXXXXXXXXXXXXXX XXXXXXXXXXX ........", "......... XXXXXXXXXXXXXXXX XXXXXXXXXXXX ........", "........ XXXXXXXXXXXXXXXX XXXXXXXXXXXX ........", "........ XXXXXXXXXXXXXXXXX XXXXXXXXXXXXXX .......", "....... XXXXXXXXXXXXXXXX XXXXXXXXXXXXX .......", "....... XXXXXXXXXXXXXXXX XXXXXXXXXXXXX .......", "...... XXXXXXXXXXXXXX . XXXXXXXXXXXXXX ......", "...... XXXXXXXXXXXXX ... XXXXXXXXXXXXXX ......", "..... X XXXXXXXX ..... XXXXXXXXXXXXXX ......", "..... X XXXXXXX ...... XXXXXXXXXXXXXX ......", "..... X XXXXXX ....... XXXXXXXXXXXXXXX .....", "..... X XX XX ....... XXXXXXXXXXXXXXXX .....", "..... XXXXX X ....... XXXXXXXXXXXXXXXXX .....", "..... XXX ........ XXXXXXXXXXXXXXXXXX .....", "...... X ........ XXXXXXXXXXXXXXXXXX .....", "........ ....... XXXXXXXXXXXXXXXXXXX .....", "............ ....... XXXXXXXXXXXXXXXXXXXX ....", "..................... XXXXXXXXXXXXXXXXXXXXXX ....", ".................... XXXXXXXXXXXXXXXXXXXXXXX ....", "................... XXXXXXXXXXXXXXXXXXXXXXXX ....", "................... XXXXXXXXXXXXXXXXXXXXXXXXX ....", ".................. XXXXXXXXXXXXXXXXXXXXXXXXX ....", ".................. XXXXXXXXXXXXXXXXXXXXXXXXXX ....", "................. XXXXXXXXXXXXXXXXXXXXXXXXXX ....", "................. XXXXXXXXXXXXXXXXXXXXXXXXXXX ....", "................. XXXXXXXXXXXXXXXXXXXXXXXXXXX ....", "................. ....", "................. .....", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", }; static char *chess_wp_54_xpm [] = { "54 54 3 1", " c black", "X c white", ". c none", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "........................ ........................", "...................... ......................", "..................... XXXXXX .....................", "..................... XXXXXXXX .....................", "..................... XXXXXXXX .....................", "..................... XXXXXXXX .....................", "..................... XXXXXXXX .....................", "..................... XXXXXX .....................", "...................... XXXX ......................", ".................... XXXX ....................", "................... XXXXXXXXXX ...................", ".................. XXXXXXXXXXXX ..................", ".................. XXXXXXXXXXXXXX ..................", "................. XXXXXXXXXXXXXX .................", "................. XXXXXXXXXXXXXXXX .................", "................. XXXXXXXXXXXXXXXX .................", "................. XXXXXXXXXXXXXXXX .................", "................. XXXXXXXXXXXXXXXX .................", "................. XXXXXXXXXXXXXXXX .................", "................. XXXXXXXXXXXXXX .................", ".................. XXXXXXXXXXXXXX ..................", ".................. XXXXXXXXXXXX ..................", "................... XXXXXXXX ...................", "................... XXXXXXXX ...................", "................. XXXXXXXXXXXX .................", "................ XXXXXXXXXXXXXXXX ................", "............... XXXXXXXXXXXXXXXXXX ...............", ".............. XXXXXXXXXXXXXXXXXXXX ..............", ".............. XXXXXXXXXXXXXXXXXXXXXX ..............", "............. XXXXXXXXXXXXXXXXXXXXXX .............", "............. XXXXXXXXXXXXXXXXXXXXXXXX .............", "............ XXXXXXXXXXXXXXXXXXXXXXXX ............", "............ XXXXXXXXXXXXXXXXXXXXXXXXXX ............", "............ XXXXXXXXXXXXXXXXXXXXXXXXXX ............", "........... XXXXXXXXXXXXXXXXXXXXXXXXXX ...........", "........... XXXXXXXXXXXXXXXXXXXXXXXXXXXX ...........", "........... XXXXXXXXXXXXXXXXXXXXXXXXXXXX ...........", "........... XXXXXXXXXXXXXXXXXXXXXXXXXXXX ...........", "........... XXXXXXXXXXXXXXXXXXXXXXXXXXXX ...........", "........... ...........", "........... ...........", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", }; static char *chess_bk_54_xpm [] = { "54 54 3 1", " c black", "X c white", ". c none", "......................................................", "......................................................", "......................................................", ".......................... ..........................", ".......................... ..........................", ".......................... ..........................", "....................... .......................", "....................... .......................", ".......................... ..........................", ".......................... ..........................", ".......................... ..........................", ".......................... ..........................", ".......................... ..........................", "........................ ........................", "....................... XXXX .......................", "....................... XXXXXX .......................", "...................... XX XX ......................", "........... ..... XX XX ..... ...........", "......... .. XX XX .. .........", "....... XXXXXX XX XX XXXXXX .......", "...... XXXXXXXXXX XX XX XXXXXXXXXX ......", "..... XXXX XXXX XXXXXX XXXX XXXX .....", "..... XXX XXX XXXX XXX XXX .....", ".... XXX XXX XX XXX XXX ....", ".... XXX XXX XX XXX XXX ....", ".... XX XX XX XX ....", ".... XX XXX XXX XX ....", ".... XXX XX XX XXX ....", ".... XXX XXX XXX XXX ....", "..... XXX XXX XXX XXX .....", "..... XXX XX XX XXX .....", "...... XXX XX XX XXX ......", "....... XXX XX XX XXX .......", "........ XXX XXXXXXXXXXXXXXXX XXX ........", "......... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .........", ".......... XXXXXXX XXXXXXX ..........", "........... ...........", "............ ............", "............ XXXXXXXXXXXXXX ............", "............ XXXXXXXXXXXXXXXXXXXXXX ............", "............ XXXXXX XXXXXX ............", "............ X X ............", "............ XXXXXXXXXXXXXX ............", "............ XXXXXXXXXXXXXXXXXXXXXX ............", "............ XXXXXXX XXXXXXX ............", "............ XX XX ............", "............ ............", ".............. ..............", "................. .................", "..................... .....................", "......................................................", "......................................................", "......................................................", "......................................................", }; static char *chess_bq_54_xpm [] = { "54 54 3 1", " c black", "X c white", ". c none", "......................................................", "......................................................", "......................................................", ".......................... ..........................", "........................ ........................", "............. ..... ..... .............", "............ .... .... ............", "............ .... .... ............", "............ ..... ..... ............", "... .... ...... ...... .... ...", ".. ... ....... ....... ... ..", ".. .... ....... ....... .... ..", ".. ...... ....... ....... ...... ..", ".. ...... ....... ....... ...... ..", ".. ....... ...... ...... ....... ..", "... ....... ...... ...... ....... ...", "..... ....... ..... ..... ....... .....", "..... ...... .... .... ...... .....", "...... ..... .... .... ..... ......", "...... .... .... .... .... ......", "...... ... ... ... ... ......", "...... ... .. .. ... ......", "...... .. . . .. ......", "....... .. . . .. .......", "....... . . . . .......", "....... . . .......", "....... .......", "....... .......", "....... .......", "........ ........", "........ ........", "........ ........", "........ ........", "......... .........", ".......... XXXXXXXXXXXXXXXX ..........", ".......... XXXXXXXXXXXXXXXXXXXXXXXXXX ..........", "........... XXXXXXX XXXXXXX ...........", "........... ...........", "............ ............", "............ XXXXXXXXXXXXXXXX ............", "............ XXXXXXXXXXXXXXXXXXXXXXXX ............", "............ XXXXXX XXXXXX ............", "........... ...........", "........... ...........", ".......... ..........", ".......... ..........", ".......... ..........", ".......... ..........", "........... ...........", ".................. ..................", "......................................................", "......................................................", "......................................................", "......................................................", }; static char *chess_br_54_xpm [] = { "54 54 3 1", " c black", "X c white", ". c none", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", ".......... ..... .... ..........", ".......... ..... .... ..........", ".......... ..... .... ..........", ".......... ..........", ".......... ..........", ".......... ..........", ".......... XXXXXXXXXXXXXXXXXXXXXXXXXXXX ..........", ".......... XXXXXXXXXXXXXXXXXXXXXXXXXXXX ..........", "........... ...........", "............ ............", ".............. XXXXXXXXXXXXXXXXXXXX ..............", "............... XXXXXXXXXXXXXXXXXXXX ...............", "............... ...............", "............... ...............", "............... ...............", "............... ...............", "............... ...............", "............... ...............", "............... ...............", "............... ...............", "............... ...............", "............... ...............", "............... ...............", "............... ...............", "............... ...............", "............... ...............", "............... ...............", "............... ...............", "............... ...............", ".............. XXXXXXXXXXXXXXXXXXXX ..............", "............. XXXXXXXXXXXXXXXXXXXX .............", "........... ...........", "........... XXXXXXXXXXXXXXXXXXXXXXXXXX ...........", "........... XXXXXXXXXXXXXXXXXXXXXXXXXX ...........", "........... ...........", "........... ...........", "........ XXXXXXXXXXXXXXXXXXXXXXXXXXXX ........", "........ XXXXXXXXXXXXXXXXXXXXXXXXXXXX ........", "........ ........", "........ ........", "........ ........", "........ ........", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", }; static char *chess_bb_54_xpm [] = { "54 54 3 1", " c black", "X c white", ". c none", "......................................................", "......................................................", "......................................................", ".......................... ..........................", "........................ ........................", "....................... .......................", "....................... .......................", "....................... .......................", "....................... .......................", "........................ ........................", "........................ ........................", "...................... ......................", "..................... .....................", "................... ...................", ".................. ..................", "................. .................", "................ ................", "............... XX ...............", "............... XX ...............", ".............. XX ..............", ".............. XX ..............", ".............. XXXXXXXXXX ..............", ".............. XXXXXXXXXX ..............", ".............. XX ..............", ".............. XX ..............", ".............. XX ..............", ".............. XX ..............", "............... ...............", "............... ...............", "............... ...............", "................ XXXXXXXXXX ................", "................. XXXXXXXXXXXXXX .................", ".................. XXX XXX ..................", "................. .................", "................. .................", "................. XXXXXXXXXXXXXX .................", "................ XXXXXXXXXXXXXXXX ................", "................ ................", "................ ................", "............... ...............", "................ ................", ".................... ....................", "....................... .......................", "....... . . .......", "..... .....", ".... ....", "..... .....", "..... .. .....", "...... .... ......", "....... ....... ........ ....... .......", "......................................................", "......................................................", "......................................................", "......................................................", }; static char *chess_bn_54_xpm [] = { "54 54 3 1", " c black", "X c white", ". c none", "......................................................", "......................................................", "......................................................", "......................................................", ".............. ....... ............................", ".............. ..... ...........................", ".............. ... ..........................", ".............. .. ..........................", ".............. .........................", "............... .....................", "............... X ..................", ".............. XXXX XXXX ................", "............. XXXXX XXXXX ...............", "............ X XXXX ..............", "............ XXXX .............", "........... XXXX XXXX ............", "........... XXXX XXXX ............", "........... XXXX XXXX ...........", "........... XXX XXX ..........", "........... X XXXX ..........", ".......... XXXX .........", ".......... XXXX .........", "......... X XXXX .........", "........ XX XXXX ........", "........ X XXXX ........", "....... XXXX ........", "....... XXXX .......", "...... . XXXX .......", "...... ... XXXX .......", "..... XX ..... XXXX .......", "..... XXX ..... XXXX ......", "..... XXX ....... XXXX ......", "..... XX ....... XXXX ......", "..... XX ........ XXXX ......", "..... XX ........ XXXX ......", "...... X ........ XXXX ......", "........ ....... XXXXX ......", "............ ....... XXXX .....", "..................... XXXX .....", ".................... XXXX .....", ".................... XXXX .....", "................... XXXX .....", ".................. XXXX .....", ".................. XXXX .....", "................. XXXX .....", "................. XXXX .....", "................. XX .....", "................. .....", "................. .....", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", }; static char *chess_bp_54_xpm [] = { "54 54 3 1", " c black", "X c white", ". c none", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "........................ ........................", "...................... ......................", "..................... .....................", "..................... .....................", "..................... .....................", "..................... .....................", "..................... .....................", "..................... .....................", "...................... ......................", ".................... ....................", "................... ...................", ".................. ..................", ".................. ..................", "................. .................", "................. .................", "................. .................", "................. .................", "................. .................", "................. .................", "................. .................", ".................. ..................", ".................. ..................", "................... ...................", "................... ...................", "................. .................", "................ ................", "............... ...............", ".............. ..............", ".............. ..............", "............. .............", "............. .............", "............ ............", "............ ............", "............ ............", "........... ...........", "........... ...........", "........... ...........", "........... ...........", "........... ...........", "........... ...........", "........... ...........", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", }; gtkboard/pixmaps/cpento.xpm000066400000000000000000000552421153150217100163560ustar00rootroot00000000000000/*XPM*/ static char *cpento_leg_r_36_36_xpm[] = { "36 36 3 1", ". c #006400", "x c #407240", "X c #808080", "....................................", "....................................", "....................................", "...xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "....................................", "....................................", "....................................", }; static char *cpento_leg_l_36_36_xpm[] = { "36 36 3 1", ". c #006400", "x c #407240", "X c #808080", "....................................", "....................................", "....................................", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...", "....................................", "....................................", "....................................", }; static char *cpento_leg_u_36_36_xpm[] = { "36 36 3 1", ". c #006400", "x c #407240", "X c #808080", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...", "....................................", "....................................", "....................................", }; static char *cpento_leg_d_36_36_xpm[] = { "36 36 3 1", ". c #006400", "x c #407240", "X c #808080", "....................................", "....................................", "....................................", "...xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", }; static char *cpento_pipe_ud_36_36_xpm[] = { "36 36 3 1", ". c #006400", "x c #407240", "X c #808080", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", }; static char *cpento_pipe_lr_36_36_xpm[] = { "36 36 3 1", ". c #006400", "x c #407240", "X c #808080", "....................................", "....................................", "....................................", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "....................................", "....................................", "....................................", }; static char *cpento_bend_ur_36_36_xpm[] = { "36 36 3 1", ". c #006400", "x c #407240", "X c #808080", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXxxxx", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "....................................", "....................................", "....................................", }; static char *cpento_bend_ul_36_36_xpm[] = { "36 36 3 1", ". c #006400", "x c #407240", "X c #808080", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "xxxxXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...", "....................................", "....................................", "....................................", }; static char *cpento_bend_dl_36_36_xpm[] = { "36 36 3 1", ". c #006400", "x c #407240", "X c #808080", "....................................", "....................................", "....................................", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "xxxxXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", }; static char *cpento_bend_dr_36_36_xpm[] = { "36 36 3 1", ". c #006400", "x c #407240", "X c #808080", "....................................", "....................................", "....................................", "...xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXxxxx", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", }; static char *cpento_t_closed_u_36_36_xpm[] = { "36 36 3 1", ". c #006400", "x c #407240", "X c #808080", "....................................", "....................................", "....................................", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "xxxxXXXXXXXXXXXXXXXXXXXXXXXXXXXXxxxx", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", }; static char *cpento_t_closed_l_36_36_xpm[] = { "36 36 3 1", ". c #006400", "x c #407240", "X c #808080", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXxxxx", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXxxxx", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", }; static char *cpento_t_closed_r_36_36_xpm[] = { "36 36 3 1", ". c #006400", "x c #407240", "X c #808080", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "xxxxXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "xxxxXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", }; static char *cpento_t_closed_d_36_36_xpm[] = { "36 36 3 1", ". c #006400", "x c #407240", "X c #808080", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "xxxxXXXXXXXXXXXXXXXXXXXXXXXXXXXXxxxx", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "....................................", "....................................", "....................................", }; static char *cpento_fourway_36_36_xpm[] = { "36 36 3 1", ". c #006400", "x c #407240", "X c #808080", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "xxxxXXXXXXXXXXXXXXXXXXXXXXXXXXXXxxxx", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "xxxxXXXXXXXXXXXXXXXXXXXXXXXXXXXXxxxx", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", "...xXXXXXXXXXXXXXXXXXXXXXXXXXXXXx...", }; gtkboard/pixmaps/gtkboard.png000066400000000000000000000107001153150217100166310ustar00rootroot00000000000000‰PNG  IHDR20S÷)ºbKGDÿÿÿ ½§“ pHYs  ’ù¥tIMEÓ 47bMIDATxœí™YŒd×yßg»[UuWï=Ó=Ó³’î›L+&É à lx#ðK€<Æ~ç%6ldœ‡AÀò&È„„$+‚bJ²¤Ar(r¦gzï®êê®®åÞ{6?T7=Î ¥ÀH^ôçÞÚîÿÎù¾ïÿ}?µŸÚOíQ&Î.¶þ÷W¿`4]7u„NîÈFÑñ‚;h}\VU§::¶_ùÖwüïüÁ¿‹ÿ??Ì> ²ù/¿B¼žO5(}LšµF¥™J}YaÌVˆìçïDëvÂh´išé¶ì:ÃA}òæë¯»_ûÜ¿ ÿ¯‰è³‹|iiÃG×]]¢-êÁ€ÆÈÌ¡thSÛK£þ :MÐI‚0 •$!¢Ò±lêt,Üpë÷~þF÷Ÿýḃuª(î†4Ý•Foï7«Á°{XŽ«ïÿàMóG·âÿÉŸýݱ1l‰"A·–Xäø²Z+‚ ØqÅI§‡i/Ìc… ŽIòL¨4Í­µùâ¹ó³¾ê38ê3½0«K¤÷eH%ɲÌ-åùî/úçù•Ÿ]ÿÝü›»º™nÉȆrÿøèøöçþý|ûK_ýúOt„? âªzKJAT|DúEÒŠh=ÖZ¢Vè,£Ð!`Š.Iu{#I æ/]E*C·w@kv’Œqÿ„£“ÈÛ½”Ý´wau: ««íðÌ•)Ët‘…ÀE4&üÃO¿ò3_úê×ß*ÀÿDDêà7ŒÔÈ4…4'õ`8Â7 ´’h­(K‹Ê fWWY†Ñ iKÌTŽÐëi£ÉâÒ½uÖ>ñ8Ë_÷[üÕvR¡¤d0,Ù*6Ê„ïî¤<–ux|¦¢=×Fg™<©ëßþ+pèý8d> ¢”ÜR@ŒH‘­)d]¤$*‰)‰H$ÁÕ ö¶ñssˆ4#IrL£ ‰‘ÆâïÞ|Ÿ~)a»ßÝRD!±• FÐF`­#hÍ›ãeÖû¼x²Å•«kä⧆ÀøÇ&ËrK& QJ@â¼Côœ# .`«šñ`@6;GãÜ9L’‰ %Zj¢³Ì_¸ÌÆ7¿†'r³«©­Gk÷b¤ª¶–4›ÖzœõŒã4±YÒm.^X]“BÜ1¾ ¬%ðHŸ‘AlñÔŽ0® µÅÖ碶‘Îb»Tˆ41EЊ`B „ˆ<óË«ôº]Æý#zC‡R¥Ib!žîˆšDD&éF4Õ(J!¢ ª²Ædx¨«>´1­‘E´"*™%Ä1¶àÜê*'Ç’å%¤T¬Î̶w9wtÄßý:wöKºµ$ú’Ag“Pñì'.ó©Ÿãú¥5ôp žÿĵÕ×Þxk h]à%‡ˆ¼ý¯l»r“¢)d’¢ úˆN’Ì ¤"Ø€„N‰> B o Bt’œ£Õj²»y›“udš]Ä๺²Èr»ÅÆÝ ö»†U‚[Ze¶ý×VYYZbzª…O4Ÿyù¥å×Þxk˜6û±D^ýò—»3ÍlœQ88)=Æ(\á>FŒ’4L$xÏÀJ¤"ŠHˆªH¦Áz;>ÿoÿåĹ%‰ >}OJ‰$b'3›(ÖÝD &ZCädæÌÇINIyˆ\ù}ýïû·~½ç}(šó3Ôƒ¼·D¤¨Ä`CÖÖTÃ1Òh„€è=&O €ˆ‘²¬ènmòÅ?ûO|æ}–Ï>K9ÿƒ½Ô ™È• †?Dä?ÿ…ø{ÿüw¶Ãp¼RWc’©6¶cC¬RÜ<0Ü=TŒ½BP@i˜M*Ö%SI@‹“$èaŒ&1ÓHÍ[‡Ž¥tÌڸâêÓ,2²fƒ´=Mkq•õ»|ª(¨F#hÜ9<äþ×7øÎö"Æ4—‹°”çüêò*¿vé2³3móó¼òò'—þüÕ¯-2‘+wúc‰8ï7…ˆD%ð!ð•·áV¿ ÆH’hBˆdyBšF£ ëIªÙ) ºö"çÃûBD ±ðþ~$ 'QÅL¢É2ƒ6Š Í ij¨+‡Rc4ZIB¤ìÇ |ïõ7 2#Ï [•cvŽð! µBHIŒqÒx°ç=R „!!ðíÁ1ÿãµosmí“<î“+!âÇãMi-›B€1Šf#ÁhEm=F+k-Î{ZÍ%(Š”™™çªµÂ{ìt{ÄÆïÝüÕpˆV)Ää„û€œ›,„”|!cDĈ4š×:{äY6­µ~¨¬ÿ‘ã@T! ò"¥*-ýþ©$ibÈò‰¸3Z‘ÃI¿1é}9çq> ¥Ä˜„£ºÁúÆÓ Ëô¶Öië„\+Ô©OpÊ9QÃ2ÆÉ}”1Y =Ý®¾xþÜy&~ÒºûGˆÜÞØØr|,]EU:¬õLO!Í4uå)òçUm1‰&øòŒF5uí)KËññ⤶˜8½¢®<ÎŽFu·B2»¸D#ÓôGüâ“OñÊÅKH¥1âœ#Æ8‘ôút‘ƒÇ»#QJòÊ¡ŒæÙgžj5ò|ñtWŠ%bŒÚZ^]äÚ¬£*-Ú(ªÊᬣ< Áî4;&QÍ(ª²ÂZ‡­-‚šáá:Ífƒ¹¥%Šö»›wHµä_<ù‹RCø î‰1â9Óè¡ô$zS=Úí)Væä‹ÏÜ8ó“)îé®m’3ñ¥Ô$ä2Dæ÷{\Ù9äÆã×yîÙ'™n7yùÙ'æ…sLü$;;^,èEŒ[¡® ''´¨x1Ýæ~‡^v…F3£È ''åD¥“¬ŒDkÉλ¯±þƒ/rqíyhŸhã[ÿý-c²Q›8ãþþžïWÞïwí~ïÐîíwëím»sЭ÷:]{Ð=¬£q]V• !ºûº{Ö<àÙß7Ÿêžï £ÓÏ„‡vïNêêw¿ô¥ÿ¹ö_¾øåîld’=/2©âÞ¿zg Ã=ãC+÷€ùïÄÙªg"’Óù нÿ¯Vï§öûÇäEœ›WIEND®B`‚gtkboard/pixmaps/logo48.xpm000066400000000000000000000510471153150217100162010ustar00rootroot00000000000000/* XPM */ static char * logo48_xpm[] = { "48 48 1011 2", " c None", ". c #E5C5BB", "+ c #EAC9BC", "@ c #E4BFB5", "# c #E1BDB3", "$ c #EBCCBF", "% c #E3BFB1", "& c #E8C7B9", "* c #E7CBBD", "= c #EAD2C5", "- c #EBD5C7", "; c #E9CDBF", "> c #E9D2C4", ", c #E7D3C5", "' c #E5CEC2", ") c #EDD7CC", "! c #EACCC2", "~ c #E6C5BA", "{ c #E7CBBE", "] c #E2C0B3", "^ c #E1BDB0", "/ c #E3C4B7", "( c #E4C8BC", "_ c #E6C9BD", ": c #DBBBAF", "< c #DDC0B3", "[ c #E2C7BA", "} c #E1C2B5", "| c #E9CEBF", "1 c #EAD2C1", "2 c #EACFC0", "3 c #E9CFC1", "4 c #CAA99B", "5 c #6E371C", "6 c #D1AC9D", "7 c #E7C1B3", "8 c #E9D7CB", "9 c #EAD6C9", "0 c #E9CBC0", "a c #E4C5B9", "b c #E1C9BC", "c c #DDC0B4", "d c #E1C4B8", "e c #E5CCBF", "f c #E3C8BD", "g c #DFC0B5", "h c #CFA79E", "i c #CC9E94", "j c #D9ACA3", "k c #D6B0A6", "l c #DAB7AD", "m c #E1C2B6", "n c #E3C8BB", "o c #DFC5B9", "p c #D8BAAE", "q c #7A4021", "r c #BD9181", "s c #EACBBF", "t c #E4C1B3", "u c #E7C6B8", "v c #E9CDC0", "w c #EAD3C5", "x c #E8CDC0", "y c #E7D1C3", "z c #E4CDC0", "A c #E4CCBF", "B c #E3C2B6", "C c #E6D0C6", "D c #E6D1C5", "E c #E5CDC1", "F c #E5C6B9", "G c #E3C7BA", "H c #E1CBBE", "I c #E3CFC1", "J c #E5CBBF", "K c #DEC3B8", "L c #DEC4B8", "M c #D3B1A7", "N c #C09089", "O c #CDA89F", "P c #D5B7AF", "Q c #D5BFB6", "R c #D0AFA8", "S c #D4B2A8", "T c #DABBB1", "U c #E0C9BF", "V c #88553A", "W c #AB806B", "X c #E7C6BB", "Y c #E6CABE", "Z c #E0BEB1", "` c #DABCB4", " . c #B6B0BD", ".. c #9AA2BF", "+. c #8E9ABD", "@. c #9AA0BC", "#. c #AFAABA", "$. c #D0B7B2", "%. c #E5CABC", "&. c #E7CEBF", "*. c #E8CFC0", "=. c #DEC3B7", "-. c #E3C4B9", ";. c #E2D1C5", ">. c #E5D4C7", ",. c #E5D4C9", "'. c #E3C5BA", "). c #E0C0B4", "!. c #E3C7BB", "~. c #DBBFB4", "{. c #D4B5AD", "]. c #D1ADA5", "^. c #CFB3AA", "/. c #DABDB4", "(. c #DDBAB0", "_. c #DCBDB1", ":. c #DCBEB3", "<. c #D8BCB1", "[. c #DBC4BA", "}. c #A4765B", "|. c #9A684A", "1. c #E8D0C4", "2. c #E4C4B8", "3. c #CEBEBC", "4. c #8395BE", "5. c #7C96C6", "6. c #7C95C6", "7. c #768FC1", "8. c #748DC0", "9. c #7991C3", "0. c #7C93C2", "a. c #9C9DB4", "b. c #C3A7A2", "c. c #DCBFB4", "d. c #DDC2B8", "e. c #E6CDC2", "f. c #E4D3C6", "g. c #E5D3C7", "h. c #E7D5C9", "i. c #E6D1C8", "j. c #E9CABF", "k. c #E7CEC2", "l. c #E5D1C4", "m. c #E6CEC2", "n. c #E2CBBE", "o. c #DBC0B5", "p. c #DCB7AD", "q. c #CE9F94", "r. c #D7B0A5", "s. c #DAB7AB", "t. c #DFBDB3", "u. c #E5CABF", "v. c #E4CFC3", "w. c #E1CDC3", "x. c #B28D7A", "y. c #73432A", "z. c #E3CEC2", "A. c #E1CBC0", "B. c #8695BD", "C. c #748EC1", "D. c #758FC2", "E. c #728BBF", "F. c #7790C2", "G. c #738DC0", "H. c #7690C2", "I. c #7F92BB", "J. c #A89799", "K. c #D2B8AE", "L. c #E4D0C5", "M. c #E5CFC2", "N. c #E7D4C5", "O. c #E4CFC2", "P. c #E6D0C4", "Q. c #E8CCBD", "R. c #E7CDC1", "S. c #E2C6BB", "T. c #D8BAB0", "U. c #D3ACA2", "V. c #D2A99F", "W. c #E0C4B8", "X. c #E7D1C5", "Y. c #E7D0C5", "Z. c #E5D2C6", "`. c #E8D4CA", " + c #E3D2C6", ".+ c #C7AC9C", "++ c #6D371D", "@+ c #D3BEAF", "#+ c #C7C1C6", "$+ c #708ABE", "%+ c #7791C2", "&+ c #728BBE", "*+ c #6B85BA", "=+ c #6B84BB", "-+ c #738DBF", ";+ c #7891C3", ">+ c #718ABE", ",+ c #6E83B4", "'+ c #A09597", ")+ c #D6C6BB", "!+ c #E5CBC0", "~+ c #E1C9BD", "{+ c #E2CABF", "]+ c #E5C9BD", "^+ c #EAC8BA", "/+ c #ECCBC1", "(+ c #D3A89E", "_+ c #CE9F96", ":+ c #E1C2B7", "<+ c #E6D4C8", "[+ c #E9D6CA", "}+ c #E6CDC1", "|+ c #E7D3C6", "1+ c #EAD6CA", "2+ c #D8C0B4", "3+ c #6B3820", "4+ c #BB9E8E", "5+ c #B5B5C3", "6+ c #7A93C3", "7+ c #7B94C5", "8+ c #6F89BC", "9+ c #7089BE", "0+ c #758FC1", "a+ c #748EC0", "b+ c #718ABD", "c+ c #6983B9", "d+ c #7184AC", "e+ c #A2958E", "f+ c #D7C5B9", "g+ c #E3C6BB", "h+ c #E4C9BC", "i+ c #E2CFC5", "j+ c #E3CEC4", "k+ c #D6ABA0", "l+ c #D9AA9D", "m+ c #E0BAAD", "n+ c #E4C5BA", "o+ c #E0BEB4", "p+ c #DEBEB3", "q+ c #E9D1C5", "r+ c #EED8CE", "s+ c #EAD4C7", "t+ c #EAD4C6", "u+ c #EDD8CA", "v+ c #EBD7CA", "w+ c #E6D1C6", "x+ c #865034", "y+ c #A97F69", "z+ c #B9B2BD", "A+ c #748BBF", "B+ c #7993C4", "C+ c #7B94C4", "D+ c #7992C3", "E+ c #738CBF", "F+ c #6F88BC", "G+ c #717484", "H+ c #B3A19A", "I+ c #DEC1B7", "J+ c #E2BFB3", "K+ c #E2BEB4", "L+ c #DEB9B0", "M+ c #D2A599", "N+ c #E1BCAE", "O+ c #E3BDB1", "P+ c #E7C4B7", "Q+ c #E1BCAF", "R+ c #E7CBBF", "S+ c #E7D2C6", "T+ c #E3C3B9", "U+ c #E4C2B6", "V+ c #EDD3C8", "W+ c #ECD7C9", "X+ c #ECD9CB", "Y+ c #EBD7C9", "Z+ c #E8D1C4", "`+ c #9A6C53", " @ c #916047", ".@ c #D0BEBB", "+@ c #748DBF", "@@ c #768EC1", "#@ c #7993C3", "$@ c #7891C2", "%@ c #758EC1", "&@ c #778FC2", "*@ c #7C95C5", "=@ c #7690C1", "-@ c #718BBE", ";@ c #6A7BA2", ">@ c #847771", ",@ c #DCB6A9", "'@ c #E7C9BB", ")@ c #E7D2C7", "!@ c #E0C4BA", "~@ c #D9B7AC", "{@ c #E4D0C4", "]@ c #E4CCC2", "^@ c #E4C7BC", "/@ c #E5C5B9", "(@ c #E3C4B8", "_@ c #E7CFC1", ":@ c #E8D4C8", "<@ c #E7CCC1", "[@ c #E4BFB3", "}@ c #ECCEC1", "|@ c #ECD1C5", "1@ c #EACEC1", "2@ c #E7C9BC", "3@ c #E3C3B7", "4@ c #B4846D", "5@ c #854A29", "6@ c #E0BEB2", "7@ c #929BBC", "8@ c #758EC0", "9@ c #7A93C4", "0@ c #748BB9", "a@ c #605753", "b@ c #E9D2C8", "c@ c #EAD5C9", "d@ c #E2BEB2", "e@ c #E7CEC1", "f@ c #DDBCAE", "g@ c #DEBFB3", "h@ c #D7B2A8", "i@ c #DAB0A7", "j@ c #E0BDB2", "k@ c #E3BFB3", "l@ c #E0B9AD", "m@ c #DEB8AC", "n@ c #E0BAAF", "o@ c #E2C0B4", "p@ c #E7CABC", "q@ c #E5C1B7", "r@ c #C39886", "s@ c #6F391C", "t@ c #D7B9AA", "u@ c #C8BDBF", "v@ c #738ABC", "w@ c #7D96C6", "x@ c #748DC1", "y@ c #738CC0", "z@ c #6E85B6", "A@ c #4F4442", "B@ c #9F857D", "C@ c #EAD0C4", "D@ c #EBD2C6", "E@ c #E8CFC2", "F@ c #DEB7AB", "G@ c #E2B4A6", "H@ c #DBB1A5", "I@ c #DCB1A3", "J@ c #D9B0A4", "K@ c #DDB9AF", "L@ c #DFBAAE", "M@ c #E2BCAF", "N@ c #E0BAAC", "O@ c #E0C8BA", "P@ c #DFCABD", "Q@ c #E5CFC3", "R@ c #E6C9BC", "S@ c #DDB9AB", "T@ c #713A1D", "U@ c #BFA292", "V@ c #E6CFC3", "W@ c #A79AA5", "X@ c #758EBF", "Y@ c #6D87BB", "Z@ c #6C85BB", "`@ c #6F89BD", " # c #6A84B9", ".# c #62749C", "+# c #4D413E", "@# c #AA8D83", "## c #DEB9AB", "$# c #DCB2A5", "%# c #DFB2A5", "&# c #DEB2A4", "*# c #DDB4A9", "=# c #E0C2B6", "-# c #E7CABF", ";# c #E8C9BD", "># c #E8C9BC", ",# c #E3BFB2", "'# c #E1BFB2", ")# c #E0BBAE", "!# c #DBB3A8", "~# c #DAB3A7", "{# c #E2C3B5", "]# c #E7CEBE", "^# c #E5C4B5", "/# c #7A462E", "(# c #A67F6C", "_# c #E7CABE", ":# c #D2A79A", "<# c #A9969D", "[# c #8095C1", "}# c #718BBF", "|# c #6E88BC", "1# c #6C85BA", "2# c #494D5C", "3# c #5F534D", "4# c #BCA297", "5# c #E7BFB1", "6# c #E8C5B8", "7# c #E9C7BB", "8# c #E7C7BA", "9# c #DDB8AD", "0# c #DAB5AB", "a# c #E2C7BB", "b# c #EAD4C5", "c# c #ECD5C7", "d# c #E9D2C5", "e# c #ECD1C6", "f# c #E1B8AB", "g# c #E3BBB0", "h# c #E8C4B8", "i# c #E4C3B7", "j# c #E5C2B6", "k# c #E7C5B9", "l# c #E4BCB1", "m# c #8E5A44", "n# c #8C5A43", "o# c #DEB5A8", "p# c #E2B9AD", "q# c #D4ACA0", "r# c #A48B8A", "s# c #7F88A5", "t# c #7991C0", "u# c #738BBF", "v# c #758CBB", "w# c #575B6D", "x# c #453A36", "y# c #88776E", "z# c #CFB1A5", "A# c #E7C8BA", "B# c #EBD5C8", "C# c #EBD5C9", "D# c #E8CDC1", "E# c #DFC1B5", "F# c #E6CBBE", "G# c #E6CFC1", "H# c #E8D3C5", "I# c #E5C7BB", "J# c #E6C8BC", "K# c #E8CBBD", "L# c #EACEBF", "M# c #EACFC1", "N# c #EAD0C2", "O# c #E5C2B5", "P# c #AA7760", "Q# c #81482B", "R# c #E6CABC", "S# c #EAD0C3", "T# c #E9D0C4", "U# c #D6B7AC", "V# c #BAA49A", "W# c #8D8380", "X# c #70717F", "Y# c #616A83", "Z# c #5E6881", "`# c #5F6272", " $ c #494346", ".$ c #554A46", "+$ c #83736D", "@$ c #C1A89E", "#$ c #DCB4A8", "$$ c #DBAFA0", "%$ c #C09075", "&$ c #C69C83", "*$ c #C9A38B", "=$ c #C79E89", "-$ c #CBA28E", ";$ c #D0AB94", ">$ c #D3AF99", ",$ c #D2AA97", "'$ c #CCA591", ")$ c #D1AB95", "!$ c #D4B09D", "~$ c #D4AF9D", "{$ c #D1A997", "]$ c #DBB6A2", "^$ c #DBBAA5", "/$ c #DBBBA7", "($ c #E0C2B0", "_$ c #E1C0B0", ":$ c #BA8E78", "<$ c #753B1C", "[$ c #D8B7A6", "}$ c #E7CFBF", "|$ c #E7CCBD", "1$ c #E2C9BC", "2$ c #D7C2B5", "3$ c #B8A197", "4$ c #99857A", "5$ c #88776F", "6$ c #82716A", "7$ c #8A756D", "8$ c #A79387", "9$ c #C9B2A4", "0$ c #E3C9BB", "a$ c #E7C8BB", "b$ c #E5C0B3", "c$ c #80411C", "d$ c #87441C", "e$ c #84421C", "f$ c #783C1D", "g$ c #7B3E1D", "h$ c #783E1D", "i$ c #7C3E1C", "j$ c #793C1B", "k$ c #7C3E1B", "l$ c #87431B", "m$ c #88441B", "n$ c #7B3E1C", "o$ c #7B3F1D", "p$ c #7F3F1B", "q$ c #7D3E1B", "r$ c #81411D", "s$ c #89451C", "t$ c #7D401F", "u$ c #7D401C", "v$ c #81421E", "w$ c #864621", "x$ c #854623", "y$ c #8D4A23", "z$ c #904E26", "A$ c #854B2A", "B$ c #854B28", "C$ c #864B29", "D$ c #854A28", "E$ c #824828", "F$ c #8D4F2B", "G$ c #8E5432", "H$ c #8E5635", "I$ c #945C3B", "J$ c #9C603D", "K$ c #995D3C", "L$ c #D2A99C", "M$ c #D0A89C", "N$ c #DAB8A9", "O$ c #D2AB9A", "P$ c #CFAB9A", "Q$ c #CEAC9E", "R$ c #D2B1A2", "S$ c #CEB09F", "T$ c #CFAE9D", "U$ c #CAAB99", "V$ c #C6A292", "W$ c #C6A594", "X$ c #C4A493", "Y$ c #C19E8E", "Z$ c #C8A793", "`$ c #C7A894", " % c #C7A692", ".% c #C3A28E", "+% c #BB9886", "@% c #774226", "#% c #895B47", "$% c #C19989", "%% c #BD937F", "&% c #BF947F", "*% c #BE9480", "=% c #BD9683", "-% c #BB9682", ";% c #B69280", ">% c #B48E7B", ",% c #B48D79", "'% c #B68F78", ")% c #B48A75", "!% c #B68F79", "~% c #B18C77", "{% c #B08A75", "]% c #AB846E", "^% c #C29A88", "/% c #ECD2C8", "(% c #EAC8BF", "_% c #E9CCC0", ":% c #E4C4B7", "<% c #E1C1B4", "[% c #CFBDBB", "}% c #B1ACBB", "|% c #A5A7BE", "1% c #A6A8BE", "2% c #9F99AF", "3% c #AF9EA8", "4% c #CDABA6", "5% c #D4AEA4", "6% c #DDBBB1", "7% c #E2C2B7", "8% c #E2C6BA", "9% c #DFC4B8", "0% c #DDC2B7", "a% c #905F46", "b% c #91604A", "c% c #E4C2B8", "d% c #E3C2B5", "e% c #E3C5B8", "f% c #DBC3B7", "g% c #ACACA0", "h% c #8D9A8D", "i% c #899286", "j% c #AAA094", "k% c #D1AEA3", "l% c #DFBEB3", "m% c #E1C7BB", "n% c #DDC1B7", "o% c #ECD8CD", "p% c #ECD5C9", "q% c #EAC9BF", "r% c #E6C6BB", "s% c #E3CABD", "t% c #C4B3B5", "u% c #949FC0", "v% c #7890C2", "w% c #829AC9", "x% c #7C92C0", "y% c #999DB6", "z% c #B3A1A1", "A% c #C6A49D", "B% c #D2AFA6", "C% c #D9B9AF", "D% c #E0C8BE", "E% c #A27B69", "F% c #74442E", "G% c #E8CDC2", "H% c #DCC0B3", "I% c #91A093", "J% c #267364", "K% c #0C6555", "L% c #0D6657", "M% c #0E6253", "N% c #0B6556", "O% c #226C5E", "P% c #688479", "Q% c #BB9E97", "R% c #D3B2A8", "S% c #DEC4BA", "T% c #E5D0C5", "U% c #E8D6CA", "V% c #E8D6C8", "W% c #E8CFC3", "X% c #B5AFBD", "Y% c #7A92C1", "Z% c #7893C4", "`% c #7E97C6", " & c #7D97C6", ".& c #768FC2", "+& c #7A94C4", "@& c #8198C4", "#& c #9A95A4", "$& c #C4AAA1", "%& c #D2B6AB", "&& c #D7BEB4", "*& c #B99988", "=& c #70391D", "-& c #D8C0B0", ";& c #E4C7BA", ">& c #E5C7B9", ",& c #7F9B8D", "'& c #0C6556", ")& c #0B6455", "!& c #0D6556", "~& c #0A6354", "{& c #296F61", "]& c #9E988E", "^& c #CEB5AB", "/& c #E0CEC3", "(& c #E5CFC4", "_& c #C2B8BF", ":& c #7990C1", "<& c #7F98C7", "[& c #7C94C5", "}& c #738CBE", "|& c #878599", "1& c #C0ADA3", "2& c #DCC9BF", "3& c #CEB5A8", "4& c #763B1C", "5& c #C1A190", "6& c #E5D1C6", "7& c #C0BDB0", "8& c #13695A", "9& c #0A6556", "0& c #0D6456", "a& c #0C6455", "b& c #0B6253", "c& c #0C6656", "d& c #0D6455", "e& c #1A685A", "f& c #93948B", "g& c #D3C0B6", "h& c #E1CCC1", "i& c #DFD1C7", "j& c #7D91BD", "k& c #6E87BB", "l& c #6E87BC", "m& c #6A83B9", "n& c #6A83BA", "o& c #6882B8", "p& c #6B83B8", "q& c #84818A", "r& c #BDACA2", "s& c #DAC8BB", "t& c #7A4325", "u& c #AA8570", "v& c #E4D3C7", "w& c #729C8F", "x& c #0B6555", "y& c #0B6354", "z& c #0D6758", "A& c #236A5C", "B& c #9C938A", "C& c #D6C5BA", "D& c #E3D3C6", "E& c #C0BDC4", "F& c #7892C2", "G& c #728CBF", "H& c #7791C3", "I& c #758FC0", "J& c #6A84BA", "K& c #7185AF", "L& c #887E79", "M& c #C7B6AC", "N& c #945E3F", "O& c #9C6B4E", "P& c #428273", "Q& c #096454", "R& c #0A6555", "S& c #0A6657", "T& c #0A6455", "U& c #0C6758", "V& c #3F6258", "W& c #AE9D95", "X& c #A4A9C0", "Y& c #708ABD", "Z& c #7089BD", "`& c #6A6B77", " * c #A1928A", ".* c #976E59", "+* c #74452D", "@* c #E2CABD", "#* c #377A6B", "$* c #0C6657", "%* c #0D6658", "&* c #176255", "** c #786D67", "=* c #99A0BC", "-* c #8099C8", ";* c #7A94C5", ">* c #626E8D", ",* c #7D726C", "'* c #A3816F", ")* c #6D371C", "!* c #D6B8AB", "~* c #4C8476", "{* c #0E6454", "]* c #0C6557", "^* c #0B6355", "/* c #0D6354", "(* c #0F6657", "_* c #0C6454", ":* c #0E6556", "<* c #4A504A", "[* c #9F8D84", "}* c #E3C9BD", "|* c #9D9FB9", "1* c #6E85BC", "2* c #7F97C6", "3* c #7E98C7", "4* c #6D86BB", "5* c #738ABF", "6* c #8199C8", "7* c #7892C3", "8* c #697BA1", "9* c #615852", "0* c #9F877A", "a* c #67331B", "b* c #BF9C8C", "c* c #7E9B8D", "d* c #0E6758", "e* c #0E6657", "f* c #096355", "g* c #096455", "h* c #096354", "i* c #0C6757", "j* c #334941", "k* c #8B7871", "l* c #E2C7BE", "m* c #B5AEBC", "n* c #758EC2", "o* c #728ABF", "p* c #7B95C5", "q* c #6F81A5", "r* c #524742", "s* c #A0867D", "t* c #6D3820", "u* c #A47764", "v* c #C5B1A5", "w* c #146859", "x* c #0A6253", "y* c #2E453E", "z* c #7D665E", "A* c #DDBEB4", "B* c #CDB0AB", "C* c #7F95C3", "D* c #7F99C7", "E* c #5C6A8C", "F* c #514541", "G* c #A0857D", "H* c #834D32", "I* c #94644B", "J* c #689083", "K* c #0D695A", "L* c #0E6A5B", "M* c #35413B", "N* c #7F6E67", "O* c #CCB2A7", "P* c #D9B1A3", "Q* c #9BA1BB", "R* c #7992C4", "S* c #4F5567", "T* c #594E49", "U* c #AA9389", "V* c #976A54", "W* c #7E482D", "X* c #E9D5C8", "Y* c #D4BFB5", "Z* c #2F6F61", "`* c #0B6758", " = c #0B6454", ".= c #0B6657", "+= c #125F52", "@= c #403A37", "#= c #8C786F", "$= c #D5BAAA", "%= c #E8D3C8", "&= c #D6C7BF", "*= c #7C8EB9", "== c #7892C4", "-= c #7891C1", ";= c #667BA9", ">= c #3E3A39", ",= c #6B605A", "'= c #BAA295", ")= c #B68971", "!= c #7E411E", "~= c #DEC1B2", "{= c #E4C5B8", "]= c #B19286", "^= c #2E6C5E", "/= c #293F38", "(= c #534741", "_= c #A68E85", ":= c #D8B5A9", "<= c #EBD4C7", "[= c #C1AEAE", "}= c #8192BA", "|= c #6D87BC", "1= c #6881B8", "2= c #7087B9", "3= c #44434F", "4= c #483B36", "5= c #8B796F", "6= c #CDB5A8", "7= c #C79E8D", "8= c #753C1C", "9= c #BD9482", "0= c #DDB5A7", "a= c #DCB3A7", "b= c #B5968B", "c= c #4A6D62", "d= c #116657", "e= c #096253", "f= c #0C6354", "g= c #0F695A", "h= c #0C6253", "i= c #0F6355", "j= c #274940", "k= c #463E3A", "l= c #807069", "m= c #C6A89D", "n= c #D9AD9F", "o= c #EBCFC3", "p= c #E6C7BA", "q= c #D6B3A6", "r= c #B1938D", "s= c #8C94B1", "t= c #8099C7", "u= c #748AB8", "v= c #51535E", "w= c #443B37", "x= c #72635E", "y= c #B59B92", "z= c #DCB9AE", "A= c #D5A599", "B= c #743D20", "C= c #A57967", "D= c #E9C8BB", "E= c #EACCC0", "F= c #E1C5B9", "G= c #BEA197", "H= c #868279", "I= c #46695E", "J= c #245E52", "K= c #1C6154", "L= c #1C5B4F", "M= c #27544A", "N= c #393F39", "O= c #4F4540", "P= c #796B62", "Q= c #B8A398", "R= c #E0C6B8", "S= c #E3C1B4", "T= c #E6C2B4", "U= c #E0B8AA", "V= c #DAB0A3", "W= c #E3B8AC", "X= c #D9B5A9", "Y= c #B6988F", "Z= c #8C8089", "`= c #7581A5", " - c #748CBB", ".- c #6E85BB", "+- c #7E93BC", "@- c #626D87", "#- c #444145", "$- c #4B413D", "%- c #74665F", "&- c #AC978D", "*- c #D8C1B4", "=- c #E7CCBE", "-- c #E1BBAE", ";- c #844E34", ">- c #93634B", ",- c #E9D3C5", "'- c #ECD4C8", ")- c #DEC0B4", "!- c #D4BEB3", "~- c #B8A79C", "{- c #928079", "]- c #75665F", "^- c #695C56", "/- c #6A5D56", "(- c #76645D", "_- c #968178", ":- c #BEA89B", "<- c #DCC3B2", "[- c #E9CFBF", "}- c #E8CABC", "|- c #E8D0C3", "1- c #DFC9BD", "2- c #C2A89D", "3- c #9C8881", "4- c #807674", "5- c #716E74", "6- c #616270", "7- c #585B6A", "8- c #55535B", "9- c #4D4745", "0- c #514742", "a- c #63544F", "b- c #87756D", "c- c #B19D90", "d- c #D3BBAC", "e- c #E5CBBC", "f- c #EBD0C2", "g- c #966752", "h- c #72422C", "i- c #EACEC0", "j- c #ECD5C6", "k- c #E9CDBD", "l- c #E4D1C3", "m- c #D9BFB1", "n- c #C5ADA0", "o- c #B7A296", "p- c #B39D90", "q- c #B8A193", "r- c #E7C5B7", "s- c #E8CEC0", "t- c #ECD7CA", "u- c #EBD6C8", "v- c #EBD3C6", "w- c #DEC0B5", "x- c #D4BBB0", "y- c #C5B3A8", "z- c #AD9D93", "A- c #98857D", "B- c #89776E", "C- c #85746A", "D- c #8B7971", "E- c #98857B", "F- c #AB9287", "G- c #C2A699", "H- c #DCC2B5", "I- c #E5CAB9", "J- c #E8CEBC", "K- c #EAD0C0", "L- c #EACDBF", "M- c #C29B89", "N- c #AA836E", "O- c #E3C1B2", "P- c #E8C9BB", "Q- c #ECD3C5", "R- c #ECD4C5", "S- c #E7CBBB", "T- c #E9D0C5", "U- c #DECBBE", "V- c #D7BCAE", "W- c #CBB2A5", "X- c #C4AFA2", "Y- c #C7B0A1", "Z- c #EBCCBB", " ", " ", " ", " ", " . + ", " @ # $ % & * = - ; > , ' ", " ) ! ~ { ] ^ / ( ( _ : < [ } | 1 2 3 4 5 6 7 ", " 8 9 0 a b c d e f g h i j k l m n o p q r s t u v w x y z A B ", " C D E F G H I J K L M N O P Q R S T U V W X Y Z ` ...+.@.#.$.%.&.*.=.-. ", " ;.>.,.'.).H ' !.~.{.].^./.(._.:.<.[.}.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e. ", " f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.A.B.6.C.D.E.F.G.5.H.I.J.K.L. ", " M.l.N.O.P.x Q.R.S.T.U.V.W.X.Y.Z.`. +.+++@+#+$+%+8.&+*+=+-+;+G.>+,+'+)+ ", " m.!+J ~+{+]+^+/+~ (+_+:+<+[+}+|+1+L.2+3+4+5+-+6+7+8+*+9+0+a+%+b+c+d+e+f+ ", " g+h+' i+j+f k+l+m+n+o+p+q+r+s+t+u+v+w+x+y+z+;+A+B+H.C+&+7.D+;+7.E+F+G+H+ ", " I+J+K+L+M+N+O+P+Q+R+S+T+U+V+- W+X+Y+Z+`+ @.@+@@@7+#@$@%@E+&@*@;+=@-@;@>@ ", " ,@'@)@!@~@{@]@^@/@(@_@:@<@[@}@|@1@2@3@4@5@6@7@8@;+#@9@7.%+a+0+9@*@H.0@a@ ", " b@[+c@t.d@e@'.f@g@h@i@j@k@l@m@n@o@p@q@r@s@t@u@v@7+a+E.>+=+$+w@x@y@$+z@A@B@ ", " C@D@E@F@G@H@I@J@K@L@M@N@k@a G O@P@Q@R@S@T@U@V@W@X@H.+@Y@Z@`@0+C.&+ #.#+#@# ", " ] ##$#%#&#*#=#-#;#>#P+,#'#)#!#~#{#]#^#/#(#_#:#<#[#}#>+$+>+*@w@|#1#2#3#4# ", " 5#6#7#8#9#0#a#b#c#d#= e#f#g#h#i#j#k#l#m#n#o#p#q#r#s#t#-@H.u#D+v#w#x#y#z# ", " A#> B#C#D#E#V@> F#b G#H#I#J#K#L#M#N#O#P#Q#R#S#T#U#V#W#X#Y#Z#`# $.$+$@$#$$$ ", " %$&$*$*$=$-$;$>$,$'$)$!$~${$]$^$/$($_$:$<$[$}$|$} 1$2$3$4$5$6$7$8$9$0$a$b$ ", " c$d$e$f$g$h$i$j$k$l$m$i$n$o$p$q$r$s$m$t$u$v$w$x$y$z$A$B$C$D$E$F$G$H$I$J$K$ ", " L$M$N$O$O$P$Q$R$S$T$U$V$W$X$Y$Z$`$ %.%+%@%#%$%%%&%*%=%-%;%>%,%'%)%!%~%{%]%^% ", " /%(%2._%:%m+<%[%}%|%1%2%3%4%5%6%7%8%9%0%a%b%c%_%d%Q+e%f%g%h%i%j%k%l%d m%n%u. ", " o%p%q%r%s%t%u%v%9@Z@y@u#w%x%y%z%A%B%C%D%E%F%G%~ s%H%I%J%K%L%M%N%O%P%Q%R%S%T% ", " U%V%W%B X%Y%Z%`% &.&+&x@>++&B+@&#&$&%&&&*&=&-&;&>&,&'&)&N%L%!&'&~&)&{&]&^&/& ", " (&(&_&:&<&a+D.G.$+E.E+[&B+F.y@}&|&1&2&3&4&5&6&7&8&9&L%0&a&b&c&9&L%d&e&f&g&h& ", " ;.i&j&9@.&E.k&l&m&n&l&B+F.l&Z@o&p&q&r&s&t&u&v&w&'&x&y&)&'&z&'&)&)&)&N%A&B&C& ", " D&E&l&D.a+G.F&-@n&}#G&E+H&I&8.J&$+K&L&M&N&O&<+P&Q&)&R&y&N%S&T&)&N%)&U&T&V&W& ", " M.X&8+*@<&5.l&F+l&|#}&`% &0+E+u#Y&Z&`& *.*+*@*#*~&)&N%a&$*y&%*)&)&)&'&!&&*** ", " e@=*%+D+Z&6..&-*0+b+B+u#a+;*H&#@`@B+>*,*'*)*!*~*{*a&]*^*9&/*(*d&N%)&9&_*:*<*[* ", " }*|*H.1*2*3*B+0+#@4*E.5*6*7*<&H.;+>+8*9*0*a*b*c*d*e*f*z&g*'&$*d*h*$*h*!&i*j*k* ", " l*m*C.n*o*H.B+<& &H.;*%@$+p*0+3*0+7*q*r*s*t*u*v*w*x*h*!&a&e*~&y&9&z&a&e*~&y*z* ", " A*B*C*$@%@D*0+G.a+>+G&8.C+9@H&y@G.n&E*F*G*H*I*D J*K*)&a&y&0&a&L*'&b&'&)&'&M*N*O* ", " P*{#Q*`@w@x@G&}#E. #n&Y@p*R*|#1#o& #S*T*U*V*W*X*Y*Z*)&~&`*~&N%9&T& =.=~&+=@=#=$= ", " %=&=*=0+==-@-=Y&c+$+Y&8.H.a+8@4*;=>=,='=)=!=~={=]=^=T&$*)&)&~&~&'&'&'&/=(=_=:= ", " <=O.[=}=a+p*|=1#1=`@}&*@`%;+`@2=3=4=5=6=7=8=9=0=a=b=c=d=e=f=g=h=)&i=j=k=l=m=n= ", " o=p=q=r=s=6+a+t=D+8+%+9.>+p*u=v=w=x=y=z=A=B=C=D=E=F=G=H=I=J=K=L=M=N=O=P=Q=R=S=T= ", " U=V=W=X=Y=Z=`= -a+l&7..-+-@-#-$-%-&-*-=---;->-,-B#'-)-!-~-{-]-^-/-(-_-:-<-[->#^# ", " 7 }-E@|-1-2-3-4-5-6-7-8-9-0-a-b-c-d-e-f-8#g-h-i-j-k-S#q+l-m-n-o-p-q- ", " r-s-t-u-v-w-x-y-z-A-B-C-D-E-F-G-H-I-J-K-L-M-N- ", " O-P-Q-R-S-S#T-l-U-V-W-X-Y- ", " Z- ", " ", " ", " ", " "}; gtkboard/pixmaps/memory.xpm000066400000000000000000007173031153150217100164010ustar00rootroot00000000000000/* XPM */ /* blank */ static char *memory_blank_xpm[] = { "48 48 3 1", "r c red", "b c blue", "g c green", "rbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbg", "bgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgr", "grbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrb", "rbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbg", "bgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgr", "grbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrb", "rbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbg", "bgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgr", "grbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrb", "rbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbg", "bgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgr", "grbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrb", "rbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbg", "bgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgr", "grbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrb", "rbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbg", "bgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgr", "grbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrb", "rbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbg", "bgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgr", "grbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrb", "rbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbg", "bgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgr", "grbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrb", "rbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbg", "bgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgr", "grbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrb", "rbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbg", "bgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgr", "grbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrb", "rbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbg", "bgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgr", "grbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrb", "rbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbg", "bgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgr", "grbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrb", "rbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbg", "bgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgr", "grbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrb", "rbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbg", "bgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgr", "grbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrb", "rbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbg", "bgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgr", "grbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrb", "rbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbg", "bgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgr", "grbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrbgrb" }; /* Antennae */ static char * memory1_xpm[] = { "48 48 64 1", " c None", ". c #492438E31861", "X c #38E330C21040", "o c #186114510000", "O c #30C228A20820", "+ c #965871C630C2", "@ c #410330C21861", "# c #596545142081", "$ c #618559652081", "% c #8E387DF730C2", "& c #514438E32081", "* c #71C6596528A2", "= c #79E7618528A2", "- c #BEFB9A694103", "; c #6185492428A2", ": c #8E3869A630C2", "> c #618549241861", ", c #BEFBAAAA4103", "< c #9E7979E730C2", "1 c #A699820738E3", "2 c #C71BAAAA4103", "3 c #9E798E3838E3", "4 c #BEFB924838E3", "5 c #514441032081", "6 c #DF7DBAEA4924", "7 c #C71B924838E3", "8 c #C71B9A694103", "9 c #C71BAEBA5144", "0 c #BEFB92484103", "q c #D75CA2894103", "w c #A69982074103", "e c #D75CCB2B5144", "r c #DF7DAAAA4103", "t c #AEBA820730C2", "y c #AEBA8E3838E3", "u c #F7DEDF7D5965", "i c #FFFFF7DE6185", "p c #FFFFE38D5965", "a c #514451442081", "s c #DF7DCF3C5965", "d c #FFFFF7DE8617", "f c #E79DD75C71C6", "g c #DF7DB2CA4103", "h c #E79DB2CA4924", "j c #C71B9E795144", "k c #EFBEBAEA4924", "l c #F7DEC30B4924", "z c #EFBECF3C4924", "x c #71C6618528A2", "c c #965871C638E3", "v c #30C228A21861", "b c #E79DBAEA4924", "n c #9E7979E74103", "m c #FFFFD34C5144", "M c #AEBA8E384103", "N c #410341031040", "B c #F7DECB2B5144", "V c #28A220811861", "C c #8E3871C64103", "Z c #861769A638E3", "A c #69A6596528A2", "S c #861769A630C2", "D c #28A220811040", "F c #000000000000", " ..XoO ", " .X+@#$O. ", " .%#&#*=&. ", " .-;#$*:+>. ", " .,<$*::+<>. ", " .<--*=:+<11*. ", " .:12=:+<11345 ", " .:<6++<113478. ", " &:<9-<<13078q8. ", " &:+09wee69rqrrt. ", " $:+aa ", " *:+<99*+yq866euuuuiiiisse,idie@ ", " **:+tf1*18qrrghhrXXXa$3siiddfh@ ", " $>:+::cwMB9f888=<5VV::=x*:rhhkkllzmm,m* ", " 5<7M.v*::==** ", " $jjnC<=*174:=x**=8hkkllz,e*<> ", " =jjjn=55@w773=x**$:3<111 ", " =jjjAZ$SnC5177w=**$$1hk,B*m2:y> ", " =MMwSZSSnC#o+77wx*$$*wh,m*-: ", " =Mn1MZSZCZ=@X+77w=$$;$yl6:=1lm> ", " =jj-MZ=*>>>555+77y:$;#=y<:qlmmm> ", " =1wwwCA$555555&5<77<*#>=1hklzmm> ", " ==<11<#>55555&XVVV<34+*$*qkllzm> ", " ==nMM1*>55&&&.XV VVV1+&5$ykkll> ", " =x55&&&@XVDD VVVO&# ", " =*C11<:>5&&&.@X55ODD VVv5<7. ", " =$c11<+>5&&&.&5##55&DD VVV ", " =$c<<<<#5&&&.$$$##5555OO ", " =$+<<<<$5&&&.$**$$;>5555.O ", " =$+<<<+x5&&&.$***$$$;>5555&O ", " =$:<<<++:>&&.$*$$$$$$$#>5555& ", " >:+<<++:=&&.$$$$$$$$$$$##55. ", " >:+<+++::$.OX&>$$$$$$$$$$;>v ", " ooo.>5&ODF FFoDX@#>$$$$o "}; /* XPM */ /* Ant */ static char * memory2_xpm[] = { "48 48 60 1", " c None", ". c #492449244924", "X c #618561856185", "o c #9E799E799E79", "O c #208120812081", "+ c #514455555144", "@ c #410341034103", "# c #965896589658", "$ c #082008200820", "% c #8E388A288E38", "& c #69A669A669A6", "* c #71C675D671C6", "= c #861782078617", "- c #28A228A228A2", "; c #104014511040", ": c #10400C300000", "> c #410324921040", ", c #082004100000", "< c #000000000000", "1 c #71C63CF32081", "2 c #8E38492428A2", "3 c #208114511040", "4 c #30C234D330C2", "5 c #208110400820", "6 c #492424921040", "7 c #51442CB21861", "8 c #38E320811040", "9 c #104008200000", "0 c #208114510820", "q c #28A214510820", "w c #79E741032081", "e c #596530C21861", "r c #10400C300820", "t c #618534D32081", "y c #30C218611040", "u c #28A218610820", "i c #79E7451428A2", "p c #9658514430C2", "a c #18610C300820", "s c #186110400820", "d c #30C21C711040", "f c #49242CB21861", "g c #104010400820", "h c #59652CB21861", "j c #492428A21861", "k c #618538E32081", "l c #30C21C710820", "z c #69A634D32081", "x c #20811C711861", "c c #30C224921861", "v c #30C22CB228A2", "b c #186110401040", "n c #410328A21861", "m c #8617451428A2", "M c #38E31C711040", "N c #61855D755965", "B c #69A638E32081", "V c #410320811040", "C c #51443CF330C2", "Z c #514430C22081", " . ", " X. ", " oOo ", " +@ ", " # $% ", " %+ O ", " &* =O ", " O* =- ", " o; =O ", " &@ =-=X+= ", " O. X:>,--# ", " #<# *<12>3* = ", " &4- ;56789<&$# ", " o+$-= *0q<6,w,$;= o#", " %;4* +8wq,ee<<<% *;%", " %tw<<<; o#.;+# ", " %4% #+;,08<<<<<$-4# ", " X;*$% &O<@5ipa<<mtd c #503020", ", c #503030", "< c #603010", "1 c #603020", "2 c #403040", "3 c #503040", "4 c #404030", "5 c #504020", "6 c #504030", "7 c #604020", "8 c #604030", "9 c #605030", "0 c #704020", "q c #704030", "w c #705020", "e c #705030", "r c #504040", "t c #504050", "y c #604040", "u c #604050", "i c #605040", "p c #605050", "a c #705040", "s c #705050", "d c #604060", "f c #706050", "g c #804020", "h c #805020", "j c #805030", "k c #905020", "l c #806020", "z c #906020", "x c #a06020", "c c #a06030", "v c #a07020", "b c #b07020", "n c #b07030", "m c #805040", "M c #805050", "N c #806050", "B c #807050", "V c #906040", "C c #906050", "Z c #806060", "A c #807060", "S c #907060", "D c #907070", "F c #a05060", "G c #a06050", "H c #a07040", "J c #a07050", "K c #b07040", "L c #b07050", "P c #a07070", "I c #b07060", "U c #c07030", "Y c #907080", "T c #907090", "R c #b08020", "E c #b08030", "W c #b09020", "Q c #908070", "! c #a08050", "~ c #a09050", "^ c #b08040", "/ c #b08050", "( c #b09040", ") c #b09050", "_ c #a08070", "` c #a09070", "' c #b08060", "] c #b08070", "[ c #b09060", "{ c #c08020", "} c #c08030", "| c #c09020", " . c #c09030", ".. c #d09030", "X. c #c0a020", "o. c #c0a030", "O. c #c0b020", "+. c #d0a020", "@. c #d0b020", "#. c #d0b030", "$. c #c08040", "%. c #c08050", "&. c #c09040", "*. c #c09050", "=. c #d09040", "-. c #c08060", ";. c #c09060", ":. c #c09070", ">. c #c0a040", ",. c #c0a050", "<. c #d0a040", "1. c #d0a050", "2. c #d0b040", "3. c #d0b050", "4. c #c0a060", "5. c #c0a070", "6. c #c0b060", "7. c #d0a060", "8. c #d0a070", "9. c #d0b060", "0. c #d0b070", "q. c #e0b050", "w. c #e0b060", "e. c #e0b070", "r. c #e0c030", "t. c #d0c050", "y. c #d0c070", "u. c #e0c050", "i. c #e0c060", "p. c #e0c070", "a. c #e0d070", "s. c #908080", "d. c #a08090", "f. c #b09080", "g. c #b0a090", "h. c #b0a0a0", "j. c #c09080", "k. c #c09090", "l. c #c0a080", "z. c #c0b090", "x. c #d0a080", "c. c #d0b080", "v. c #d0b090", "b. c #c0a0a0", "n. c #c0a0b0", "m. c #c0b0a0", "M. c #d0a0a0", "N. c #d0b0a0", "B. c #d0b0b0", "V. c #e0b080", "C. c #c0a0c0", "Z. c #d0b0c0", "A. c #d0b0d0", "S. c #d0c080", "D. c #d0c090", "F. c #d0c0b0", "G. c #e0c080", "H. c #e0c090", "J. c #e0d080", "K. c #e0d090", "L. c #f0d080", "P. c #f0d090", "I. c #e0c0b0", "U. c #e0d0a0", "Y. c #e0d0b0", "T. c #f0d0a0", "R. c #f0e0b0", "E. c #d0c0c0", "W. c #d0c0d0", "Q. c #e0c0c0", "!. c #e0c0d0", "~. c #e0d0c0", "^. c #e0d0d0", "/. c #f0e0c0", "(. c None", /* pixels */ "(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.P.p.p.(.(.(.(.", "(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.J.p.i.(.(.(.(.", "(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.Y./.p.p.p.(.(.(.(.", "(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.R./.p.i.J.(.(.(.(.", "(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.P.T.P.u.w.1.(.(.(.(.", "(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.i.J.a.;.G.,.(.(.(.(.", "(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.b.i.J.J.0.;.H (.(.(.(.", "(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.I./.i.J.a.i.w.V (.(.(.(.", "(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(./.J.i.w.0.i.S.H (.(.(.(.(.", "(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(./.a.u.i.0.w.J I (.(.(.(.(.", "(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.P.i.q.i.p.G.K (.(.(.(.(.(.", "(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.J.i.2.i.u.H.*.(.(.(.(.(.(.", "(.(.(.(.(.(.(.I.~.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.p.y.u.%./ H.] (.(.(.(.(.(.", "(.(.(.(.(.(.(.0.p.i.Y.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.p.! 3.3.1.K., (.(.(.(.(.(.", "(.(.(.(.(.(.(.7.H.t.i.J.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.i.6.*.1.,.H.' (.(.(.(.(.(.", "(.(.(.(.(.(.(.(.;.G.p.u.i.a.~.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.i.,.3.i.G.c.(.(.(.(.(.(.(.", "(.(.(.(.(.(.(.(.~.H.3.i.u.a.L.J.K.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.i.( >.G.H V.(.(.(.(.(.(.(.", "(.(.(.(.(.(.(.(.(.9 ' 9.3.w.a.u.J.q.p.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.>.,.1./ =.e (.(.(.(.(.(.(.", "(.(.(.(.(.(.(.(.(.(.H L 7.<.<.&.w.1.q.e.H.(.a.~.(.(.(.(.(.:.: # # : (.3.3.,.=.7.B.(.(.(.(.(.(.(.", "(.(.(.(.(.(.(.(.(.(.(.V 7.=.&.<.w.i.3.>.} 7 E c j ^ (.(.(.3 f # ' (.z.8.9.*.&.' (.(.(.(.(.(.(.(.", "(.(.(.(.(.(.(.(.(.(.(.(.(.c.K *.1.&.K .} =.b h 7 0 %.! a f & : (.~ # Z y 6 n = (.(.(.(.(.(.(.(.", "(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.6 c U g k ..$. .v 7 7 . 7 0 # # . . . . > 5., 6 u @ (.(.(.(.(.(.(.", "(.(.(.(.(.(.(.(.(.(.(.(.(.(.: b e q U } n .1.=.7 > . z ; # . . . . . . Z = o X # l.(.(.(.(.(.(.", "(.(.(.(.(.(.(.(.(.(.(.(.(.Q h #.x &.q E } } %.c $.; o 5 o . X @ X . . . : = # # @ $ (.(.(.(.(.(.", "(.(.(.(.(.(.(.(.(.(.(.(.(.# b .w o.> 0 n n *.-.0 j ; . . # O . . . . . . - F F.# # j.(.(.(.(.(.", "(.(.(.(.(.(.(.(.(.(.(.(.(.7 X.@.5 #.r.R h e 1 1 7 > # . . . # l z x z 1 # # :.(.(.(.X Y (.(.(.(.", "(.(.(.(.(.(.(.(.(.(.(.Z.x.h v R w @.+. .R # 0 7 7 m . . X . # l b h x 7 < # c (.(.(.# n.(.(.r (.", "(.(.(.(.(.(.(.~.z.M f.N y e # = 5 R x b k 1 o ; > 8 ; . . # h R R x h h 0 0 E Q.(.(.(.# : : (.(.", "(.(.(.(.(.(.v.) g.X X . X o . X D X # > 7 > ; @ # = # # . > | W O.{ 7 k 0 0 > c.(.(.(.(.(.(.(.(.", "(.(.(.(.(.B.' # # o : X . w . . . X . + . O . . . . # . # 7 z X.O.R ; > > 0 # @ # I.(.(.(.(.(.(.", "(.(.(.(.(.E.X X . : B (.(.: w l 7 @ X . . . X % . . # . # 7 x W v v , # # @ m f.# : E.(.(.(.(.(.", "(.; $ # : (.F.(.Q.(.(.(.(.(.(.(.4.q . . . . . . . X # # # > > * # # # @ . . N.(.(.! : (.(.(.(.(.", "(.(.` (.(.(.(.(.c.(.(.(.(.(.(.(.^.s X . X . . . . : # # # = > X # # @ : X . (.(.(.(.@ Z.(.(.(.(.", "A (.(.(.(.(.(.(.(.(.(.(.(.(.(.(.U.@ . . # . . . . . @ X X > : , r # . X # . N (.(.i # # i (.(.(.", "(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.g.. X X d.(.0.b.8 : . # X $ . # ; X . . X . e W.: @ (.(.(.(.(.(.", "(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.M.. . # F.(.(.(.(.S G P @ # X ; = . O . o @ X h.(.(.# @ : : : # ", "(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.m . @ p !.(.(.(.(.S.F.C # 3 . 6 5 . X X @ . A.(.(.(.(.(.(.(.(.(.", "(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(._ : X s (.(.(.(.(.(.l.] # # @ , 7 . . # . @ (.(.(.(.(.(.(.(.(.(.", "(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.X X @ F.(.(.(.(.(.(.E.@ # 4.8 # X X . @ F.(.(.(.(.(.(.(.(.(.(.", "(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.# . X (.(.(.(.(.(.(.(.i 2 (.k.X X X @ !.(.(.(.(.(.(.(.(.(.(.(.", "(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(., @ @ (.(.(.(.(.(.(.(.F.# (.(.% m.r (.(.(.(.(.(.(.(.(.(.(.(.(.", "(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.[ @ # (.(.(.(.(.(.(.(.F.X (.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.", "(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.D.6 d B.(.(.(.(.(.(.(.(.@ (.(.(.(.(.Y (.(.(.(.(.(.(.(.(.(.(.(.", "(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.F.r (.(.(.(.(.(.(.(.(._ (.(.(.(.(.& T (.(.(.(.(.(.(.(.(.(.(.", "(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.% (.(.(.(.(.(.(.(.p # (.(.(.(.(.(.(.# (.(.(.(.(.(.(.(.(.(.(.", "(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.t (.(.(.(.(.(.(.r s.(.(.(.(.(.(.(.(.# W.(.(.(.(.(.(.(.(.(.(.", "(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.4 C.(.(.(.(.(.(.(.: (.(.(.(.(.(.(.(.(.: W.(.(.(.(.(.(.(.(.(.(.", "(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.E.E.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(." }; /* XPM */ static char * memory4_xpm[] = { "48 48 64 1", " c None", ". c #000000000000", "X c #000004100000", "o c #208134D31040", "O c #71C68E386185", "+ c #618571C62081", "@ c #38E361852081", "# c #08201C7128A2", "$ c #000014510000", "% c #104000000000", "& c #79E78E389658", "* c #9E79A2899E79", "= c #B6DABEFB9E79", "- c #69A6AAAAAEBA", "; c #79E77DF779E7", ": c #28A2451430C2", "> c #618571C679E7", ", c #69A669A66185", "< c #514451445144", "1 c #186118612081", "2 c #082028A21040", "3 c #D75CE38DDF7D", "4 c #CF3CD34CB6DA", "5 c #28A238E338E3", "6 c #965886179658", "7 c #AEBABEFBBEFB", "8 c #410345144103", "9 c #8617861779E7", "0 c #2081249230C2", "q c #596549241861", "w c #59651C712081", "e c #69A69248B6DA", "r c #514400000820", "t c #79E741035144", "y c #96588A2838E3", "u c #59655D7569A6", "i c #9658AEBAA699", "p c #8E38AAAA9E79", "a c #A699B2CAAEBA", "s c #4103410338E3", "d c #8E389A698E38", "f c #28A23CF32081", "g c #208145141040", "h c #9E795D7530C2", "j c #79E7410330C2", "k c #CF3C965830C2", "l c #186124921040", "z c #08200C300820", "x c #D75C79E71861", "c c #A69955550820", "v c #D75C79E71040", "b c #EFBED34C5144", "n c #C71B61850820", "m c #C71B9E799658", "M c #A69979E71040", "N c #B6DA71C61040", "B c #DF7DAAAA4103", "V c #E79D9A6930C2", "C c #DF7D79E730C2", "Z c #861741031040", "A c #30C200000000", "S c #514414510820", "D c #DF7DCF3C9658", "F c #30C218611040", " .. ... . ", " XoO+@# ", " $....%. ", " #&*=-;:# ", " $>>,+<11 ", " 234<5>6# ", " #7;28<9# ", " 07&qw,+# ", " . 0-ewrty5 ", " .ue&i*p661 #4a769&s ", " >7a=*=ap=42 . 1e5u<85 ", " i99diiiii-d48 0a>9;;&u ", " a9d-i**iip645 03*746*u ", " a6dpiii*ipp=5 %005:102 ", " a6*==aa77a=48 25$22o2. ", " e>e----e>>ee0 $u:f@@fg. . ", " &hjj8hjhkjhqX :8l@@fggzl ", " *xcccv+,bnxc.$8lof@fgol1 . ", " mxMNMqu8Bhkh.X5zgggggooz# ", " mxMxkqwrVyVjzl#ooggoooool. ", " mCvvyZttmVBjo@lg:ggoggfgl5 ", " mCcNnZhxVckMA%.XX.$$..X#l0 ", " mMZyyymbb,+hSo++yydd-6+$g% ", " =Mqu;&3DD6uqSybby9;;9p7+z% ", " =CcykhkxbVyMSMM@X.ArAA>a$. ", " =VnxnvcCDkxnZZM$AZCZCZr9O. ", " DCNyhCqB4BNcc@@%jmd#3*AwD. ", " DCcMMCSBDknM+M@Ah4:Ataqwm. ", " DVnNyCZBDBMcy+SSC=Ot67mrm. ", " DCnvMNxbDBvhk+.wh,,ud>p,wm. ", " 84kNvNxBbVBZl@qAjm+s>9Awm. ", " ;,78. .ll1F2f@f2Ff:. ", " >;uas. .f;973333333m. ", " ,>$ .f<#:&99eepp9. ", " uu<,&2 .0ss8st9f%$Xz$z......X.. ", " .,6;0.%XXzzzzX%z. "}; /* XPM */ static char * memory5_xpm[] = { "48 48 63 1", " c None", ". c #9E799E799E79", "X c #79E796589E79", "o c #79E77DF779E7", "O c #596571C679E7", "+ c #4924618569A6", "@ c #410355556185", "# c #208128A228A2", "$ c #4924410338E3", "% c #8E388A288E38", "& c #410369A671C6", "* c #61859248A699", "= c #9E79C30BC71B", "- c #B6DAE79DEFBE", "; c #4103618569A6", ": c #38E3555569A6", "> c #10401C712081", ", c #965892489658", "< c #C71BF3CEF7DE", "1 c #186130C230C2", "2 c #30C249245144", "3 c #30C251445965", "4 c #208130C238E3", "5 c #30C238E338E3", "6 c #71C6AAAAC71B", "7 c #492479E78617", "8 c #61859E79B6DA", "9 c #8617CB2BDF7D", "0 c #410369A679E7", "q c #30C249246185", "w c #69A66DB671C6", "e c #49246DB679E7", "r c #1040208128A2", "t c #082008200820", "y c #A699DB6CE79D", "u c #514475D68E38", "i c #71C6B6DACF3C", "p c #59658A289E79", "a c #38E361856185", "s c #51448A289E79", "d c #30C249245965", "f c #38E341034924", "g c #61859658A699", "h c #28A238E34103", "j c #104018611861", "k c #514451445144", "l c #492471C68617", "z c #28A241035144", "x c #61855D755144", "c c #59658A289658", "v c #79E7BAEACF3C", "b c #69A6AAAAB6DA", "n c #69A6A289BEFB", "m c #D75CFBEEFFFF", "M c #30C259656185", "N c #514479E79658", "B c #38E3596571C6", "V c #618582079E79", "C c #1861208130C2", "Z c #59658E38A699", "A c #61858A28AEBA", "S c #9658CF3CDF7D", "D c #C71B79E75144", " .XoO+++@#$% ", " .O&*X=-=*;:>, ", " .++= ", " .Oy40p47;1a7s2dt, ", " .+yfug4*h*71jjttk ", " @=+&l372ph3O@ztx ", " oX=cg;2h&;24ht5, ", " wvy8&2&u4&070h#. ", " ,e--i&c4l:214hh5 ", " oux .ofw ", " onmib0gb32rMu5# .wzeNz5, ", " 0y-bvna&l;>Mr>o X+BV==2::>o ", " Xpmyug6l&BpN0#>ww %+B==@0iif254w ", " e-hBNZA666vvvAN:r2lg9i7;z4#x ", " XB-=g5NAnvy<<<-mmmm-9clNe;089nNq> ", " dle:N6y-m--y-ySSS=y=bbppg**7Mh4r,", " .w5#0AnSmm-=9999999999iv6dlg**b9nezo", " owkfCfeNAv:efhh2gAe:w", " ,dnm<$tt4t% ,. ", "w>DDDxBBBeZA888ZZNu0qnmiOgO:;314hk .$f ", " ox$#>hdfB0000:::ddde>>#444#>4f5$:S-968Bd1h2qw oto ", " ,wkkwo, $6t. ", " kXrzC% ", " #So ", " %57uudl8l0lupM3333&q5 ", " xOdgpzM*bpMM0*9v8BC, ", " .kh0eh4lvgO34334>x ", " .w5zfz4&89b*O35$ ", " .xt40hC0i9i4x ", " k#rfd>4;jO ", " .kjhf#>w ", " .xtj55 ", " .ox. "}; /* XPM */ static char *memory6_xpm[] = { /* columns rows colors chars-per-pixel */ "48 48 40 1", " c black", ". c #001000", "X c #100000", "o c #100010", "O c #101000", "+ c #201020", "@ c #202010", "# c #202020", "$ c #203020", "% c #302030", "& c #303020", "* c #304030", "= c #403030", "- c #404030", "; c gray25", ": c #504050", "> c #505050", ", c #506050", "< c #605050", "1 c #605060", "2 c #607060", "3 c #706070", "4 c #707060", "5 c gray44", "6 c #708070", "7 c #807070", "8 c #f00010", "9 c #f01010", "0 c #f00020", "q c #f01020", "w c #f05010", "e c #f04020", "r c #f05020", "t c #807080", "y c #808070", "u c #e0e000", "i c #e0e010", "p c #f0e000", "a c #a0a0a0", "s c None", /* pixels */ "sssssssssssssssssssssss5ssssssssssssssssssssssss", "ssssssssssssssssssssssssss>>####>sssssssssssssss", "sssssssssssssssssssssssss>+@#@+@#@>sssssssssssss", "ssssssssssssssssssssssss>##>ssst>##>swsqssssssss", "sssssssssssssssssssssss>#@>ssssss># >00wssssssss", "sssssssssssssssssssssss> >sssssss0iwqwsssssssss", "ssssssssssssssssssssss ># #ssss000wui890sssssss", "sssssssssssssssssssss%### $ssss0wiiiwrssssssss", "ssssssssssssssssssss4 > sss0a0wpie9ssssssss", "sssssssssssssssssss4 >##> $ 4sssqsqww9e9sssssss", "sssssssssssssssss4 ooooo#o#o 4ssss0e88sssssssss", "ssssssssssssssss oo 4ss0ss8sssssssss", "ssssssssssssss4 ooo o o oo 4ssssssssssssss", "sssssssssssss oo oo o sssssssssssss", "ssssssssssss oa>> ssssssssssss", "sssssssssss oooOOaa>> ooww> sssssssssss", "ssssssssssooooOaa>>& oo>aw ssssssssss", "sssssssssoo oOa>>#O oooo> sssssssss", "ssssssss o oOa>>O oo oo ssssssss", "sssssss>ooooa>#O ooo oo >sssssss", "ssssss3 oooOa>O o oo sssssss", "ssssss# oo a>% o $ssssss", "sssss4 o Oa>Ooo ssssss", "sssss> o >>$Oo .X 4sssss", "sssss# oo >&% o O X.X >sssss", "sssss oo >% oo OXX. .X. #sssss", "sssss oo % ooo X.X X.X X sssss", "sssss ooo o X.X.X.X.X. o sssss", "sssss ooo ooo XOX X.X X.X X o sssss", "sssss oo oo o X .X. .X. o sssss", "sssss# oo Oooo X.XXX.X o o sssss", "sssss> oo #.ooo .X. X o Ooo #sssss", "sssss4 o O oooo oo .o >sssss", "ssssss o #Oo o O 4sssss", "ssssss> #Ooo oo Ooo ssssss", "sssssss OO#ooo o Ooo >ssssss", "sssssss4 #Oooo ooO #sssssss", "ssssssss #OXoo ooOoooo o 6sssssss", "sssssssss O#ooo ooooOo o o >>>>>;,1*1,15<755yssssss", "ssssssssssssssssssssssssssssssssssssssssssssssss" }; /* XPM */ static char * memory7_xpm[] = { "48 48 27 1", " c None", ". c #9E79A2899E79", "X c #EFBEEFBEEFBE", "o c #000000000000", "O c #AEBABEFBDF7D", "+ c #AEBAAEBADF7D", "@ c #208130C29658", "# c #514451445144", "$ c #AEBAAEBAEFBE", "% c #BEFBAEBAEFBE", "& c #1040104071C6", "* c #104000008617", "= c #30C220819E79", "- c #30C230C29E79", "; c #208120819658", ": c #0000104071C6", "> c #104010408617", ", c #208120819E79", "< c #41034103AEBA", "1 c #51444103BEFB", "2 c #00001040BEFB", "3 c #71C68207DF7D", "4 c #71C671C6DF7D", "5 c #861771C6EFBE", "6 c #71C671C6EFBE", "7 c #86178207DF7D", "8 c #41034103BEFB", " ", " ... ", " ..XXX. ", " ..XXXXXX. ", " ..XXXXXXXXX. ", " ..XXXXXoooXXXX. ", " ..XXXXXoo...oXXXX. ", " ..XXXXXoo......oXXXX. ", " ..XXXXXoo.........oXXXX. ", " ..XXXXXoo............oXXXX. ", " ..XXXXXoo......O.+.@...#oXXXX. ", "..XXXXXoo.......O$O%O$O%###oXXXX. ", ".XXXXXo........&%O*..O...O##oXXXX. ", ".XXXXXXo.......%O.@=@-...%O.;oXXXX. ", "##XXXXXXo......+%:*&*:*;%;..=;oXXXX. ", "###XXXXXXo.....%.>.>:>;,;,;,.,;oXXXX. ", "####XXXXXXo...%O%&*&#&*;..=;.;=;oXXXX. ", "#####XXXXXXo..O%O>:*:>:,;=;,;=;,;oXXXX. ", "######XXXXXXo.%+%O%+%:X&=;=;=;=;=;oXXXX. ", "#######XXXXXXoO%<$O.:X:>:,;,;,;,;,;oXXXX. ", "########XXXXXXoO1O%O*&*.*&*;=;=&=o=;oXXXX. ", "o########XXXXXXo<%2#3#:#4546:>:*:1:>46<648 c #9E79EFBEAEBA", ", c #AEBAEFBEAEBA", "< c #AEBAEFBE9E79", "1 c #AEBADF7DAEBA", "2 c #861782078617", "3 c #CF3CCF3CCF3C", "4 c #EFBEEFBEEFBE", "5 c #618571C66185", "6 c #618582076185", " ", " ", " ", " ", " .XXX. ", " .XXoOoO.XXXXX.. ", " ..XXX+X+@+X+@+X+@+X. ", " .XXXXoOoOoXoOXXoOoXoOoOXXX. ", " .X+@+@+@+@+X+@X@+@+X+@+XX#$X. ", " .XOoOoXoOoOXXoOXOoOXOoOoX%&%&X ", " .X+@+@XX+@+XX@+@XXX@+@+@+XX#$#X. ", " .XOoOXXXOoOXXoOoOoOXXoXXOo&X&%&%XX. ", " .XXXXXX@+@+@X@+@+@+X+XXX+@$#X#$XX#$X. ", " XOoOoOoXoOoOXXXXXOXXoOoOX&%X%&%X%&%*X. ", " X@+@+@XX+@+@X@+@+XX@+#$#X#$#$#$XX#$=-X ", " XOoOoXXOXXXXoOoOo&%&%&%XX&%&%&%&XX%*;X. ", " .XX+@+X+@+@+XX#$#$XXXXXX#$#$XXXXX$X$=-=. ", " .XoXXOoOXXoOo:XXXXXX%>,>XXXXX&%&%&%X;*;*X ", " X@+@XX+@+X+@:XXX<:<:<:<:<1<1:X$#$#$X-X-=X ", " .XOoOoXoOoXoO:X:::>:>:>%>:>,::XX&%&%X;X;*X ", " X+@+@XX+@XX::X:<:<=2.X.X.<1<::2X#$XX=-XX=. ", " XoOoXXOoOXXXX%>:>:>,>,>,>22222XX&%X;*;*;X ", " .XX@+@+@+X3#XX$#<:%X,>,>,>X3X&%&%&XX;X;*X. ", " .X@X@+XX@+@X#$.$#$#$1<22XXXoX%&X&X&%&X*;*X ", " X+@+X+@+XXX+XX:.XX4X@+@+@+X$X$#X#$2X=-X ", " XoOXXoOoOoXX:X:.XXXoOo...X:X&%&X22X2X. ", " X$@+@+XXXX:X:X:X.XXX#$#$#X::X2X2XXX. ", " X%&%&%&%&%X:X:XXO.XX&....:XXXXXX ", " .X#$#XXXXXX::XX+X-=X#$#$#XX ", " .X;*;*;*;XXXoXoX;*;*%..XX ", " .XX-XXXXX3X+X+X-=..$#$X ", " XXX22XX2XoXoX;*...2XX ", " 2XX2XX+X+=-=-...X ", " XX2XX2XXX*;*;... ", " X2X=-.-.22 ", " X*;*..2 ", " 5-:.22 ", " 6;*.2 ", " 56:. ", " 52. ", " 6:. ", " 6. ", " ", " ", " ", " "}; /* XPM */ static char * memory9_xpm[] = { "48 48 63 1", " c None", ". c #CF3CCB2BCF3C", "X c #EFBEEBADEFBE", "o c #D75CD34CD75C", "O c #514451445144", "+ c #9E799A699E79", "@ c #FFFFFBEEFFFF", "# c #E79DE38DE79D", "$ c #082008200820", "% c #965892489658", "& c #A699A289A699", "* c #BEFBBAEABEFB", "= c #410341034103", "- c #861782078617", "; c #8E388A288E38", ": c #DF7DDB6CDF7D", "> c #F7DEF3CEF7DE", ", c #208120812081", "< c #000000000000", "1 c #28A228A228A2", "2 c #B6DAB2CAB6DA", "3 c #30C230C230C2", "4 c #596559655965", "5 c #96589A699E79", "6 c #71C671C671C6", "7 c #69A669A669A6", "8 c #618561856185", "9 c #30C228A228A2", "0 c #DF7DD34CDF7D", "q c #BEFBB2CABEFB", "w c #492449244924", "e c #104010401040", "r c #104010400820", "t c #8E3892489658", "y c #AEBAB2CAAEBA", "u c #9E7992489E79", "i c #186118611861", "p c #86178A288617", "a c #79E779E779E7", "s c #596559655144", "d c #C71BC30BC71B", "f c #F7DEFBEEFFFF", "g c #AEBAA289A699", "h c #208128A22081", "j c #E79DEBADE79D", "k c #28A230C230C2", "l c #38E338E338E3", "z c #FFFFF3CEF7DE", "x c #9E7992489658", "c c #79E771C671C6", "v c #EFBEE38DE79D", "b c #BEFBC30BC71B", "n c #A699A2899E79", "m c #C71BCB2BCF3C", "M c #492451445144", "N c #861779E78617", "B c #CF3CD34CCF3C", "V c #AEBAAAAAB6DA", "C c #A699A289AEBA", "Z c #D75CCB2BCF3C", "A c #F7DEF3CEEFBE", "S c #79E782078617", "D c #596551445144", " ", " .X ", " XoO+ ", " @#O$% &X % ", " *@#%=$- o@o$; ", " :>:o%,>&= ", " >:;-67-88=9,11 @@@#.0-= ", " @qO4w1,13er$$,7ty u&.O3 ", " &@4e,,ie<<<<<<<+ws-21<<<<<<<<<<<<<<<<<<:oo@* +8$<<<<<<<<<<<<<<<<<<<<<<>f>Xg= ", " o@@@@@2&6e<<<<<<<<<<<<<<<<<<<<<<<#.:%<% ", " @..2&-l$<<<<<<<<<<<<<<<<<<<<<<<<<X*x$6 ", " .@+;63r<<<<<<<<<<<<<<<<<<<<<<<<<<<<6>Xd6i ", " X*uck$<<<<<<<<<<<<<<<<<<<<<<<<<<<<3v#:lO ", " b>n6l$<<<<<<<<<<<<<<<<<<<<<<<<<<<<,0:%< ", " X*al$<<<<<<<<<<<<<<<<<<<<<<<<<<<<aM$<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*;$% ", " 2@26<<<<<<<<<<<<<<<<<<<<<<<<<<<<&4$<<<<<<<<<<<<<<<<<<<<<<<<<<<*uaw,<<<<<<<<<<<<<<<<<<<<<<<<<<2awl,,<<<<<<<<<<<<<<<<<<<<<<<<<<8:Ba1 ", " .XV3e$ekw$<<<<<<<<<<<<<<<<<<<<<<<<1+>b11 ", " #d1eO; 6-r<<<<<<<<<<<<<<<<<<<<<<$7X>&l1 ", " X4,tC ;>2$<<<<<<<<<<<<<<<<<<<<<=#@#&3= ", " d,+ d@7h<<<<<<<<<<<<<<<<<<$wd@zoq41 ", " 6- o@&81e$<<<<<<<<<<<<<145:@>#.Zae6 ", " d>#x=1e<<<<<<<<<<#:ZZ2,= ", " *XA*-==,i$<<<<<$l6*X@X0X#o.m..4<+ ", " X>d%784886M8-a% C.@@XX@>voZ:2ae8 ", " &#@dt;-SNux-&&6=3O2X@ --dXvZ %Oi= ", " &d@0&+%;NDi<<<11$$6o*<<3 &x=$1 ", " q@v* &g8Bd8i% ; ", " yXz.8i ", " gb@nr ", " ;a8<% ", " &7- "}; /* XPM */ static char * memory10_xpm[] = { "48 48 64 1", " c None", ". c #B6DAB2CAB6DA", "X c #CF3CCB2BCF3C", "o c #71C671C671C6", "O c #8E389E79DF7D", "+ c #79E78A28CF3C", "@ c #AEBABAEAEFBE", "# c #AEBAAAAAAEBA", "$ c #D75CD34CD75C", "% c #E79DE79DE79D", "& c #9E799A69A699", "* c #492459659658", "= c #618579E7B6DA", "- c #596569A6A699", "; c #71C68A28C71B", ": c #79E78A28C71B", "> c #BEFBBAEABEFB", ", c #410351448E38", "< c #514461859E79", "1 c #69A669A669A6", "2 c #965892489658", "3 c #618561856185", "4 c #1861208130C2", "5 c #28A2410379E7", "6 c #596571C6AEBA", "7 c #000008204103", "8 c #000010404924", "9 c #082018615144", "0 c #492449244924", "q c #861782078617", "w c #082010401861", "e c #38E318611861", "r c #38E351448E38", "t c #0820104028A2", "y c #082020815965", "u c #69A67DF7B6DA", "i c #86179248B6DA", "p c #38E349248617", "a c #104028A26185", "s c #69A671C68E38", "d c #596559655965", "f c #6185618569A6", "g c #28A238E371C6", "h c #000000001040", "j c #000018615144", "k c #28A230C25144", "l c #186130C269A6", "z c #86179248D75C", "x c #A699A289A699", "c c #86178A289E79", "v c #104020815965", "b c #9E7945144103", "n c #596569A69658", "m c #38E3492471C6", "M c #208130C25965", "N c #71C608200820", "B c #30C2410369A6", "V c #9E79A289B6DA", "C c #208134D36185", "Z c #0000082038E3", "A c #D75C8E388E38", "S c #0000082030C2", "D c #A69969A669A6", "F c #492459658E38", " .XXXXo ", " O+O@O@@ #$%%%$&o ", " *@=-;:O;O@#>$%%%$.o ", " *O,-=-;-*,<12#X%%344 ", " *@55-=6789.#003q&qw0e ", " *+;;*r-8ty0X$>300334e4:uu ", " *-=;;u=9ytt1>$$>#30344wi== ", " *pp=;;;=5a3X3q$$$X.1s44:<-* ", " **==5p=uu=a32.odq$#.fw4*;,p< ", " **uu;;pg*=htt02.$30q1wtr==5=;= ", " *-=;;u-,5pyttttd.X2dwt5<-6-u=;= ", " *-=+;u=--*=-*y8tt0&ttjyg5r--*5-u= ", " *u;66=---=--**5ttt7kaalaa5pljp==== ", " **;6---z;-*<*bb#nmMa5pr,pr55pprrr*=-5***,,*--=u5 ", " 56<,#>bNe.$XnBM5rrp5555pr,**=p,**,,**-=-* ", " p<*5&>bNe&$%$$$nBkpp5555p5p*=*5*,***,*--*5 ", " ,**M2>bNe#$%2d$$$$nB955555pp-up,*p,*,,*-*5 ", " *r*g#>bNe#$%2d%2d%%$$nBv5555p*<5*,p,,,*-*5 ", " *7aapV$Ne.$%o3%2d%23%%$$nB9g5y-,,*,,,,***5 ", " 579yl,V..$%o3%23%21%23%$$C9gag3%2d%21%2o%23>gaa85,,,p,,,**5 ", " lZ7h8jjpc.$$31%21%23%23>mgllp,5,,p,*p*5 ", " yZ7hZZ8ja,i$$2o3%23Ab3>s55gpu,p,p,*,*5 ", " 8Z7ZSZZZj95s$$#o33Abe.s5p5,:$Decs*5,*z+55m5g,*5 ", " g787787SSSSS8al,sVVs,g,*+OppB5mp-5 ", " jS888887ZhSSS9a5,Fpg5*:O,5BBgp-5 ", " jZ8887887SS888ylll5,;@*5ggC5,5 ", " j878888888888hjl5r=O-5ggCgp5 ", " j778888888888Z8,;=-mg5Cmp5 ", " j888j888888888a,pgmCBB55 ", " j888888888888agCCCB,5 ", " j88jj8888889lCgBBg5 ", " j8j8jj888yg5gCm5 ", " j989j88yCgCg5 ", " 888888apmg5 ", " 8888l,p5 ", " 88g,5 "}; /* XPM */ static char *memory11_xpm[] = { /* columns rows colors chars-per-pixel */ "48 48 169 2", " c black", ". c #000500", "X c gray2", "o c #00000b", "O c #0b000b", "+ c #0b0b0b", "@ c #000011", "# c #001100", "$ c #001101", "% c #001111", "& c #110000", "* c #110011", "= c #1d0e1d", "- c #111111", "; c gray9", ": c #161c1c", "> c #111122", ", c #112211", "< c #112222", "1 c #221100", "2 c #221111", "3 c #331111", "4 c #331c11", "5 c #221122", "6 c #222211", "7 c #332211", "8 c #222222", "9 c #2d2d2d", "0 c #222233", "q c #2d2d33", "w c #223322", "e c #223333", "r c #332222", "t c #332233", "y c #332d33", "u c #333322", "i c gray20", "p c #333833", "a c #383338", "s c #393939", "d c #3e383e", "f c #333344", "g c #334433", "h c #334444", "j c #3e4444", "k c #443311", "l c #552211", "z c #443e3e", "x c #552222", "c c #553322", "v c #5a3822", "b c #443344", "n c #443e44", "m c #4f442d", "M c #444433", "N c #444444", "B c gray27", "V c #444944", "C c #444949", "Z c #494444", "A c #494449", "S c #4f4f44", "D c #494949", "F c #494f49", "G c #4f4f49", "H c #444455", "J c #445544", "K c #4f5a4f", "L c #445555", "P c #554444", "I c #554455", "U c #555544", "Y c #555555", "T c #556655", "R c #556666", "E c #5a6969", "W c #664444", "Q c #665566", "! c #666655", "~ c #66665a", "^ c #666671", "/ c #666677", "( c #667166", ") c #667766", "_ c #667777", "` c #776666", "' c #716671", "] c #776677", "[ c #717166", "{ c #777766", "} c #717171", "| c #777777", " . c #71717c", ".. c #717c71", "X. c #7c717c", "o. c #7c7c7c", "O. c #777788", "+. c #7c7c88", "@. c #778877", "#. c #778888", "$. c #884433", "%. c #885533", "&. c #995533", "*. c #887777", "=. c #aa5544", "-. c #887788", ";. c #aa8866", ":. c #cc8877", ">. c #dd8866", ",. c #888888", "<. c #888893", "1. c #888899", "2. c #889388", "3. c #889988", "4. c #889999", "5. c #938893", "6. c #998899", "7. c #939388", "8. c #999988", "9. c #939393", "0. c #939e93", "q. c #939e9e", "w. c gray60", "e. c gray62", "r. c #99aa99", "t. c #aa9999", "y. c #aa99aa", "u. c #aaaaaa", "i. c #aaaabb", "p. c #aabbaa", "a. c #aabbbb", "s. c #bbaaaa", "d. c #bbaabb", "f. c #bbbbaa", "g. c #bbbbbb", "h. c #bbccbb", "j. c #ddbb88", "k. c #c4b5b5", "l. c #ccbbbb", "z. c #eebb99", "x. c #ffbbaa", "c. c #ccbbcc", "v. c #ccccbb", "b. c #eecc88", "n. c #ffcc99", "m. c gray80", "M. c #ccccdd", "N. c #ccddcc", "B. c #ccdddd", "V. c #ddcccc", "C. c #ddccdd", "Z. c #ddddcc", "A. c #dddddd", "S. c #ddddee", "D. c #ddeedd", "F. c #ddeeee", "G. c #eedddd", "H. c #eeddee", "J. c #eeeedd", "K. c #e2e2e2", "L. c #eeeeee", "P. c #eeeeff", "I. c #eeffee", "U. c #eeffff", "Y. c #ffeeee", "T. c #ffeeff", "R. c #ffffee", "E. c gray100", "W. c None", /* pixels */ "Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y ", "Y E.", "Y W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.E.", "Y W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.E.", "Y W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.E.", "Y W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.p D G d p a W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.E.", "Y W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W. .q.e.0.9.2.o.( ' W.W.W.W.W.W.W.W.W.W.W.' ..+.p E.", "Y W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.y.m.Y.L.A.A.A.Z.C.Z.c.r.y.W.W.W.W.W.W.W.W.W.y.A.E.S n E.", "Y W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.r.H.I.L.D.S.A.A.B.A.B.A.N.M.r.y.r.W.W.W.W.W.r.M.U.E.A.N j E.", "Y W.W.W.W.W.W.W.W.W.W.W.W.W.r.c.L.T.J.H.D.G.A.A.A.C.A.C.N.C.N.C.u.y.r.W.W.y.g.T.E.T.E.] K Z E.", "Y W.W.W.W.W.W.W.W.W.W.W.y.B.L.I.L.F.L.D.S.D.A.A.A.A.A.B.A.B.C.N.M.a.y.r.y.L.E.U.E.E.E.e ^ V E.", "Y W.W.W.W.W.W.W.W.W.g.G.R.Y.L.L.L.H.D.H.D.H.A.G.A.A.Z.C.Z.C.N.C.m.V.h.G.E.E.R.E.E.E.3.Y [ Z E.", "Y @ W.W.W.W.W.W.r.c.L.T.I.P.L.P.L.L.F.H.F.H.D.S.D.A.A.A.A.A.B.C.N.C.A.T.E.E.E.E.E.E.U.f ) X.V E.", "Y W.W.W.r.s.Z.T.I.Y.L.Y.L.Y.L.L.L.H.J.H.D.H.A.G.A.A.A.A.Z.C.Z.A.L.T.E.E.E.T.E.E.E.t.w -.o.A E.", "Y W.y.p.H.E.E.I.T.I.P.I.P.I.L.L.L.L.L.D.H.D.H.D.S.D.A.B.A.B.L.U.E.E.E.U.E.E.E.U.E.J Y 3.<.F E.", "Y p k.R.E.E.E.R.T.R.T.I.Y.L.Y.L.Y.L.L.J.H.J.H.D.G.A.A.A.A.J.E.R.E.E.E.R.E.E.E.R.E.A.5 ! 6.,.A E.", "Y q K.E.E.E.U.T.U.T.I.T.I.T.L.P.L.L.L.L.F.L.D.H.D.S.A.H.U.E.E.E.E.E.E.E.E.E.E.E.E.I g / r.<.V E.", "Y 9 = L.E.E.T.R.T.I.T.L.T.L.Y.L.L.L.L.L.H.D.H.A.H.D.T.E.E.E.T.E.E.E.T.E.E.E.T.E.H.8 I | y.2.A E.", "Y E i U.E.E.E.I.T.I.T.I.P.I.L.I.L.I.L.F.L.F.A.I.E.E.E.U.E.E.E.U.E.E.E.U.E.E.E.@.0 T O.p.5.C E.", "Y W.R 2 L.E.R.T.R.T.I.Y.L.Y.L.Y.L.L.L.H.A.H.R.E.E.E.R.E.E.E.R.E.E.E.R.H.v.s.) 2 N ] ,.l.7.A E.", "Y W.W.R N E.E.E.E.I.T.I.T.I.P.I.L.L.H.F.T.E.E.E.E.E.E.E.E.I.d._ / h > # * % > i Q @.w.N.9.C E.", "Y W.W.W.T b E.T.R.T.I.T.I.Y.L.L.J.H.L.E.E.T.E.c.g.6.J 5 & - - , r i N N I U Q | 6.g.C.7.A E.", "Y W.W.W.W.L i U.E.U.E.I.P.I.P.A.P.I.d.) i e @ % 5 8 i g N T ] _ | @.-.#.,.,.,.3.6.p.C.B.9.C E.", "Y W.W.W.W.W.w P R.T.I.T.I.T.h.I , - 8 P Y Q | 6.w.u.u.d.f.d.f.l.g.l.h.l.v.c.m.m.m.C.Z.C.7.A E.", "Y W.W.W.W.W.W.h Y U.T.U.T.I.H 3.A.D.H.D.L.D.H.F.L.F.L.F.L.D.H.L.H.D.H.D.H.D.S.D.A.A.A.A.9.C E.", "Y W.W.W.W.W.W.W., ] R.T.I.T.L.t @.T.I.T.I.Y.L.L.L.L.L.L.L.H.L.L.D.H.D.H.D.G.A.A.A.A.A.A.7.z E.", "Y W.W.W.W.W.W.W.W., 1.I.T.I.T.I./ J P.I.P.I.P.I.P.I.L.L.L.L.L.L.L.D.L.D.S.D.S.A.S.D.A.B.X.X E.", "Y W.W.W.W.W.W.W.W.W., 6.R.T.I.Y.L.6.M H.I.Y.I.Y.L.Y.L.Y.L.L.J.Y.J.H.D.H.D.H.D.G.A.A.A.-.+ i E.", "Y W.W.r.y.r.*.{ :.z.x.j.>.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.;.m E.", "Y W.W./ h r 1 3 7 l c $.=.&.%.&.%.&.%.&.%.&.%.&.%.&.%.&.%.&.%.&.%.&.%.&.%.&.%.&.%.&.%.&.v 4 E.", "Y W.W.W.W.W.W.{ W c x k 2 6 * # * # * # * # 2 6 2 6 2 6 2 6 2 6 2 6 2 6 2 6 2 # * # * # O . E.", "Y W.W.W.w t w t w t w t w t B 6.8.6.3.6.8.6.T ` f.d.f.d.f.d.f.d.f.d.f.d.f.d.u.* | 6.3.6.~ y E.", "Y W.W.W.W.W.W.W.W.W.W.W.W.W.B % c.I.P.I.P.L.P.,.f L.P.I.L.L.L.I.L.F.L.F.H.@.@ u.C.N.M.N.,.s E.", "Y W.W.W.W.W.W.W.W.W.W.W.W.W.W.,. C.L.T.L.Y.L.L.p.i A.L.L.L.L.T.L.H.J.H.! g.C.N.V.m.m.} ; E.", "Y W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.| # C.I.P.I.L.L.L.N.i N.P.I.L.I.L.L.L. > g.A.N.C.N.M.) o : E.", "Y W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.| # C.L.Y.L.Y.L.L.J.t g.L.L.Y.L.C. b m.A.Z.C.Z.d.u & W.W.E.", "Y W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.| # H.L.P.L.L.L.L.D.H 4.P.I.m.% Q A.A.B.A.B.w.# $ W.W.W.E.", "Y W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.I , G.L.L.L.L.L.H.J.] ) 6. -.A.A.A.C.A.Y # I W.W.W.W.E.", "Y W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.H , S.I.L.I.L.F.L.F.i.< y.D.A.A.A.p.8 # 1.W.W.W.W.W.E.", "Y W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.I , G.L.L.L.H.J.H.D.G.A.G.A.G.,. 8 W.W.W.W.W.W.W.E.", "Y W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.t w L.L.L.L.L.F.H.D.H.D.S.8 $ T W.W.W.W.W.W.W.W.E.", "Y W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.t N L.L.L.J.H.J.H.D.y.# $ W.W.W.W.W.W.W.W.W.W.E.", "Y W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.- N L.L.L.F.L.D.Y 8 W.W.W.W.W.W.W.W.W.W.W.E.", "Y W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.* N Y.L.L.v.2 Q W.W.W.W.W.W.W.W.W.W.W.W.E.", "Y W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.* N y.L @ # Q W.W.W.W.W.W.W.W.W.W.W.W.W.E.", "Y W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.* N U y.W.W.W.W.W.W.W.W.W.W.W.W.W.W.E.", "Y W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.r.- L y.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.E.", "E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.r.y.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E." }; /* XPM */ static char *memory12_xpm[] = { /* columns rows colors chars-per-pixel */ "48 48 249 2", " c black", ". c #4f494b", "X c #7e8385", "o c #858e90", "O c #9ba2a4", "+ c #9ca8a9", "@ c #636266", "# c #6d6b73", "$ c #7d7a8b", "% c #5e5a65", "& c #444146", "* c #6d717d", "= c #8c9195", "- c #7b7b7e", "; c #9592a8", ": c #918ea5", "> c #858199", ", c #423d4a", "< c #3c354a", "1 c #090000", "2 c #7d888c", "3 c #8f9ba3", "4 c #949ba3", "5 c #8e989a", "6 c #79777c", "7 c #94999f", "8 c #a4a6ae", "9 c #9b9da9", "0 c #918da2", "q c #716d7d", "w c #4e4a5c", "e c #4e4962", "r c #423b42", "t c #64636c", "y c #8a96a0", "u c #8c939c", "i c #9ea1aa", "p c #9ea2ab", "a c #a5a6b0", "s c #9698a5", "d c #9896a6", "f c #9695a6", "g c #9391a4", "h c #8f8ca1", "j c #8b899e", "k c #585566", "l c #57536e", "z c #1b1618", "x c #5b556b", "c c #757292", "v c #a2a8af", "b c #838385", "n c #9d9eaa", "m c #999aa6", "M c #8c899e", "N c #848394", "B c #4b465b", "V c #737374", "C c #908e8d", "Z c #6b697a", "A c #7d7a98", "S c #9b9ea5", "D c #6c7176", "F c #a2a2ab", "G c #9695a8", "H c #797685", "J c #6d6985", "K c #625e75", "L c #8b8c94", "P c #656172", "I c #828b9c", "U c #7d869b", "Y c #7d8294", "T c #7b7981", "R c #a2a2ad", "E c #b1b4b4", "W c #b3b6b9", "Q c #aaadb1", "! c #8a8899", "~ c #6a6674", "^ c #a9abaa", "/ c #85819c", "( c #656373", ") c #6e7283", "_ c #a8aab1", "` c #a8abaf", "' c #a9acaf", "] c #a6a9ae", "[ c #b6b9ba", "{ c #acafb1", "} c #8d8e98", "| c #534e63", " . c #696689", ".. c #7b7693", "X. c #716f79", "o. c #2b262e", "O. c #817c94", "+. c #79768d", "@. c #696669", "#. c #89869a", "$. c #5e606c", "%. c #84848a", "&. c #aeb2b5", "*. c #adb0b3", "=. c #615c6a", "-. c #5a5673", ";. c #6e6d8e", ":. c #74747b", ">. c #8b89a0", ",. c #777a8c", "<. c #767a90", "1. c #b2b5b6", "2. c #b9bcbb", "3. c #aaadb5", "4. c #91939a", "5. c #615d72", "6. c #5e5a6d", "7. c #74728c", "8. c #b4b7b6", "9. c #706d76", "0. c #999aa2", "q. c #9996aa", "w. c #6f728b", "e. c #b8bbbd", "r. c #8d8d9c", "t. c #282327", "y. c #63616c", "u. c #69666f", "i. c #595663", "p. c #676482", "a. c #999aa9", "s. c #babdbd", "d. c #b7babc", "f. c #a6aab1", "g. c #848ca3", "h. c #504e56", "j. c #747283", "k. c #524e5c", "l. c #65637b", "z. c #bdc1be", "x. c #bec1c0", "c. c #716d90", "v. c #a09ea9", "b. c #a5a5a9", "n. c #7b7b92", "m. c #6b6a6e", "M. c #6f6c8b", "N. c #6d6a8d", "B. c #686587", "V. c #9da1a6", "C. c #8c8b8d", "Z. c #7d7d95", "A. c #545355", "S. c #716e8e", "D. c #6a698a", "F. c #5f5d7b", "G. c #615c7d", "H. c #6d6a8b", "J. c #84849b", "K. c #625d67", "L. c #5e5a79", "P. c #7d7d85", "I. c #726e8a", "U. c #79758a", "Y. c #6a657b", "T. c #656182", "R. c #676487", "E. c #555363", "W. c #817f8d", "Q. c #949496", "!. c #a0a2a5", "~. c #7d7992", "^. c #827d99", "/. c #7d7995", "(. c #625e82", "). c #625c83", "_. c #817d86", "`. c #89859d", "'. c #4c464f", "]. c #524d6d", "[. c #767491", "{. c #716e82", "}. c #4b4652", "|. c #413c3c", " X c #5f5a81", ".X c #59565f", "XX c #494554", "oX c #464254", "OX c #433d5b", "+X c #474064", "@X c #727175", "#X c #4e4a54", "$X c #4d4a5a", "%X c #3e3a45", "&X c #383837", "*X c #827f9d", "=X c #312d3b", "-X c #6f6d90", ";X c #676389", ":X c #9b9bac", ">X c #6b6882", ",X c #3f3a51", " % , < 1 GXGXGXGXGXGXGXGXGXGXGXGXGXGXGX", "GXGXGXGXGXGXGXGXGXGXGXGXGX @ 2 3 3 4 5 6 7 8 8 9 ; 0 0 0 0 : q w e GXGXGXGXGXGXGXGXGXGXGXGXGXGX", "GXGXGXGXGXGXGXGXGXGXGXGXr t y u 4 i p X a 9 9 9 s d f g 0 0 h h j k l z GXGXGXGXGXGXGXGXGXGXGXGX", "GXGXGXGXGXGXGXGXGXGXGXx c k 4 p v v b p n n i i n 9 9 m f g 0 h M N B V C GXGXGXGXGXGXGXGXGXGXGX", "GXGXGXGXGXGXGXGXGXGXZ A k = a S u u D 8 F F F F F 8 9 m s f g 0 G H J K L C GXGXGXGXGXGXGXGXGX", "GXGXGXGXGXGXGXGXGXP A k S 4 I U I Y T 8 R 8 a 8 R E W Q n f f G t ! n j ~ ^ - GXGXGXGXGXGXGXGXGX", "GXGXGXGXGXGXGXGX% / ( X Y Y Y U ) # _ a ` ` ' ' ] 8 [ [ W { } | ...h 8 n X.[ V GXGXGXGXGXGXGXGX", "GXGXGXGXGXGXGXo.O.+.@.#.$.Y U ( %.Q ] ` ' { &.&.*.` &.[ [ W Q T =.-.;.j _ n :.E & GXGXGXGXGXGXGX", "GXGXGXGXGXGXGXq >.H >.~ ,.<.t 7 8 8 ` ' { &.1.1.&.*._ 2.[ W &.&.3.4.t 5.h { } } T GXGXGXGXGXGXGX", "GXGXGXGXGXGXGX> ; h >.6.7.t 8 F 8 ` ' &.W [ [ [ 8.&.{ 1.[ [ W Q a a a N P 0 8 9.0.GXGXGXGXGXGXGX", "GXGXGXGXGXGXGXq.T H =.w.% p i F 8 ` Q 1.[ e.2.e.[ W &.*.2.[ W Q ] 8 i a t > F r.b t.GXGXGXGXGXGX", "GXGXGXGXGXGXGXL y.u.i.p.} a.F F 8 ' { W [ 2.s.2.[ 1.&.Q d.[ W Q f.8 a 2 ) g.F n T h.GXGXGXGXGXGX", "GXGXGXGXGXGXGX4.j.k.l.l.! 9 i F 8 ` { 1.d.2.z.s.x.2.W ' W d.W Q _ 3.:.) g.g.f.8 6 t GXGXGXGXGXGX", "GXGXGXGXGXGXGX0.Z c.;.l.! m v.F 8 ` Q &.W d.2.b.| ~ T S W e.[ &.%.( U <.n.n.#.i 6 :.GXGXGXGXGXGX", "GXGXGXGXGXGXGXm.O.M.N.l.N m a.F 8 f.Q &.8.W 2.6. . .B.-.5.V.C.( <.g.g.w j.Z.Y d h.X.GXGXGXGXGXGX", "GXGXGXGXGXGXGXA.> S.D.F.N f a.i 8 _ Q Q &.1.L G.H.D.N.S.7.7.7.U U g.Z.~ % > J.i.6.K.GXGXGXGXGXGX", "GXGXGXGXGXGXGX, / H.D.L.N f a.n %.9.P.Q ] 1.6.H.D.N.I.I.;.U U U g.Z.Z N ! i.i.U.Y.P GXGXGXGXGXGX", "GXGXGXGXGXGXGX. c.T.R.E.: g W.Q.!.[ *.&.Q P.G.D.N.M.I.S.~.9 a a 4 > y.j > > ^./.6.~ GXGXGXGXGXGX", "GXGXGXGXGXGXGXr (.).T.x g i W z.z.W Q Q f._.E.c.N.7.7.#.F z.W F 8 s ! =.`.^./.O.E.=.GXGXGXGXGXGX", "GXGXGXGXGXGXGX'.).).].+._ 1.8 n ! T :.m R a @.6.[.x {.N Z.g.J.Y > #.#.j.Y.^.~.A , }.GXGXGXGXGXGX", "GXGXGXGXGXGXGX|.]. XE.g F q..XXXoXOX+X, # n m @X6.| ( /.k., oXXX#X$Xh.N m.U././.%X& GXGXGXGXGXGX", "GXGXGXGXGXGXGX&X( B *X`.P =XB -XR.(.).;XXX:XX.u.>XP l.+.,X(.R.N.c...% .Xu i./...r M ! P 3X) 5.k i.z GXGXGXGXGXGX", "GXGXGXGXGXGXGXGX6X7X..XX: `.=.: `.`.`.O.%X$ `./ Z.Z.Z.8X8 i.`.`.M h n # 3X* 6.1X9X0XGXGXGXGXGXGX", "GXGXGXGXGXGXGXGXqX, A XX`.^.=.a.g g ! k.e O.> 7X3Xw #.% :X! % W.M m 8 Z A.( K -.8XGXGXGXGXGXGXGX", "GXGXGXGXGXGXGXGXwXeXN.K 6.*X@ _ F 8 w 2XrXU.7X~ @XP.i..XG h `.j.k.8 3.'.A.Z B.E.( GXGXGXGXGXGXGX", "GXGXGXGXGXGXGXGX l.c c.eXY.K tX` % G.yX| eXK F f.%.& H % : `.*X9.uX@X7XiXk.E.7.E.GXGXGXGXGXGXGX", "GXGXGXGXGXGXGXGXGXJ ~.N.c.XXoX%X%XpX$X>Xl.eXK %.G ; k.%.H A.k.h.3X8X@ L @Xl.aXk & GXGXGXGXGXGXGX", "GXGXGXGXGXGXGXGXGX| T p. .N.c.p.G.[.M.XXE.B k H 6.`.> E.u sXsX4 0.4 @X6.<.P $X6.GXGXGXGXGXGXGXGX", "GXGXGXGXGXGXGXGXGX % dXY. .B.D.N.H.N.c.;.rXq .Xk./.J t iXiXsXP.y.6.D.Y h w [.o.GXGXGXGXGXGXGXGX", "GXGXGXGXGXGXGXGXGXGXfXm.X...R.B.B.B. .D.;.gXY.E.E.c XXsXu sX# L.N.N.-X$ E.1XhXGXGXGXGXGXGXGXGXGX", "GXGXGXGXGXGXGXGXGXGXGX .XXXL.T.jXB.B.B.B.T.gX'.%XkX3XsXiXsXX -.T.N.D.eXL.wXGXGXGXGXGXGXGXGXGXGX", "GXGXGXGXGXGXGXGXGXGXGXGXGXlXgX=X).G.).).).T.).N u P.} u 4.sXO 6.).pX%XN.w GXGXGXGXGXGXGXGXGXGXGX", "GXGXGXGXGXGXGXGXGXGXGXGXGXL 3XhXzX XxXxXxXxXM.iX} u u 4.sXsX4 # oX@ y.N.gXGXGXGXGXGXGXGXGXGXGXGX", "GXGXGXGXGXGXGXGXGXGXGXGXGX@XkXpXrXe cXcXzXzX+.iXiXiX4.sXsX7 9 % A.- 7 -.t.GXGXGXGXGXGXGXGXGXGXGX", "GXGXGXGXGXGXGXGXGXGXGXGXGX:.:.).-.vXyXbX-.nX#.} iX4.iX7 mX%.- D 4.- i w GXGXGXGXGXGXGXGXGXGXGX", "GXGXGXGXGXGXGXGXGXGXGXGXGX@X:.;X( / I.-.;X}.V.3XO m.- @ = @ V.L %.@XC.OXGXGXGXGXGXGXGXGXGXGXGXGX", "GXGXGXGXGXGXGXGXGXGXGXGXGX3Xg 9XZ {.:.0 `.%.i V.V.S i 0.8 !.- MXQ.Q.P rXGXGXGXGXGXGXGXGXGXGXGXGX", "GXGXGXGXGXGXGXGXGXGXGXGXGX|.g ~ h.+.~.q j.iX6 %.- %.- Q.NXBXb.C.V E :.6XGXGXGXGXGXGXGXGXGXGXGXGX", "GXGXGXGXGXGXGXGXGXGXGXGXGX%Xr.j.% 9XZ N > S ` b.!.' ] ' 8.dX@.C.1.1.u.0XGXGXGXGXGXGXGXGXGXGXGXGX", "GXGXGXGXGXGXGXGXGXGXGXGXGXwXN Y Z n %.! ~ b %.MXV.m.Q.V MXQ.8.1.8.dX6 GXGXGXGXGXGXGXGXGXGXGXGXGX", "GXGXGXGXGXGXGXGXGXGXGXGXGXGX{.J.u.3.F 8 8 0.^ !.^ tX^ 8.1.[ 8.[ 2.Q.b GXGXGXGXGXGXGXGXGXGXGXGXGX", "GXGXGXGXGXGXGXGXGXGXGXGXGXGXfX~ 7.C.1.{ { Q 1.8.8.[ 2.[ 2.2.2.VXMXQ.CXGXGXGXGXGXGXGXGXGXGXGXGXGX", "GXGXGXGXGXGXGXGXGXGXGXGXGXGXGX P l.^ ZX[ e.[ 2.2.2.2.2.z.VX2.C.MXAXGXGXGXGXGXGXGXGXGXGXGXGXGXGX", "GXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGX Y.~.VXSXSXSXSXSXSXSXSXSXDXDXFXr GXGXGXGXGXGXGXGXGXGXGXGXGXGXGX" }; /* XPM */ static char * memory13_xpm[] = { "48 48 63 1", " c None", ". c #CF3CCB2BCF3C", "X c #EFBEEBADEFBE", "o c #D75CD34CD75C", "O c #514451445144", "+ c #9E799A699E79", "@ c #FFFFFBEEFFFF", "# c #E79DE38DE79D", "$ c #082008200820", "% c #965892489658", "& c #A699A289A699", "* c #BEFBBAEABEFB", "= c #410341034103", "- c #861782078617", "; c #8E388A288E38", ": c #DF7DDB6CDF7D", "> c #F7DEF3CEF7DE", ", c #208120812081", "< c #000000000000", "1 c #28A228A228A2", "2 c #B6DAB2CAB6DA", "3 c #30C230C230C2", "4 c #596559655965", "5 c #96589A699E79", "6 c #71C671C671C6", "7 c #69A669A669A6", "8 c #618561856185", "9 c #30C228A228A2", "0 c #DF7DD34CDF7D", "q c #BEFBB2CABEFB", "w c #492449244924", "e c #104010401040", "r c #104010400820", "t c #8E3892489658", "y c #AEBAB2CAAEBA", "u c #9E7992489E79", "i c #186118611861", "p c #86178A288617", "a c #79E779E779E7", "s c #596559655144", "d c #C71BC30BC71B", "f c #F7DEFBEEFFFF", "g c #AEBAA289A699", "h c #208128A22081", "j c #E79DEBADE79D", "k c #28A230C230C2", "l c #38E338E338E3", "z c #FFFFF3CEF7DE", "x c #9E7992489658", "c c #79E771C671C6", "v c #EFBEE38DE79D", "b c #BEFBC30BC71B", "n c #A699A2899E79", "m c #C71BCB2BCF3C", "M c #492451445144", "N c #861779E78617", "B c #CF3CD34CCF3C", "V c #AEBAAAAAB6DA", "C c #A699A289AEBA", "Z c #D75CCB2BCF3C", "A c #F7DEF3CEEFBE", "S c #79E782078617", "D c #596551445144", " ", " .X ", " XoO+ ", " @#O$% &X % ", " *@#%=$- o@o$; ", " :>:o%,>&= ", " >:;-67-88=9,11 @@@#.0-= ", " @qO4w1,13er$$,7ty u&.O3 ", " &@4e,,ie<<<<<<<+ws-21<<<<<<<<<<<<<<<<<<:oo@* +8$<<<<<<<<<<<<<<<<<<<<<<>f>Xg= ", " o@@@@@2&6e<<<<<<<<<<<<<<<<<<<<<<<#.:%<% ", " @..2&-l$<<<<<<<<<<<<<<<<<<<<<<<<<X*x$6 ", " .@+;63r<<<<<<<<<<<<<<<<<<<<<<<<<<<<6>Xd6i ", " X*uck$<<<<<<<<<<<<<<<<<<<<<<<<<<<<3v#:lO ", " b>n6l$<<<<<<<<<<<<<<<<<<<<<<<<<<<<,0:%< ", " X*al$<<<<<<<<<<<<<<<<<<<<<<<<<<<<aM$<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*;$% ", " 2@26<<<<<<<<<<<<<<<<<<<<<<<<<<<<&4$<<<<<<<<<<<<<<<<<<<<<<<<<<<*uaw,<<<<<<<<<<<<<<<<<<<<<<<<<<2awl,,<<<<<<<<<<<<<<<<<<<<<<<<<<8:Ba1 ", " .XV3e$ekw$<<<<<<<<<<<<<<<<<<<<<<<<1+>b11 ", " #d1eO; 6-r<<<<<<<<<<<<<<<<<<<<<<$7X>&l1 ", " X4,tC ;>2$<<<<<<<<<<<<<<<<<<<<<=#@#&3= ", " d,+ d@7h<<<<<<<<<<<<<<<<<<$wd@zoq41 ", " 6- o@&81e$<<<<<<<<<<<<<145:@>#.Zae6 ", " d>#x=1e<<<<<<<<<<#:ZZ2,= ", " *XA*-==,i$<<<<<$l6*X@X0X#o.m..4<+ ", " X>d%784886M8-a% C.@@XX@>voZ:2ae8 ", " &#@dt;-SNux-&&6=3O2X@ --dXvZ %Oi= ", " &d@0&+%;NDi<<<11$$6o*<<3 &x=$1 ", " q@v* &g8Bd8i% ; ", " yXz.8i ", " gb@nr ", " ;a8<% ", " &7- "}; /* XPM */ static char *memory14_xpm[] = { /* columns rows colors chars-per-pixel */ "48 48 220 2", " c black", ". c #000006", "X c #02010a", "o c #02040c", "O c #070000", "+ c #0d0001", "@ c #090000", "# c #710100", "$ c #810100", "% c #8a0000", "& c #8e0000", "* c #860000", "= c #790000", "- c #7d0001", "; c #4d0101", ": c #220711", "> c #a50000", ", c #bb0200", "< c #cc0600", "1 c #dc1202", "2 c #dc3213", "3 c #cb572f", "4 c #ca5b33", "5 c #da200d", "6 c #ea0600", "7 c #ea0100", "8 c #c90100", "9 c #011b0b", "0 c #950101", "q c #cd0e01", "w c #e31901", "e c #f12b09", "r c #f84217", "t c #fd652e", "y c #fd713d", "u c #fd7644", "i c #fc6c34", "p c #f93e11", "a c #f71b01", "s c #f51000", "d c #e10600", "f c #a10000", "g c #2f0d09", "h c #b30000", "j c #d50100", "k c #d90a00", "l c #e62106", "z c #f43616", "x c #fb5121", "c c #f73109", "v c #f92302", "b c #fa1500", "n c #c30000", "m c #c90900", "M c #d41908", "N c #df1d0d", "B c #ec2814", "V c #f54729", "C c #f94b2d", "Z c #fd6938", "A c #f94a18", "S c #ea1000", "D c #020a02", "F c #850400", "G c #b30600", "H c #b90000", "J c #c70000", "K c #ce0000", "L c #d20000", "P c #eb1d02", "I c #f01600", "U c #e31301", "Y c #9d0000", "T c #bf0000", "R c #b70000", "E c #ba0500", "W c #c10700", "Q c #d50a00", "! c #dd0403", "~ c #540201", "^ c #2d0001", "/ c #b60100", "( c #ae0000", ") c #3b0203", "_ c #e60000", "` c #e20001", "' c #da0000", "] c #920100", "[ c #9a0000", "{ c #a90000", "} c #fa0000", "| c #f50000", " . c #f10000", ".. c #de0101", "X. c #430202", "o. c #0c0b07", "O. c #270200", "+. c #490a0b", "@. c #3e8f85", "#. c #507b73", "$. c #4d675d", "%. c #5c786d", "&. c #8b4d46", "*. c #274441", "=. c #650000", "-. c #06100b", ";. c #476e67", ":. c #7d655d", ">. c #68564e", ",. c #033839", "<. c #001c10", "1. c #d30401", "2. c #6f9488", "3. c #857c73", "4. c #816d60", "5. c #1f8d87", "6. c #001007", "7. c #370103", "8. c #a18953", "9. c #97846b", "0. c #8f4e21", "q. c #a04c1f", "w. c #8f201f", "e. c #9a0707", "r. c #a59e87", "t. c #60574e", "y. c #d95110", "u. c #e60c00", "i. c #020202", "p. c #990802", "a. c #ef5d0e", "s. c #3b4e4d", "d. c #1e1d1c", "f. c #c1a14b", "g. c #f82c00", "h. c #5b593b", "j. c #dc2b00", "k. c #c20900", "l. c #320002", "z. c #c6a334", "x. c #78756f", "c. c #33302e", "v. c #4a4846", "b. c #6b7d5a", "n. c #d41100", "m. c #620100", "M. c #f32b00", "N. c #ec5600", "B. c #675832", "V. c #494542", "C. c #3d3d39", "Z. c #868050", "A. c #cc1200", "S. c #d60d01", "D. c #e22c00", "F. c #c98154", "G. c #757066", "H. c #565347", "J. c #23211b", "K. c #353231", "L. c #816b37", "P. c #290300", "I. c #d48a76", "U. c #141310", "Y. c #68615f", "T. c #a0876b", "R. c #bd1a00", "E. c #510905", "W. c #7b7964", "Q. c #6d685c", "!. c #945e3a", "~. c #b51b00", "^. c #be0500", "/. c #1f0000", "(. c #b20e00", "). c #b4704a", "_. c #7b683a", "`. c #a18a73", "'. c #bc1500", "]. c #dd0d01", "[. c #ba0b00", "{. c #ae1300", "}. c #b46e61", "|. c #050404", " X c #4c5549", ".X c #8996a0", "XX c #cd510f", "oX c #af0700", "OX c #ac6d68", "+X c #b07259", "@X c #b12100", "#X c #7f672a", "$X c #504c43", "%X c #7f2500", "&X c #283104", "*X c #ff9900", "=X c #4f2100", "-X c #b97558", ";X c #7b0700", ":X c #5d0000", ">X c #680000", ",X c #0c2c00", " , < 1 2 3 4 3 5 1 6 7 8 9 uX uXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuX", "uXuXuXuXuXuXuXuXuXuXuXuXuX 0 q w e r t y u u i p a s d f g uXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuX", "uXuXuXuXuXuXuXuXuXuXuXuXuXh j k l z x t y u u i t c v b 6 + uXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuX", "uXuXuXuXuXuXuXuXuXuXuXuXuXf n m q M N B z V C Z i A c v a S D F uXuXuXuXuXuXuXuXuXuXuXuXuXuXuX", "uXuXuXuXuXuXuXuXuXuXuXuXuX* h h h G H , J K L k j 1 l P P I I U m + uXuXuXuXuXuXuXuXuXuXuXuXuXuX", "uXuXuXuXuXuXuXuXuXuXuXuX+ Y T n H R R H , n J J , H G E W < Q k ! j ~ uXuXuXuXuXuXuXuXuXuXuXuXuX", "uXuXuXuXuXuXuXuXuXuXuXuX^ / K j L K 8 n n J J J n ( > f > ( h H J L n uXuXuXuXuXuXuXuXuXuXuXuXuX", "uXuXuXuXuXuXuXuXuXuXuXuX) 8 ! _ _ ` ' j L j j L J h Y ] & & ] [ { J 8 uXuXuXuXuXuXuXuXuXuXuXuXuX", "uXuXuXuXuXuXuXuXuXuXuXuX~ K _ } } } | .7 _ _ ..K R 0 - X.o.O.+.% , K uXuXuXuXuXuXuXuXuXuXuXuXuX", "uXuXuXuXuXuXuXuXuXuXuXuX~ K _ | @.#.$.%.&.*.| ` L H [ =.-.uXuXD ; , L uXuXuXuXuXuXuXuXuXuXuXuXuX", "uXuXuXuXuXuXuXuXuXuXuXuXX.L _ | ;.:.>.:.:.,.| ` j , f =.<.uXuXuX~ 8 K uXuXuXuXuXuXuXuXuXuXuXuXuX", "uXuXuXuXuXuXuXuXuXuXuXuX) 1._ | 2.3.4.3.:.5. ...L , { # 6.uXuXuX0 < n uXuXuXuXuXuXuXuXuXuXuXuXuX", "uXuXuXuXuXuXuXuXuXuXuXuX7.! 7 2 8.9.0.q.w.w.7 ' K , ( * uXuXuXe.L h uXuXuXuXuXuXuXuXuXuXuXuXuX", "uXuXuXuXuXuXuXuXuXuXuXuX7.` 6 i D r.t.y.P u.1.8 , h ] i.uXuXuXp.K ( uXuXuXuXuXuXuXuXuXuXuXuXuX", "uXuXuXuXuXuXuXuXuXuXuXuX7.! d a.s. d.s.f.f.1 < , h [ . uXuXuX0 J { uXuXuXuXuXuXuXuXuXuXuXuXuX", "uXuXuXuXuXuXuXuXuXuXuXuX7...u.g.f.2.. h.j.k., R [ uXuXuXe., f uXuXuXuXuXuXuXuXuXuXuXuXuX", "uXuXuXuXuXuXuXuXuXuXuXuXl.! u.c z.O d.x.c.v.b.n.k.H h Y ; uXuXuXm., Y uXuXuXuXuXuXuXuXuXuXuXuXuX", "uXuXuXuXuXuXuXuXuXuXuXuXl.1.1 M.N.B.. V.C.Z.A.k.R ( [ o uXuXuX=., f uXuXuXuXuXuXuXuXuXuXuXuXuX", "uXuXuXuXuXuXuXuXuXuXuXuX^ n S.D.F.G.H.J.C.K.L.A.E h h Y O.uXuX { J { uXuXuXuXuXuXuXuXuXuXuXuXuX", "uXuXuXuXuXuXuXuXuXuXuXuXP.R A.j.I.D i.U.Y.T.R.E R h > E.uXuX j L h uXuXuXuXuXuXuXuXuXuXuXuXuX", "uXuXuXuXuXuXuXuXuXuXuXuXP.G n.j.I.W.Q.d.U. !.~.^., , R Y E.=.Y H ..H uXuXuXuXuXuXuXuXuXuXuXuXuX", "uXuXuXuXuXuXuXuXuXuXuXuX/.(.)._.`.J. !.'.J 8 K K K 8 8 L ].U [.uXuXuXuXuXuXuXuXuXuXuXuXuX", "uXuXuXuXuXuXuXuXuXuXuXuX/.{.}.|.8.Z.r.|. X.XXXA.J K 1.k 1 ].1 U U U oXuXuXuXuXuXuXuXuXuXuXuXuXuX", "uXuXuXuXuXuXuXuXuXuXuXuX/.{.OX B.4.d. F.n.K K 1.S.1 1 U U U k { uXuXuXuXuXuXuXuXuXuXuXuXuX", "uXuXuXuXuXuXuXuXuXuXuXuXO.(.+X|.|.|.o.G. }.n.8 8 8 < Q S.S.S.S.< f uXuXuXuXuXuXuXuXuXuXuXuXuX", "uXuXuXuXuXuXuXuXuXuXuXuXl.G @X#X X$X_.z. +X{.( H J H ( h J 8 8 , Y uXuXuXuXuXuXuXuXuXuXuXuXuX", "uXuXuXuXuXuXuXuXuXuXuXuX) oX%X&X*X=X&XJ.J. -X;Xm.:X=.>X= # f H n H [ uXuXuXuXuXuXuXuXuXuXuXuXuX", "uXuXuXuXuXuXuXuXuXuXuXuXX.{ %X,XX# 0 , H [ uXuXuXuXuXuXuXuXuXuXuXuXuX", "uXuXuXuXuXuXuXuXuXuXuXuXX.> 2X3X %X3X { { > > f f > Y * uXuXuXuXuXuXuXuXuXuXuXuXuXuX", "uXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuX", "uXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuX" }; /* XPM */ static char * memory15_xpm[] = { "48 48 104 2", " c None", ". c #30C230C22081", "X c #30C230C230C2", "o c #30C2410330C2", "O c #410330C24103", "+ c #410341034103", "@ c #514451445144", "# c #514461855144", "$ c #618551446185", "% c #618561856185", "& c #71C671C671C6", "* c #71C6820771C6", "= c #965882078617", "- c #861792488617", "; c #965892489658", ": c #9658A2899658", "> c #9E79A2899E79", ", c #AEBAAEBA9E79", "< c #AEBAAEBAAEBA", "1 c #AEBABEFBAEBA", "2 c #BEFBBEFBBEFB", "3 c #CF3CBEFBCF3C", "4 c #CF3CCF3CCF3C", "5 c #DF7DCF3CCF3C", "6 c #DF7DDF7DCF3C", "7 c #DF7DDF7DDF7D", "8 c #EFBEDF7DDF7D", "9 c #DF7DEFBEDF7D", "0 c #EFBEDF7DEFBE", "q c #EFBEEFBEDF7D", "w c #208130C22081", "e c #410351445144", "r c #514451446185", "t c #71C6618571C6", "y c #861771C68617", "u c #9E7992489E79", "i c #9E79AEBA9E79", "p c #BEFBAEBABEFB", "a c #BEFBCF3CBEFB", "s c #BEFBCF3CCF3C", "d c #CF3CCF3CDF7D", "f c #CF3CDF7DCF3C", "g c #DF7DDF7DEFBE", "h c #208120812081", "j c #30C2208130C2", "k c #410330C230C2", "l c #4103410330C2", "z c #410351444103", "x c #618551445144", "c c #618561855144", "v c #618571C66185", "b c #861771C671C6", "n c #8617820771C6", "m c #965882079658", "M c #9E7992489658", "N c #AEBAA289AEBA", "B c #BEFBAEBAAEBA", "V c #DF7DCF3CDF7D", "C c #CF3CDF7DDF7D", "Z c #208120811040", "A c #965892488617", "S c #104020812081", "D c #861782078617", "F c #861792489658", "G c #965892489E79", "H c #104020811040", "J c #208110402081", "K c #30C220812081", "L c #BEFBBEFBCF3C", "P c #104010401040", "I c #208110401040", "U c #618571C671C6", "Y c #71C671C68617", "T c #71C682078617", "R c #CF3CBEFBBEFB", "E c #CF3CCF3CBEFB", "W c #000010401040", "Q c #104010402081", "! c #9E79AEBAAEBA", "~ c #104010400000", "^ c #AEBAA2899E79", "/ c #71C671C66185", "( c #000010400000", ") c #000000000000", "_ c #104000001040", "` c #2081208130C2", "' c #9658A2899E79", "] c #104000000000", "[ c #000000001040", "{ c #30C241034103", "} c #9E79A289AEBA", "| c #AEBABEFBBEFB", " . c #514461856185", ".. c #9E79A2899658", "X. c #71C661856185", "o. c #30C230C24103", "O. c #514441035144", "+. c #514451444103", "@. c #410341035144", "#. c #AEBAAEBABEFB", "$. c #208130C230C2", "%. c #6185618571C6", "&. c #514441034103", "*. c #861782079658", " . X o O + @ # $ % & * = - ; : > , < 1 2 2 3 4 5 6 7 7 8 9 0 q ", " w X X O + @ e r % t & y - ; : u i < < p a 3 s d f 7 7 g 9 0 9 ; ", " h j X k l + z x c t v b n m ; M > N < B 2 2 a 3 4 V 6 7 7 0 9 m ; ", " h h w X f d f d f V f V f 7 f 7 C 7 f V f V f d f V f 7 9 g 9 m ; ; ", " Z h w j - 4 4 5 4 5 4 5 4 V f V 6 V f V f V 4 5 4 5 4 V 7 7 7 m A ; ; ", " S h h j - D s 4 4 4 4 4 4 4 4 d f V f d f d 4 d 4 4 4 V C 7 7 m - ; F G ", " H J Z K * D D m ; M 5 4 V 7 = D m - ; ; ", " H h S h * y D L F ; : 4 f V C D D m a ; ; G ", " P I H J & b n 2 2 m A M 3 4 5 f y D = 2 2 A ; ; ", " P P H J U Y & p 1 2 - ; : 4 4 d f y T D 1 p 1 ; F G ", " P P H J % t & < < < m ; u R E 4 f b * y B < < A ; ; ", " W P P Q % t v < ! < - ; : L a 4 4 & * y < < ! ; ; G ", " ~ P ~ I c $ % > ^ > m ; M 2 2 3 4 t / b ^ i ^ ; M ; ", " ( P W P # $ % > > > F ; : p a 3 s t U & > > > ; ; G ", " ) _ ( _ @ $ # M ; u m ; u p 2 2 a % v t M ; u ; M ; ", " ( _ ( P P P H h h ` w X o : ; F F ; : & * D - G ' > i < 1 2 a % v t : ; F ; : u ", " ) ] ( _ ~ P P I Z h w j X O m - m ; ; M & y - m ; > i N < 2 2 $ c % m - m ; M : ", ") [ ( _ W P P Q H h h j X O { D D - F G : y T m ; u > } < p | r .% D D - G : u ", "V f 5 4 5 f V f V f V f V f V y * y m ; u f 5 f V f 5 4 V f x @ $ y * y : u ..", "4 d f 4 f d f d 4 d f V f V f U & U F G : d f d f d f 4 4 d @ r # U & U G : > ", "3 4 3 E 4 E 4 4 3 4 4 4 5 4 5 t v X.; ; u 4 4 4 4 E 4 E 3 4 @ @ x t v X.; u ..", "a 4 a o.{ + .% v ; G > 3 a 4 e @ # .% v u ' > ", "3 2 3 X O o $ # $ ; ; u 2 3 2 O.+.@ $ # $ : u > ", "a 2 a X o + @ @ @ ; u ' 2 2 2 z @ @ @ @ @ u > } ", "p < p X k l O.z O.; : u 1 p < O.+.@ O.z O...> i ", "1 < 1 o.o + @.z @.; G > #.1 < z O.@ + @.z > > } ", "N , N X O o l + o ; ; u 1 1 1 O.+.@ O l + : u > ", "i } i o.o + O o o.; u o + z @ # % v } i } e @ @ } < #.| L a 4 f V o o.o G ' > ", "> ..u o O + . X . ; o O + O.@ $ % & u u ..@ @ x , < 1 2 2 3 4 5 6 X . X ; u ..", "' u : O + + j $.j $.o.{ O.e r % %.U G : u @ r # < < p 2 3 s d f 7 $.j $.u : u ", "; A M l + + h j . K h j h K h h h h ; ; A x @ $ h h h h h K h j 6 7 7 0 : u ..", "- m - + { @. h h w %.w h h h h h S h S m - m # r # h S h S h h h f 7 9 g F G : ", "y D D l + + Z h h t % h Z J Z J Z J Z J D y D x # $ H J Z J Z J f V 7 7 - M ; ", "* y * + z O. S h h & U t y * y @ $ . 4 d C 7 - m ; ", "& / b l + + P J Z y & t & & / x c $ E 5 4 V n = D ", "v %.v + z O. H J H D * & & v %.# % . a 4 f V * D - ", "X.% % + &.z P P H D n y c $ % $ c $ a 3 4 V * y D ", "# $ # + z @ P P H J m - D $ # $ # $ % 2 3 4 d * y T ", "@ @ x + + z W P P Q m D m @ @ @ $ c % 2 R E 4 & b * ", "z O.e + z @ P ~ I ; ; *. @ z O. .% % L s 4 U & * ", "&.+ &.l &.+.W P M ; m + &.+ $ c X.2 3 v t & ", "{ + { @.z O._ u ' ; + { + .$ % 3 v t & ", "O o k + O.P P P H h h ` w X o l + z @ c X./ b n m ; u o O o $ % % % t v ", "$.X $.@._ ~ P P I Z h w j X O + + @ # % v & * D - ; : X $.X .% v %.v ", "j . j _ W P P Q H h h j X O { + &.@ $ c t & y D m ; > . j . % c X.% ", "w j w ` w j w ` w ` h ` h h S h h h h ` h ` w ` w j w ` w j .% % ", "h h K h h h h h h h J h J H J Z J H J h h h h h h h J h h h $ % ", "S h h h H h S h S h S h H Q H J H Q H h H h S h S h S h S h . "}; /* XPM */ static char * memory16_xpm[] = { "48 48 99 2", " c None", ". c #208120811040", "X c #208110402081", "o c #208120812081", "O c #30C220812081", "+ c #30C2208130C2", "@ c #104020812081", "# c #208130C22081", "$ c #208130C230C2", "% c #30C230C22081", "& c #208110401040", "* c #104010401040", "= c #2081208130C2", "- c #30C230C230C2", "; c #30C230C24103", ": c #104020811040", "> c #410330C230C2", ", c #30C241034103", "< c #410341034103", "1 c #4103410330C2", "2 c #30C2410330C2", "3 c #410330C24103", "4 c #410351444103", "5 c #514441034103", "6 c #514441035144", "7 c #410341035144", "8 c #514451445144", "9 c #618551446185", "0 c #514461855144", "q c #514451446185", "w c #410351445144", "e c #BEFBCF3CCF3C", "r c #CF3CCF3CCF3C", "t c #71C6618571C6", "y c #618561855144", "u c #CF3CBEFBCF3C", "i c #BEFBCF3CBEFB", "p c #618561856185", "a c #618571C66185", "s c #6185618571C6", "d c #71C6820771C6", "f c #861771C671C6", "g c #71C671C66185", "h c #BEFBBEFBBEFB", "j c #CF3CBEFBBEFB", "k c #861782078617", "l c #71C671C671C6", "z c #965882079658", "x c #861771C68617", "c c #BEFBBEFBAEBA", "v c #BEFBAEBABEFB", "b c #AEBABEFBAEBA", "n c #514461856185", "m c #861792489658", "M c #71C682078617", "N c #AEBAAEBABEFB", "B c #514451444103", "V c #618551445144", "C c #71C661856185", "Z c #965892489658", "A c #BEFBAEBAAEBA", "S c #AEBAAEBAAEBA", "D c #618571C671C6", "F c #9E79A2899E79", "G c #9658A2899658", "H c #965892489E79", "J c #9E79AEBAAEBA", "K c #AEBAA289AEBA", "L c #9E79A2899658", "P c #9E7992489E79", "I c #AEBAA2899E79", "U c #71C671C68617", "Y c #9E79AEBA9E79", "T c #9658A2899E79", "R c #8617820771C6", "E c #BEFBBEFBCF3C", "W c #AEBABEFBBEFB", "Q c #861792488617", "! c #965882078617", "~ c #861782079658", "^ c #DF7DCF3CDF7D", "/ c #DF7DCF3CCF3C", "( c #CF3CDF7DCF3C", ") c #9E7992489658", "_ c #DF7DDF7DCF3C", "` c #DF7DDF7DEFBE", "' c #DF7DDF7DDF7D", "] c #CF3CDF7DDF7D", "[ c #965892488617", "{ c #EFBEDF7DDF7D", "} c #9E79A289AEBA", "| c #DF7DEFBEDF7D", " . c #EFBEEFBEDF7D", ".. c #EFBEDF7DEFBE", "X. c #EFBEEFBEEFBE", "o. c #CF3CCF3CBEFB", "O. c #CF3CCF3CDF7D", "+. c #DF7DEFBEEFBE", "@. c #AEBAAEBA9E79", " . X o O o + ", " o @ o # + $ ", " X o O o + % & * ", " @ = # - - ; : X ", " o O % + % > o X : & ", " = # - - ; , = @ o : ", " O % + % > - + o o o X : ", " $ - - ; , < $ + # = @ o ", " % - - > 1 < - > % + # O o o ", " - 2 3 , < 4 3 , - - + # + o ", " - - 3 1 < < 5 < 3 2 > - + # O o ", " 2 3 < < 4 6 4 7 , < 2 - $ - $ = ", " 2 3 1 5 4 6 8 6 4 5 < < 2 > - - # O ", " 3 , 7 4 8 8 9 0 q w 6 e r , ; 2 - # ", " 3 1 5 4 6 8 t y 9 8 8 4 u i 3 2 > - + % ", " 4 7 4 8 0 p a s a p 0 u i u i < , 3 - - ", " < 5 4 8 8 9 d f g t y 9 h j h j < < 1 3 - - ", " 6 w 8 0 p p k d l l t i h h h h h 4 < , 3 - ", " 6 4 6 8 9 p z k x d f g c v c v b 6 < < 1 3 - ", " 4 q 0 p n s m z k k M v b v b N b 8 4 7 < 3 ", " B V 0 9 p C Z Z Z z k k A S A S S 8 6 < 5 1 3 ", " q n p p t D F G H m Z S S J S J K 8 8 4 7 < ", " V 8 p p t g K F F L P Z F K F I F 9 8 6 < 6 1 ", " n p a l D U J K Y F T F F F Y F T 9 0 8 4 7 ", " y p a C l f b S S K F F P L F L P y 9 8 8 4 5 ", " p p t l x M h b N J K G F G H G P n 9 0 8 w ", " p a t l x R j h v b A S Z Z Z Z Z C p 9 8 V B ", " a l l x M k i E W h W Z m Z Q Z m t n 9 0 8 ", " a t l x k ! r u i j h v ! Q ! k z g C p 9 0 V ", " l d k M ~ m r r r i u k ~ k k M ~ D t n p n ", " t l x k ! Q ^ r / r u i R x d x R f l t p 9 8 ", " d x k ~ m Z ( ^ ( r r U d U d U d U D t a p ", " d x k ! Z ) _ ^ _ ^ ( / t l l g f d f g t p 9 ", " k k z m H G ` ' ' ] ^ D l a t D t d U l l a ", " k k z [ Z G { ' ' ' ^ _ p C p p a k R l g t p ", " Q Z G H G } | ` ' ` ' p n p n p p k d U l l ", " Q z Z P G P ...| { ' ' 9 0 9 y 9 Q ! R x l t ", " Z G P T F Y X.| ..| .. 0 q 0 q 0 q Q k M x d ", " z Z P L I F K S A b v h j h u o./ r ^ ( ^ ' ' ' { ' ..| .. ... ...8 8 8 8 8 z Q ! R x l ", " G F T } Y S J N W h h E i r r O.( ^ ( ' ] ' ' ` | ..| ..+.X.+.X.+.8 4 6 w 8 w Z m z k k ", " G P F I @.S S A c h h j o.r o./ r ^ ( ^ ' ' ' { ' ..| .. ... ... .X. .5 B 6 4 5 Z Z [ ! k k ", " F Y K J S b N W h i E e r r O.( ^ ( ' ' ' ' ` | ..| ..+.X.+.X.X.X.X.X.< 7 < 7 4 6 G H Z z k ", "F F K S S b v c h h u o.u r / r ^ _ ^ ' ' ' { ' ..| .. ... ...X.X.X...X.X.< 3 < 3 1 P Z Z [ z k ", "2 < 2 < , 3 2 < 2 3 2 < 2 ; 2 3 2 ; 2 - - - 2 - - - 2 ; 2 ; 2 3 2 < 2 < 2 3 2 < , < 2 F G H Z Z ", " 2 3 2 3 - 3 2 > - > 2 > - - - > - - % + % - % + - - - > - - - > - > 2 > - 3 2 3 - 3 F F L P ", " 2 ; 2 - 2 ; 2 - - ; - - - - - - $ + $ + # + $ - $ - - - - - - - - ; 2 - 2 ; 2 - 2 ; Y F ", " - - % - - - % + - + # + % + # + o + o O o + # + # + % + % + % + - - % - - - % - - K ", " $ + $ - $ - # - # + $ + # = # o o o # o o = # + # + $ + # - # - $ - $ - $ - $ - "}; /* XPM */ static char *memory17_xpm[] = { /* columns rows colors chars-per-pixel */ "48 48 255 2", " c black", ". c #010000", "X c #020101", "o c #000005", "O c #050303", "+ c #040509", "@ c #060904", "# c #030c0c", "$ c #0c0301", "% c #0a0900", "& c #0e0e0e", "* c #0a0b0c", "= c #050413", "- c #000019", "; c #001108", ": c #0f110e", "> c #041f10", ", c #0b1110", "< c #0e191b", "1 c #130202", "2 c #110509", "3 c #120d0c", "4 c #1e0001", "5 c #1a0f0d", "6 c #140d05", "7 c #16110f", "8 c #1b110f", "9 c #141411", "0 c #1c1311", "q c #1a1a14", "w c #1a1919", "e c #1b1f21", "r c #1d2315", "t c #002b20", "y c #24070a", "u c #2a0d0c", "i c #2d1b08", "p c #231512", "a c #241a16", "s c #291c14", "d c #251c1e", "f c #3f0000", "g c #371b00", "h c #3b1813", "j c #27132c", "k c #3a0029", "l c #2e2316", "z c #2b261d", "x c #332611", "c c #3f2117", "v c #3c2b1c", "b c #34241b", "n c #2b2d28", "m c #282e2a", "M c #2f312e", "N c #2f313b", "B c #312a23", "V c #372f2c", "C c #392421", "Z c #3b2c24", "A c #363024", "S c #36372b", "D c #3a382f", "F c #3a352b", "G c #30373b", "H c #383734", "J c #000054", "K c #00005c", "L c #000064", "P c #000073", "I c #2b2461", "U c #00443e", "Y c #006464", "T c #007f65", "R c #411e10", "E c #462417", "W c #432819", "Q c #48281e", "! c #4c3c1d", "~ c #522218", "^ c #56291c", "/ c #50321d", "( c #432f21", ") c #412929", "_ c #45342a", "` c #45392f", "' c #4d3324", "] c #4b3920", "[ c #493133", "{ c #49303a", "} c #552823", "| c #56302c", " . c #543c26", ".. c #563c2a", "X. c #5a3721", "o. c #5d3f24", "O. c #533935", "+. c #75371b", "@. c #6b3b35", "#. c #733721", "$. c #763d24", "%. c #733f33", "&. c #523d40", "*. c #434039", "=. c #49413a", "-. c #454134", ";. c #52412d", ":. c #5a402a", ">. c #524a3c", ",. c #5b4733", "<. c #584a35", "1. c #5b4c39", "2. c #564933", "3. c #555526", "4. c #60591c", "5. c #614725", "6. c #644c2d", "7. c #69412c", "8. c #684729", "9. c #6a4737", "0. c #66553e", "q. c #6c573c", "w. c #6c5931", "e. c #695c39", "r. c #7a402f", "t. c #784829", "y. c #7a4b25", "u. c #7c532b", "i. c #70573d", "p. c #72593b", "a. c #716021", "s. c #74613d", "d. c #7d633b", "f. c #474044", "g. c gray31", "h. c #534640", "j. c #554b42", "k. c #5a4f46", "l. c #5e474b", "z. c #57574e", "x. c #5a584a", "c. c #5b5649", "v. c gray34", "b. c #5d5850", "n. c #5d6b75", "m. c #604145", "M. c #634149", "N. c #635743", "B. c #60534a", "V. c #685742", "C. c #6c5c4d", "Z. c #755f43", "A. c #7b5d41", "S. c #705552", "D. c #6b644c", "F. c #726041", "G. c #70604b", "H. c #776947", "J. c #7b6944", "K. c #7d6c4c", "L. c #726354", "P. c #786158", "I. c #7d6850", "U. c #7c6c59", "Y. c #7e7a4c", "T. c #77715f", "R. c #7c7250", "E. c #767353", "W. c #696563", "Q. c #676663", "!. c #776d60", "~. c #797668", "^. c #7e7d6d", "/. c #7b7d7d", "(. c #008359", "). c #8d4c1f", "_. c #95511e", "`. c #874424", "'. c #834a3d", "]. c #845d36", "[. c #846a32", "{. c #886a3c", "}. c #80732a", "|. c #976a3d", " X c #a45823", ".X c #826341", "XX c #856e47", "oX c #876b49", "OX c #8d6c46", "+X c #877148", "@X c #8a754f", "#X c #83705a", "$X c #887351", "%X c #877753", "&X c #976f41", "*X c #907346", "=X c #93784a", "-X c #847763", ";X c #867961", ":X c #8e7c63", ">X c #9a7c60", ",X c #937d69", ".0 rX&X{.$.h 8.a o IXIXIXIXIXIXIXIXIX", "IXIXIXIXIXIXIXIXIXIXIXIXIXn.s.s.<.1.B 7X^.B.0X X AXuXvXk.0 sX*X3X[.p b F 9 IXIXIXIXIXIXIXIXIX", "IXIXIXIXIXIXIXIXIXIXIXIXIXlX:Xq.V.,.z 5XG C.NX $ FXaXxX=.b sXyXtX].Z v H.IXIXIXIXIXIXIXIXIXIX", "IXIXIXIXIXIXIXIXIXIXIXIXIX5XZ.K.G...3 hXIXz.C.VX 1 LXMXZXj.Z fXQ t.u.0 6.a.IXIXIXIXIXIXIXIXIXIX", "IXIXIXIXIXIXIXIXIXIXIXIXIXf R.%XZ.S IXIXN.V VX+ $ LXMXSXc.O.wX/ X.c N.iX4.IXIXIXIXIXIXIXIXIXIX", "IXIXIXIXIXIXIXIXIXIXIXIXIXIX4XN.6.IXIXIXIXw.b.L.+ s JXcXCX=.Z .X6.' >.bXqXI IXIXIXIXIXIXIXIXIXIX", "IXIXIXIXIXIXIXIXIXIXIXIXIXT o.k.IXIXIXIXJ w.~.h.* C DX>XaXH ( o.=XD.i g 1XIXIXIXIXIXIXIXIXIXIXIX", "IXIXIXIXIXIXIXIXIXIXIXU HXHX@ IXIXIXIXIXeXJ.;XG.* _ xX%XI.9 _ j.GXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIX", "IXIXIXIXIXIXIXIXIXIX+ 6 IXIXIXIXIXIXIXIX! %XK.U.* ` 8XA.v *.W.!.FXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIX", "IXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIX,.K.d.0.* a 8X1.L.IXd 9.l IXIXIXIXIXIXIXIXIXIXIXIXIXIXIX", "IXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIX:X$Xp.p.& Z -XP.IXIX :X> IXIXIXIXIXIXIXIXIXIXIXIXIXIXIX", "IXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIX#XXXF.OX7 Z U.; IXX =.pX3.IXIXIXIXIXIXIXIXIXIXIXIXIXIXIX", "IXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIX2XXX.X=Xs ' nXIXIXBX-X- IXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIX", "IXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIX].oX7.3 1.IXIXIX^.P IXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIX", "IXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIX9X8.9.E 6 L IXIXr $ . IXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIX", "IXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXE.;.( 1 Y IXIXIX t Z IXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIX", "IXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXE.Z 6 A.IXIXIXq z.2.O IXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIX", "IXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIX ;.5 B IXIXIXIX: IXR IXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIX", "IXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXkXv 9 o IXIXIXW.@ $ = IXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIX", "IXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIX,X W.IXIXIX@ W.IXx.IXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIX", "IXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXl M IXIXIXIXS IXD 6 IXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIX", "IXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXhX3 . IXIXIXF = IX. IXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIX", "IXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXN A IXIXIX9 X IXn @ IXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIX", "IXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXe s IXIX. IXIX% IXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIX", "IXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXQ.IXIX. n IXq O IXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIX", "IXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIX& IXIXIX* IXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIX" }; /* XPM */ static char * memory18_xpm[] = { "48 48 64 1", " c None", ". c #A6999E799E79", "X c #9E798E388617", "o c #8E3886178617", "O c #9E7992489658", "+ c #B6DAAEBAAEBA", "@ c #CF3CBEFBB6DA", "# c #C71BA6999E79", "$ c #9658410330C2", "% c #71C624921861", "& c #618524921861", "* c #51441C711040", "= c #69A61C711040", "- c #69A638E330C2", "; c #E79DCB2BBEFB", ": c #F7DEEBADDF7D", "> c #79E728A21861", ", c #79E720811040", "< c #596514511040", "1 c #38E310401040", "2 c #861775D671C6", "3 c #965871C669A6", "4 c #9E79555538E3", "5 c #E79DDB6CCF3C", "6 c #F7DEE38DCF3C", "7 c #208104100820", "8 c #79E76DB66185", "9 c #79E765956185", "0 c #79E730C22081", "q c #861724921040", "w c #8E382CB21861", "e c #186108200820", "r c #69A6492438E3", "t c #514410400820", "y c #8E3828A21040", "u c #8E3828A21861", "i c #9E7930C21861", "p c #A69938E31861", "a c #000000000000", "s c #49240C300820", "d c #9E7928A21861", "f c #71C659655965", "g c #A69930C21861", "h c #CF3C820769A6", "j c #38E328A22081", "k c #A69934D31861", "l c #410308200820", "z c #514434D330C2", "x c #38E308200820", "c c #B6DA45142081", "v c #BEFB514430C2", "b c #28A200000000", "n c #410310400820", "m c #618551444924", "M c #C71B61854103", "N c #104004100000", "B c #208110401040", "V c #38E300000820", "C c #30C200000820", "Z c #28A214511040", "A c #30C210400820", "S c #208100000000", "D c #AEBAAAAAAEBA", "F c #186100000000", " ", " .XXXXooO ", " ++@#$%&%&*&==*-o ", " O@;::::#>%,,%===<<12 ", " 3$&45::6::#>>>,=<<=7&48 ", " .90=,qw4;55655#$>,,=,qydggikkkggpp#;;;+9#08+@eant*822292jZo ", " -&,ywikpvMMhhhMcpnA4@Z2o3#NZssz9228frxO ", " 3&%quigcvMhhhMM$>7AA0#@jBuiggpcvvMM4*N<$@B..;ott7a7llllVVCV*zjo ", " f>uuigkpcvvvcpN-$>3@Zz13AaSZllllVVCCCCjz ", " O0quwigkcccccp*Z3Dj+O@NuwiigkccpppwNq>#OjZ-$taxlnllxlVVCCbbSC2 ", " $>uwiggkkkkii7frm+59*<*7SlllllVVVCCbbb71. ", " +#pwiigkkkgiixZ$5m9zX-t1asllxxxVCCCbbSSb9 ", " ;:Mpwiiiiiq1ajn3+:jnt355555;$Aaj15jANesslllxVVCCbbbbSSe7o ", " .&>0h;5;;;#N40aNFa7slllxxxxVCCCbbbS778 ", " X%&%>3;;5;mX4*tn1lllxxxxVxxVCbCbbbS7m ", " 3*&%,,h5#z.:X*tslnllxxxVVCZCCbbbS7er ", " 9%&%%,=3zO:@#8*ssnllxxVCCCCCCbSCe7m ", " 8*=&===ef:@#.X8*nlxxxxZCCCCbSSF7B2 ", " 9&=== c #596549244103", ", c #104008200820", "< c #082008200820", "1 c #082004100000", "2 c #186110401040", "3 c #492438E330C2", "4 c #A69992488E38", "5 c #E79DE38DD75C", "6 c #E79DE79DDF7D", "7 c #D75CC71BB6DA", "8 c #38E328A228A2", "9 c #30C224922081", "0 c #514449244103", "q c #104010401040", "w c #000000000000", "e c #082000000000", "r c #CF3CBEFBAEBA", "t c #EFBEEFBEEFBE", "y c #AEBAAAAAA699", "u c #28A224922081", "i c #514451445144", "p c #186114511040", "a c #71C661855965", "s c #FFFFFBEEFFFF", "d c #F7DEEFBEE79D", "f c #38E338E330C2", "g c #208118611861", "h c #596559655144", "j c #FFFFF7DEF7DE", "k c #FFFFF3CEEFBE", "l c #618555555144", "z c #28A220812081", "x c #618551444924", "c c #DF7DD34CB6DA", "v c #20811C711861", "b c #D75CCB2BAEBA", "n c #BEFBA6999658", "m c #F7DEF3CEF7DE", "M c #CF3CBEFBA699", "N c #A6998E388617", "B c #F7DEEBADDF7D", "V c #EFBEE38DC71B", "C c #DF7DDB6CBEFB", "Z c #9E79820779E7", "A c #CF3CB6DA9E79", "S c #DF7DCF3CB6DA", "D c #596541034103", "F c #D75CC30BAEBA", " ..XXoOO. + ", " +O@#$ooooooo%&*=X ", " o#@o-;;;;:+>,<<<123O+ ", " 4$o+;567.XOO890&q;sjkjtjjkdd5lzi&qwww1 ", " $,ww&if,+sksssssssssss5yssmmmmtBVCMXnZx3o ", " o%wq*iu@N>2Oskdddd5VV:SAn=zD%fo ", " o=-.rjb:Vdtmmmss$v$O-.ol3z26sV5B5VVCCb-XDgp9>a ", " 4orN66bcVd6mmmss0i%%%l*3&z,*sdC:VVVCcMn490ve*a ", " ONrNj;r7;5dtmmmsui*333&9z2q<.s:CC:CCbAX=9iew*338uz8g<@ ", " zwwwww3XbbSccbbbbbM-X4+NNNx%a>033&9z9zqf ", " #ewwww2@-MMbbbrMMMAnZ@@ZZall%>3339vuu2e4 ", " fwwwwwlN--MAM-A-X4Z$D%xlxxxx>339zu9p,0 ", " 4pwwww3aZ4XnXONZ@=aD3l%xxxxx338zu8g,f ", " @1www2>x%=@@#$a%x*39&833DD*39g99v,zX ", " ie,qgu3f*x%%xx*3&u2,q,,qq, c #DF7DE38DE79D", ", c #D75CD75CCF3C", "< c #71C679E779E7", "1 c #514451445144", "2 c #A699AAAAAEBA", "3 c #A699AAAAA699", "4 c #9E79A699A699", "5 c #9E79A289A699", "6 c #9E799E79A699", "7 c #9E799E799E79", "8 c #96589A699E79", "9 c #965896589658", "0 c #8E3892489658", "q c #8E388E388E38", "w c #861786178617", "e c #79E782078617", "r c #86178A288617", "t c #96589A699658", "y c #514459655965", "u c #49244D344924", "i c #8E3892488E38", "p c #9E79A2899E79", "a c #410341034103", "s c #492449244924", "d c #38E33CF338E3", "f c #410345144103", "g c #86178A288E38", "h c #8E388E389E79", "j c #861786179E79", "k c #79E77DF779E7", "l c #8E3886178617", "z c #AEBAB2CAAEBA", "x c #AEBAB6DAB6DA", "c c #79E77DF78E38", "v c #71C675D671C6", "b c #86177DF779E7", "n c #69A675D671C6", "m c #69A671C671C6", "M c #B6DAB2CABEFB", "N c #EFBEEBADDF7D", "B c #E79DE79DDF7D", "V c #E79DE38DD75C", "C c #DF7DDB6CD75C", "Z c #DF7DDB6CCF3C", "A c #D75CD34CBEFB", "S c #D75CCF3CC71B", "D c #CF3CCF3CC71B", "F c #CF3CCB2BBEFB", "G c #CF3CC71BBEFB", "H c #C71BC71BBEFB", "J c #C71BC30BB6DA", "K c #C71BBEFBB6DA", "L c #BEFBBAEAB6DA", "P c #BEFBB6DAAEBA", "I c #B6DAAEBAA699", "U c #96588E388E38", "Y c #79E779E779E7", "T c #38E338E338E3", "R c #DF7DD75CCF3C", "E c #BEFBB2CAAEBA", "W c #AEBAA699A699", "Q c #A6999E799658", "! c #618561856185", "~ c #861779E779E7", "^ c #79E775D671C6", "/ c #69A669A679E7", "( c #69A66DB671C6", ") c #618565956185", "_ c #5965596569A6", "` c #596555555144", "' c #5144555571C6", "] c #4924492469A6", "[ c #410345145965", "{ c #492445145144", "} c #96588A288E38", "| c #B6DAB2CAAEBA", " . c #8E388A288617", ".. c #9E799A699658", "X. c #71C675D68617", "o. c #6185659579E7", "O. c #5144514471C6", "+. c #49244D3479E7", "@. c #4924492471C6", "#. c #965892488E38", "$. c #30C234D330C2", "%. c #51444D344924", "&. c #9E799E79B6DA", "*. c #71C671C69658", "=. c #71C671C68E38", "-. c #514455558617", ";. c #492449249658", ":. c #492449248617", ">. c #492445148E38", ",. c #410341036185", "<. c #208124922081", "1. c #492445144103", "2. c #79E779E79658", "3. c #AEBAAAAAB6DA", "4. c #71C675D69E79", "5. c #596559659658", "6. c #514455559658", "7. c #38E33CF39E79", "8. c #410345149658", "9. c #596559658617", "0. c #69A665956185", "q. c #38E33CF35144", "w. c #208120812081", "e. c #59655D755965", "r. c #69A66DB68E38", "t. c #618561858E38", "y. c #69A669A69E79", "u. c #410345149E79", "i. c #618565959658", "p. c #49244924A699", "a. c #59655965A699", "s. c #69A66DB6B6DA", "d. c #49244D34A699", "f. c #49244924B6DA", "g. c #38E338E38617", "h. c #A699A289B6DA", "j. c #30C234D34924", "k. c #30C230C238E3", "l. c #20811C711861", "z. c #514455555144", "x. c #618569A66185", "c. c #41034514B6DA", "v. c #51445144B6DA", "b. c #71C675D6AEBA", "n. c #8E388E38B6DA", "m. c #61856595AEBA", "M. c #59655D758E38", "N. c #38E33CF369A6", "B. c #30C230C25144", "V. c #30C230C230C2", "C. c #186118611861", "Z. c #28A22CB228A2", "A. c #86178207AEBA", "S. c #DF7DDB6CBEFB", "D. c #30C234D371C6", "F. c #186114511040", "G. c #28A228A228A2", "H. c #596561855965", "J. c #492451444924", "K. c #E79DDF7DD75C", "L. c #8E388E38A699", "P. c #38E334D379E7", "I. c #28A22CB26185", "U. c #28A22CB24103", "Y. c #28A228A25144", "T. c #AEBAB2CAB6DA", "R. c #51445555AEBA", "E. c #28A22CB28E38", "W. c #208124924924", "Q. c #38E33CF34924", "!. c #D75CD75CBEFB", "~. c #E79DE38DBEFB", "^. c #96589248AEBA", "/. c #28A228A271C6", "(. c #AEBAAEBAA699", "). c #69A66DB669A6", "_. c #59655D75A699", "`. c #208124928617", "'. c #28A22CB279E7", "]. c #208120814924", "[. c #8617820779E7", "{. c #618569A669A6", "}. c #79E779E7B6DA", "|. c #28A228A29658", " X c #30C230C28E38", ".X c #30C234D38E38", "XX c #20811C718E38", "oX c #79E779E771C6", "OX c #5965596579E7", "+X c #71C671C6A699", "@X c #104014514103", "#X c #618561859E79", "$X c #30C234D39658", "%X c #186118616185", "&X c #186114515144", "*X c #1040104038E3", "=X c #79E771C671C6", "-X c #514455556185", ";X c #38E338E379E7", ":X c #30C230C269A6", ">X c #2081208179E7", ",X c #18611C7169A6", " : : : ; ; , ; - - ; ; ; ; ; : : > : ; ; o < 1 ", "X : # $ 2 $ $ 3 4 5 4 5 4 4 2 2 2 2 2 2 $ $ $ 6 7 8 9 9 0 q w e r r q 0 8 7 5 4 6 8 q q 9 t y u ", "@ ; 4 0 9 9 9 0 i i q i 0 9 9 9 9 9 t t 8 9 0 9 9 0 q q q r e w r i i 0 9 7 p 8 i q q i p q a s ", "@ ; $ i 0 9 9 9 0 0 i q 0 0 i i 0 i 0 9 0 i q q i q q q r w e e r q q 9 t 8 9 q w r i 8 p r d f ", "@ , $ 9 i 0 9 0 9 0 q q q 0 q g q g h g g w j q q g w w w e k e l g q 0 9 t q w r 9 8 8 7 w d s ", "o ; z 9 i 9 9 i i h g w g g g w g r w w w w w g q r w e w k k e e w g i 0 g e e i 8 t t 7 w d u ", "x - $ 7 0 i q g g g e e e w r w w e k < k e w g w c k c < < < c e e w g g e < w h 9 9 9 7 q a u ", "x , 2 7 0 g g l w k v < k c b < v n n m v < < k k v n n m n n v v < c e c n n w w q 0 8 p i a s ", "M - 3 7 h e e e , N N N N N B B V V : : C Z ; , A S D F D G H J K + L P I 8 U Y < e q 7 $ q T a ", "x - 4 t q e b , N N N N N & B B V : > C R R ; A * * F F G H J K + L L E I W Q e ! n g 5 3 w T f ", "@ - 4 9 g e e N N X Y Y ~ v Y ^ v v / ( ) ) ! _ _ ` ' u ] ] ] [ { a f a a l Q } s ! e 0 8 k T u ", "| , 4 0 q w e N N Y .H ..9 .Y c c X./ o.o.o.' O.+.O.@.] ] ] { [ { { f a T ..#.$.%.m e r n $.s ", "@ * 5 g g w Y N N .@ V @ &.*./ o.o.=.' -.-.@.;.:.:.>.>.>.>.>.@.] ,.{ T T T ..9 <.f ! < l n $.1.", "@ - p r l r k N % ^ W # h 2.2.*.-.*.3.4.5.6.6.6.6.7.8.;.;.>.:.9.] 0.q.q.T $.9 i w.d e.< w m $.f ", "@ * 5 g q g Y N B 2.W @ r.t.y.6.u.>.i.p.>.p.a.a.s.a.p.d.f.g.8.8.t.h.' T j.k.9 } l.T z.( e x.$.s ", "@ * p q 0 q k B B < &.h 4.y.t.5.d.p.f.p.f.c.f.v.b.h.n.&.n.m.f.g.7.M.N.q.B.V.#. .C.Z.s ! n x.$.u ", "@ * 7 0 0 i c V B c j h i.5.p.p.p.p.f.f.f.f.f.f.s.A.h.S.# W A.d.g.g.D.B.B.k.i .F.G.f H.v m T J.", "x * 7 i 0 q k V K.j L.j A.m.d.a.f.c.p.y.f.f.c.f.f.f.v.&.# * F h.a.u.P.I.U.Y.} l F.G.a ! e k d J.", "T.= p 0 9 h v K.: y.2.y.5.d.p.u.f.f.s.M s.c.f.f.c.c.f.a.X A , 3.R.E.E.D.Y.W.U l F.G.f ) k < Q.s ", "$ 5 9 9 q v > : / i.d.5.p.p.p.f.c.R.s.f.f.c.f.f.c.f.c.X !.~.M ^.f.E./.I.Y.} l F.G.f ! < n T s ", "(.D 5 9 8 g ).C : *.*.d.a.d.d.c.p.f.f.c.f._.f.f.f.f.f.f.H ~.B M &.7.`.'.Y.]. .[.F.Z.1.! < ).$.f ", "T.= 5 9 i e {.C , 9.5.;.8.>._.p.p.f.f.f.v.s.v.f.f.f.f.}.!.A ~.H &.f.|.`.D.W.l b F.Z.1.! < m $.f ", "@ * 7 0 q e {.R ; M.9.p.u._.^._.f.p.c.f.c.v.f.c.c.c.f.^.~.A S.S n.7.`. Xj I.[.b F.G.f ! < m T f ", "+ - 8 0 g e n - A 9.9.>.d.p.a.u.f.p.f.f.f.v.f.f.f.c.n.R S.!.!.O A.7.|.d.X O.l ~ F.Z.f ! < ).$.1.", "O * 8 i w e m A A -.-.;.p.>.p.p.p.p.f.f.b.b.b.m.s.3.S.S.F !.G 3.f.|.|..Xj W.[.k F.G.s ! v m T f ", "O - t q w e v S * ' -.O.6.p.;.u.p.p.f.m.3.^.F O S S * F F H h.}.|.XX Xn.F O.b oXC.G.f ! < ).T f ", "O - 9 i e w < S F OXO.' -.i.>.>.;.p.>.f.A.}.G H !.S.~.A F h.+XR.|.XXXX'.O.@XoX^ F.Z.1.! v m $.s ", "O , 0 q w e < F F _ _ O.' 2.-.>.>.y.u.u.f.u.#X+X}.A.^.4.y.7.$X|.XXXX%X%X&X*XY =XF.Z.f ) < m $.s ", "# - 0 g w w < F F y -XO.O.' @.@.y.M y.>.7.7.7.g.P.P.;X:X/.>X,X>X,X%X%X&X*X c #186110401040", ", c #BEFBBAEABEFB", "< c #CF3CCB2BCF3C", "1 c #F7DEF3CEF7DE", "2 c #FFFFFBEEFFFF", "3 c #D75CD34CD75C", "4 c #69A669A669A6", "5 c #EFBEEBADEFBE", "6 c #F7DEFBEEFFFF", "7 c #30C230C230C2", "8 c #E79DE38DE79D", "9 c #9E799A699E79", "0 c #514449244924", "q c #DF7DDB6CDF7D", "w c #410341034103", "e c #D75CD34CCF3C", "r c #BEFBBAEAC71B", "t c #8E3882078617", "y c #79E779E779E7", "u c #CF3CC30BC71B", "i c #C71BC30BC71B", "p c #BEFBC30BC71B", "a c #C71BBAEABEFB", "s c #28A228A228A2", "d c #28A230C230C2", "f c #AEBAAAAAAEBA", "g c #B6DAB2CAB6DA", "h c #AEBAB2CAB6DA", "j c #618559655965", "k c #96589A699E79", "l c #AEBAAAAAA699", "z c #9E79A289A699", "x c #8E388A289658", "c c #8E388A288617", "v c #38E3410338E3", "b c #082008200820", "n c #861779E779E7", "m c #410338E34103", "M c #69A661856185", "N c #410341034924", "B c #596551445965", " ", " .Xo. O+@@##$% ", " &*===#-o=======;*: ", " o====;;=========>;X ", " ,%o====o$;=========;;=X ", " <12%=====.234======;;===- ", " ,5265<7====8552190=;;=====% ", " q225588&===w28eo@*$X ", " g2,flOOO999k::$$=+O;b==ig&&&-444+++XXsosw0$*X ", " 1=& ", " %sv++X@$XX$$$0**Nwwwm@@#77s;: ", " .*o0oow;v$$***wwv7s@@77dso. ", " O&s; :@w**Nww7;;=;@7do;. ", " j@Nwwwmm====>sswO ", " jswwm@@m=====o% ", " 4o@@@@@m;;=w% ", " w###s;sM ", " "}; /* XPM */ static char * memory22_xpm[] = { "48 48 61 1", " c None", ". c #861775D669A6", "X c #B6DA75D65144", "o c #C71B8A285965", "O c #A6999E799E79", "+ c #49242CB22081", "@ c #9658555538E3", "# c #C71B7DF75144", "$ c #9E797DF769A6", "% c #8E3886178617", "& c #38E324922081", "* c #8617514438E3", "= c #9E7992488E38", "- c #BEFB965871C6", "; c #30C21C711040", ": c #618538E328A2", "> c #AEBA71C65144", ", c #9E7961854103", "< c #96586DB65144", "1 c #A69961854103", "2 c #C71B8E386185", "3 c #CF3CA28971C6", "4 c #71C66DB669A6", "5 c #514430C22081", "6 c #A69969A64924", "7 c #9E7996589658", "8 c #514434D32081", "9 c #8E38514438E3", "0 c #CF3C82075965", "q c #BEFB79E75144", "w c #61854D3438E3", "e c #410324921861", "r c #9E7969A64103", "t c #69A6410328A2", "y c #79E7514438E3", "u c #28A214511040", "i c #8617596538E3", "p c #B6DA7DF75965", "a c #71C661855144", "s c #BEFB82075965", "d c #965855554103", "f c #4924451438E3", "g c #71C6492430C2", "h c #186110400820", "j c #618530C22081", "k c #618559654924", "l c #104008200000", "z c #DF7D9A6971C6", "x c #CF3C8A286185", "c c #61853CF328A2", "v c #D75C9A6969A6", "b c #D75C92486185", "n c #D75CAAAA71C6", "m c #B6DA71C64924", "M c #E79DAAAA79E7", "N c #96585D754103", "B c #BEFB71C64924", "V c #CF3C92485965", "C c #CF3CA69971C6", "Z c #CF3C9A6969A6", "A c #000000000000", " ", " .XoO ", " O+@#$ ", " %&*X$ =$--O ", " $;:>, <123= ", " 4<$O .;5667 O890q< ", " w6#-O $;er>% $5tq6y ", " uiqp. %u&*r$ a&ts6a ", " &5Xsy7 %;+*>< w&ts<. ", " 8;dX<$ %u:9>< 8+ysr$ ", " f;gpp. hj9Xr O&:,p*7 ", " k;:>pw u5iX>% %egssiO O=O ", " 4h8s2$= h+*>>. .+*#pi d2- ", " %l:sz2a 8+g,$a kj@xp< kg#p% ", " l+1zx- f&gppy +c,o6$ %et,*$ ", " &&*vz-7 keyxva 7&c,pr% fe:iwO ", " fucszpi= k&tbz<= a&c@6rO .;etw4 ", " 4le>zb-4 %&cqz-% f8*,,* 7+5ewfO ", " h;dnn-a =&:6b-% ;c@Xm< a8tc+4 ", " f;yxMz-O ;:N2n.OetdX6< a+8gg8O ", " =l5>zb3O ft9qn745:<>r. a:j:c8k ", " &eyB0b-%8y6B2-w5c*,i=%5*y:8&7 ", " 4;c1#VC2s##qq#Xtt96i48g@9c;f ", " ;jN#23C2x#qBB19@Bb-wc,d*t&7 ", " % k5@B0bZ20Bq0m6@912v#,,ig+4 ", " =wi@*X>mNgcjcgd#>a ", " 4ug#22Z*55*1qoZC3Zss6>,ii**9,p6a ", " 4lcs2ZVx1#oZZ2vC3x#0X6ig*@1mq#< ", " flr2-ZxB#xZ-Z-3C2ox#m@**d16Xs< ", " &e>2-20vv-ZZ-CC3xx#q,ddd16sXi ", " %ut#CbbMMnCv3CCC2oqB1,@N6mo>i ", " u&dsbzMMMMMnCCn-2oX6,d16Xx>. ", " 4h8isbzMMMMMnnn3Zxm6N,11qo6a ", " &&:i>#2zMMMnnvC2xBm1,N1qs6w ", " %l;w9>sobzMnnCCZ0Bm1111XX9k ", " 4A;c*rsx#bCMzv20m6111166i. ", " 4lh+:yN>s0oxx#0111,,N,,y4 ", " 4Ahe8cg,>XXqqB1N@,Nd@it7 ", " %lAu;8cg*ii,1*ggggtc:a ", " 4hAh;+8:ccg*:5e5555fO ", " 4fllhhu;;ulAAAAAfO ", " =%ffhAAA&ff4= "}; /* XPM */ static char * memory23_xpm[] = { "48 48 64 1", " c None", ". c #A69996588E38", "X c #965869A65144", "o c #8E3886178617", "O c #A6999E799E79", "+ c #CF3C8A285965", "@ c #E79D9E7969A6", "# c #F7DEBEFB8E38", "$ c #E79DAAAA79E7", "% c #C71B82075965", "& c #AEBA69A64103", "* c #9658820771C6", "= c #DF7D9A696185", "- c #FFFFD34C8E38", "; c #FFFFE79DBEFB", ": c #FFFFD75C9E79", "> c #F7DEBEFB79E7", ", c #A699A6999E79", "< c #965861854103", "1 c #9658555538E3", "2 c #B6DA69A64924", "3 c #E79D9A695965", "4 c #F7DEBAEA8617", "5 c #FFFFDF7DA699", "6 c #F7DEB2CA71C6", "7 c #BEFBA6999658", "8 c #8617514438E3", "9 c #79E7451430C2", "0 c #FFFFD34C8617", "q c #FFFFCB2B79E7", "w c #69A6451430C2", "e c #492424922081", "r c #618530C22081", "t c #F7DEAEBA79E7", "y c #FFFFBAEA71C6", "u c #514430C228A2", "i c #410320811861", "p c #B6DA79E74924", "a c #F7DEAAAA69A6", "s c #FFFFBAEA79E7", "d c #96588E388E38", "f c #38E320811861", "g c #30C218611040", "h c #BEFB79E75144", "j c #FFFFCB2B8617", "k c #71C669A66185", "l c #28A220811861", "z c #28A218611040", "x c #F7DEC30B8617", "c c #61855D755965", "v c #CF3CBEFBB6DA", "b c #28A210400820", "n c #FFFFD75C8E38", "m c #9E799A699E79", "M c #208110400820", "N c #FFFFDB6C9658", "B c #79E779E779E7", "V c #492449244924", "C c #FFFFD34C79E7", "Z c #B6DA82075144", "A c #000000000000", "S c #082004100000", "D c #10400C300820", "F c #30C218611861", " .XXXXoO ", "OX+@#$%&*O ", "*&%=-;:>=X*O , ", "o<123$4:5#66>7, ,", "O891&%+@4:0qq$**, 7", " ower9<%=t40>y@@+*O ,", " Ouir91p3ass64a@@@*O doO ", " ,wferwp3=a$t#6sy6@*X+$7* ", " .uge9>aayqq550qv ,", " kzbi1%6sa=a6s>q5n0jx7.m ", " kMMf9=+3=ayyN::Nn00s0>k, ", " BMMb&+3ayy>5;5NNnx>n-#7 ", " BM9%=ayj0N;NnNN-xjnn-7 md dV77 ", " ow236xj0;;N0xN0C0---j#. dVB ", " o2+a40n5;5-3>jjj0Nn000$O ", " X%+ayj-;;N6+xqyqq:-q0C-7. B7v ", " X2+a40N;0j+s>>sxj5jq-n::7O V c ", " ,11236s00>a3s>ys>:5xjC-NN07 dc ", " o89923ays63tss>x0;:s-0-N-0+, v ", " OXwrr9<%3@h+y>qj05;n6-0-n-47* vod ", " .ZXwgiew12=r3y>00N;:>y000n0s$o 7cV ", " .$tt=wMbfer9yaC0-::j@==XAAAAB v ", " O%@4;5:#tt$XMMMew123333+xnN-506++++SAAADovm ", " *2=t:;ntta@XzSDfer9&hp8=jn0::>=<<<+FAAAAAuV ", " *&%@###$$=%wbSDMiierrlh#nnN50$>6@@8fuw&%+ c #B6DA79E75965", ", c #DF7D9E7969A6", "< c #F7DEB2CA71C6", "1 c #EFBEA6996185", "2 c #DF7DC71BA699", "3 c #BEFB86176185", "4 c #F7DEBEFB8E38", "5 c #FFFFCB2B9658", "6 c #F7DEA69969A6", "7 c #FFFFC71B8E38", "8 c #FFFFC71B8617", "9 c #71C66DB66185", "0 c #AEBA79E74924", "q c #FFFFDB6CA699", "w c #79E7514438E3", "e c #B6DA71C64924", "r c #FFFFEBADB6DA", "t c #86177DF78617", "y c #8E3865955144", "u c #FFFFEBADC71B", "i c #965892489658", "p c #79E7492430C2", "a c #FFFFD34CA699", "s c #618538E328A2", "d c #96585D754103", "f c #9E7965954103", "g c #38E328A22081", "h c #8617596538E3", "j c #59655D755965", "k c #5965451438E3", "l c #514430C22081", "z c #A69969A64924", "x c #38E338E330C2", "c c #9E7965954924", "v c #30C21C711861", "b c #208110400820", "n c #9E7971C64924", "m c #492428A22081", "M c #28A220811861", "N c #28A210400820", "B c #208118611040", "V c #38E320811861", "C c #8E3886178E38", "Z c #186110400000", "A c #186108200000", "S c #30C220811040", "D c #082004100000", "F c #000000000000", " ", " ", " ", " ....X ", " XoooooOo+@#$$.% % ", " O&*==-@;:>,<<12$33454% ", " Xo;@#<66*:*,=617$<1$81$% ", " 90:,1$5#>>*,611q8#1$<884..22X ", " we3*14r-e:@@,1<84<<#$8788872. ", " ty3*,=2r-e3*@16171=<#$48887574% ", " w>3*1=ru,03@,1:@1ffepsf3@@4q7@,#42uu8655qu78a2.X ", " 9v+pdydwyspd>:>*=,:@#42rq$652uu24#5.X t%2 ", " Ovgs+kpd&*-;&chdzef*#$454<<5qura###.. k j ", " kvlbl&3e-2q;hs+pdp>=,=$$1<2rurq#...3 ij ", " 9lon*-:e@#qqnlmgl+hzee:*@45au22-;--o 2 ", " 9&@,=@;3oe:*q;MvNbBVVml+he#$27##;.-;nX %Ci ", " Xp:#4,*33zcdf3yBNNZBvvvV++p:@@=*:;--;yO %jj ", " opf-2-*>3nwwphxNNNAbSBBNgbmwwwfn03;-oy9X99 ", " opp>24*>0nwwsVZbZDDbNNNNBABNNNmwn3;;3dx%MM ", " Xwpe.4*3nhksVZZDDDAZZBbbAANbbb+wno3;3d+MFF9 %% ", " 9+pz>nhwsssVbbZAZZDZDAbZbbglsydd&:*0ndZFFZC%O ", " X+++++++woosVvbADZZAZZZvvwoywhhd&;:eencZFFFxk ", " 9SSSSvh.33hslMbbbZZbbBvmd&&nnnncc&e00fpDFFCt ", " ivDABko33nd9pgvvNNvvvvkcnnyyhhhhoe0f0zwFFj9i", " igASm+hccycywsvBBBBvghhwhhwpkpdo>enz&zmFFFj", " O9bbM+kwhyyh9vvBBBSswk+++++lphoe3n&nfpMDFt", " X O9VBm+++lpsgVvvVglmVVgggglkhce>e&zzcVZFi", " X9gvMNNMBNvBNBvBbZADBvvgspd&oo&zzzsDD ", " tk Ot9kgMgvBbbBbbNNvvvvVlkwczo&o&zkZM ", " xki MFFZbNNNNNNvMggspddno&&clMM ", " jFFFDDvBNNNBVVglkwhcznchmmx ", " t ZFFFFFbVNNNNvggmlkpdydh+gSDj", " t 9xkFFFFFFFBMNNNNvgVg+kpwhwmg9% ", " OjjkMDFFFFbvBNNNNxVl+sppw+mgx% ", " 9C j jOj jFFFZvNNNNNSggxmssggVMj ", " xxi t i jFFFDBZbNNNNSMxSSSMVgBO ", " ttt% 9 jxMDFDbZDDZZZABBBvg9O99 ", " Mt O iFFDZbDDDDbbBvD9X %CkC", " OC O t t txjCCDC%jDDtttxj % ", " Ci O t %Cu% i%%k %OjO ", " xC %CC%C 2% %i% ", " "}; /* XPM */ static char *memory25_xpm[] = { /* columns rows colors chars-per-pixel */ "48 48 241 2", " c black", ". c #c9714c", "X c #d27348", "o c #c96426", "O c #b94808", "+ c #b94704", "@ c #bb4b10", "# c #cd5c1e", "$ c #c75014", "% c #cb5418", "& c #d35a19", "* c #d5631a", "= c #ee834b", "- c #e16531", "; c #d5571a", ": c #f07f4d", "> c #ec8150", ", c #e98e5b", "< c #de9765", "1 c #bb8361", "2 c #be9378", "3 c #242427", "4 c #542507", "5 c #a05a39", "6 c #a25936", "7 c #ab5c37", "8 c #985835", "9 c #ac663e", "0 c #a6603a", "q c #ac6140", "w c #b5623b", "e c #bc6b46", "r c #bb6247", "t c #c66b4a", "y c #cd6d3f", "u c #c15f36", "i c #d06f41", "p c #bc5a29", "a c #c15924", "s c #c0856e", "d c #d7d2cb", "f c #4c3421", "g c #714735", "h c #82513b", "j c #93634b", "k c #935c47", "l c #a36c54", "z c #9e654f", "x c #a56d5b", "c c #a97159", "v c #aa6d53", "b c #a96e4f", "n c #a66d4f", "m c #985a3e", "M c #97593b", "N c #b17458", "B c #bd785b", "V c #ba7051", "C c #bb5327", "Z c #b16154", "A c #e8ddec", "S c #0c0c01", "D c #896451", "F c #885e54", "G c #8e6558", "H c #a3735b", "J c #9a6a4f", "K c #956a54", "L c #9d715c", "P c #aa7569", "I c #9a675c", "U c #a57362", "Y c #b2806c", "T c #a67759", "R c #bc8a6c", "E c #ba8970", "W c #b57d61", "Q c #c27450", "! c #824426", "~ c #a69884", "^ c #32331b", "/ c #654834", "( c #5e4032", ") c #7c5545", "_ c #5e3d25", "` c #825b41", "' c #775338", "] c #8c644b", "[ c #8f6247", "{ c #895e46", "} c #6c4428", "| c #785a46", " . c #a47a6b", ".. c #b28a74", "X. c #a68753", "o. c #906b4a", "O. c #a37c5e", "+. c #9b6342", "@. c #713104", "#. c #150904", "$. c #2d1109", "%. c #9d6b3d", "&. c #a37132", "*. c #8d6237", "=. c #8b571b", "-. c #76400d", ";. c #572900", ":. c #67330b", ">. c #784b2a", ",. c #6d4224", "<. c #491c0b", "1. c #2c0d02", "2. c #2a0300", "3. c #3e1a04", "4. c #4a220d", "5. c #663e21", "6. c #774d30", "7. c #5c2d0d", "8. c #470d03", "9. c #4b1b11", "0. c #3d110d", "q. c #491b14", "w. c #432b1a", "e. c #ffc22c", "r. c #fff0b0", "t. c #5b3414", "y. c #43220d", "u. c #47150a", "i. c #310c03", "p. c #7b4323", "a. c #481d03", "s. c #4c2604", "d. c #59340f", "f. c #2a1204", "g. c #130300", "h. c #88302d", "j. c #591c10", "k. c #53190c", "l. c #350000", "z. c #c8917c", "x. c #b3a87d", "c. c #030000", "v. c #55160a", "b. c #742019", "n. c #5a1a0d", "m. c #672210", "M. c #76301f", "N. c #854c2f", "B. c #ffd291", "V. c #fdce85", "C. c #e1aa6b", "Z. c #c99b5d", "A. c #b1874c", "S. c #81572a", "D. c #341b0b", "F. c #341a06", "G. c #3c1c12", "H. c #2d1c11", "J. c #431b0b", "K. c #441304", "L. c #4f3a15", "P. c #3b1b0c", "I. c #2a0e08", "U. c #522613", "Y. c #844a38", "T. c #edc5a2", "R. c #7f6443", "E. c #331d12", "W. c #1a0a02", "Q. c #23130a", "!. c #3c261c", "~. c #432213", "^. c #542b21", "/. c #6d3421", "(. c #62311c", "). c #ccce99", "_. c #150902", "`. c #1d0c03", "'. c #4c2a1f", "]. c #5b2e19", "[. c #2d1a0c", "{. c #6c280f", "}. c #998750", "|. c #2a150c", " X c #240e05", ".X c #331406", "XX c #a05735", "oX c #793824", "OX c #48241a", "+X c #0d0100", "@X c #090000", "#X c #2c200f", "$X c #3e2813", "%X c #3c2413", "&X c #150601", "*X c #190a05", "=X c #311d0e", "-X c #4d4723", ";X c #712614", ":X c #291906", ">X c #250f08", ",X c #7b4940", " , , , < 1 2 BX2 BXBXBXBXBXBXBXBXBXBXBX", "BXBXBXBX4 5 6 7 7 8 9 9 0 q 0 7 7 w 7 w 7 e e r t X t t y u i y y p a o y p s d BXBXBXBXBXBXBXBX", "BXBXBXBXf g h j j k k l z l x l c c v b n l v v l b m q M N B B B s V V . y C C Z A BXBXBXBXBXBX", "BXBXBXBX3 D F G G D j k H j J l z K L P x I U P H U P Y T Y R E R B s W W N B Q w ! ~ BXBXBXBXBX", "BXBXBXBX^ / ( ) _ ` ' ` ] J ] [ { h } D | F ) . .......2 ....X.o.O.O.H Y .T J +.8 @.BXBXBXBXBX", "BXBXBXBX3 3 #.$.g %.&.*.=.=.-.;.;.:.>.>.,.<.1.2.2.1.3.4.5._ g } 6.{ o.J ] H .. .K h 7.BXBXBXBXBX", "BXBXBXBX8.9.0.q.w.~ e.e.e.e.e.e.e.e.r.X.t.y.u.u.<.i.3.4.p.:.a.s.7.t.t.d.d.d.s.<.4.4.f. BXBXBXBX", "BXBXg.h.h.j.k.j.9.l.z.e.e.e.e.e.e.x. c.2.i.v.b.u.n.m.M.N.B.V.C.Z.A.S.*.b A.*.D.F.G.H. BXBXBXBX", "BXBXi.2.8.J.J.K.k.u.g.e.e.e.e.e.L. D.P.I.U.m.v.n.9.U.Y.l T.e.e.e.e.e.B.R.E.W.Q.Q.W.J.!.BXBXBX", "BXBXBX~.^.f.~.U./.k.(.^.e.e.). _.#.#.`.'.q.j.b.].[.`.].j.{.e.e.e.e.}. f.q.u.|.H.[. X.X BXBX", "BX XXoX(.P.].OX+XOXoX@X/.l S #X#XQ.$X%XW.&X*Xg.E.=X|.@X+Xc.e.e.-X@Xi.u.;X<.P.:X:Xf.I.2.BXBX", "BX >X X|.*X_ ,XX*XaXsX~.G.0.8X~.qX6XdXdXuXdXfXt.4.gXD.F.gXP.gX4.t.yXp.p.8 fXD.BXBX", "BXBX@X XW.`.`.W.#.*X`.`.$.pX~.dX6.hX6XF.f.f.8X4.4.4.y.P..XF.pXpXgXgXjXpX~.kXuXt.fXp.lXzX5 U.BXBX", "BXBX+XxXQ.cXQ.Q.4X4X`.Q.`.cX XI.I.f.cX|.[.|.[.[.=XD.pX%XvXvX$X$X$X$XkXjXgX%XkXuXdX,.hX5 bXN.BXBX", "BXBX_.nXnXnXnXwXwXwXwXH. c #9090b0", ", c #90a0b0", "< c #a090b0", "1 c #a0a0a0", "2 c #a0a0b0", "3 c #a0b0b0", "4 c #a0a0c0", "5 c #b0a0c0", "6 c #b0b0c0", "7 c #b0c0c0", "8 c #b0c0d0", "9 c #c0b0d0", "0 c #c0c0c0", "q c #c0c0d0", "w c #c0d0d0", "e c gray94", "r c None", /* pixels */ "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", " eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee+ ", " eww996655,,::----;;::>><<22<<22<<22<<,,<<22<><<+eeeeeeeeeeeeeeeeeeeeeee9977997799007799o ", " e4422556699qq9q88qq779988qq7799889988qq779988X ", " 1ooXXooXXooXXooXXooXXooXXooXXooXXooXXooXXooXXo ", " ", " .............................................. ", " .OOOO.OOOO.OOOO.OOOO.OOOO.OOOO.OOOO.OOOO.OOOO. ", " .O+@O.O+@O.O+@O.O+@O.O+@O.O+@O.O+@O.O+@O.O+@O. ", " .oooo.oooo.oooo.oooo.oooo.oooo.oooo.oooo.oooo. ", " .............................................. ", " .OOOO.OOOO.OOOO.OOOO.OOOO.OOOO.OOOO.OOOO.OOOO. ", " .O+@O.O+@O.O+@O.O+@O.O+@O.O+@O.O+@O.O+@O.O+@O. ", " .oooo.oooo.oooo.oooo.oooo.oooo.oooo.oooo.oooo. ", " .............................................. ", " .OOOO.OOOO.OOOO.OOOO.OOOo.OOOO.OOOO.OOOO.OOOO. ", " .O+@O.O+@O.O+@O.O+@O.O+@o.O+@O.O+@O.O+@O.O+@O. ", " .oooo.oooo.oooo.oooo.O@Oo.oooo.oooo.oooo.oooo. ", " .....................O++o..................... ", " .OOOO.====.%%%%.OOOO.OO@o.OOOO.OOOO.OOOO.OOOO. ", " .O+@O.=&&=.%##%.O+@O.O@Oo.O+@O.O+@O.O+@O.O+@O. ", " .oooo.****.$$$$.oooo.oooo.oooo.oooo.oooo.oooo. ", " .............................................. ", " .+++++.++++.+.+++++.+++++++++++++++++++++++++. ", " ", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr" }; /* XPM */ static char *memory27_xpm[] = { /* columns rows colors chars-per-pixel */ "48 48 54 1", " c None", ". c Gray44", "X c #787078", "o c #d88000", "O c #d88800", "+ c #807080", "@ c #f8a820", "# c #f8a818", "$ c #887088", "% c #f8e0b8", "& c #787070", "* c #f8e0c0", "= c #f8f8d8", "- c #98a098", "; c #a0a0a0", ": c #98a0a0", "> c #a0a098", ", c #d0c8c8", "< c #c0c0c0", "1 c #b8b8c0", "2 c #c0c0b8", "3 c #c0b8c0", "4 c #c0b8b8", "5 c #b8c0c0", "6 c #c8d0d0", "7 c #d0d0d0", "8 c #d0c8d0", "9 c #c8c8c8", "0 c #c8c8d0", "q c #d0d0c8", "w c Gray88", "e c #e0d8e0", "r c Gray91", "t c Gray94", "y c #d8e0d8", "u c #d8d4d8", "i c #f0e8f0", "p c #f0f0e8", "a c #f8fcf8", "s c #707068", "d c Gray0", "f c #907090", "g c #38b8b8", "h c #887080", "j c #a870a8", "k c #987098", "l c #f8b850", "z c #e08400", "x c #e08800", "c c #e88808", "v c #807078", "b c #707078", "n c #f8c880", "m c #f08800", /* pixels */ " ", " ", " ", " ", " ", " .................... ", " .................... ", " XoOOOOOOOOOOOOOOOOOO.. ", " +@oOOOO@#@@#@@O@#@@#@.. ", " $%%%%%%%%%%%%%%%%%%%%%&. ", " +%*&&.&&&&&&&&&&&&&&=*&. ", " +*&-;:>::>:;>:;>:;>; @&. ", " $%.;,<123<45321<46;; @&. ", " $%.;5 78797870q878-; @&. ", " $%.;4 wewrtr wy,7;; @&. ", " $*.;<7 wyuyittep70;; @&. ", " $%.;177 aaaqq;;q@ss ", " $%.;287aa d aaqq;dddss ddd ", " f%.;1q8yyagdd aaq;dd@ss dd ", " f%.;207yaaaadd a;dd@ss dd dd ", " f%.;1q8qqqyyddyddddddddddddddddd ", " f%.;207qqqqyyyyyqq;dd@ss dd ", " f*.;123qqqq qqqq qqdd@ss dd ", " f%.;qq qdqq qq qqdy;q@ss dd ", " f*.;;;;;;dd;;;;;;ddddddddddddd ", " f*= dd ddddddddddddd ", " f%@@@@@@@@dd@@d@@dd@@@dd dd ", " h&&&&&sssddssdssddsssdd dd ", " jjkf+......ssssssdsssddsssddsssdd ", " kl@@@#@@#@@#@@@@@@d@@@dddddddddddd ", " +%%%%%%%%%%%*****dd***dd***dd**sdd ", " $%zx%cx%cx%cx*OO*Od*OO*OO*OOddO**ss ", " v%OO%xO%Ox%OO*OO*dd*OOdddddddddddddd ", " X%%%%%%%%*%%*****dd*****%%%%dd%%%%ss ", " X@%@*@@%@@%@@%@@%dd%@@%@@%@@%dd%@@%ss ", " b@%@%@@%@@%@@%@dddd%@dddddddddddddddddd ", " .@#%%%%%%%%%%%%%%ddd%%%%%%%%%dd%d%%%@ss ", " .#@lnnnnnnnnnnnnnnddnnnnnnnnddnnnd%@@ss ", " .##@@#@@#@@#@@#@@@dd@@@@@@@@dd@@@ddd@ss ", " .OxzzzmmmmmmmmmOOOddOOOOOOOddOOOOOdddddd ", " s.ssssssssssssssssdddssssddssssssssdddd ", " ..............ssssddsdddssssssssssssdd ", " ", " ", " ", " ", " ", " " }; /* XPM */ static char *memory28_xpm[] = { /* columns rows colors chars-per-pixel */ "48 48 208 2", " c black", ". c #101010", "X c #101020", "o c #102010", "O c #102020", "+ c #201010", "@ c #301010", "# c #201020", "$ c #301020", "% c #202010", "& c #203010", "* c #302010", "= c #303010", "- c #202020", "; c #202030", ": c #203020", "> c #302020", ", c #302030", "< c #303020", "1 c gray19", "2 c #304020", "3 c #304030", "4 c #403010", "5 c #503010", "6 c #402020", "7 c #403020", "8 c #403030", "9 c #502020", "0 c #503020", "q c #503030", "w c #603010", "e c #703010", "r c #602020", "t c #603020", "y c #603030", "u c #703020", "i c #703030", "p c #403040", "a c #504010", "s c #404020", "d c #404030", "f c #405020", "g c #405030", "h c #504020", "j c #504030", "k c #505020", "l c #505030", "z c #506030", "x c #604010", "c c #704010", "v c #604020", "b c #604030", "n c #605020", "m c #605030", "M c #704020", "N c #704030", "B c #705020", "V c #705030", "C c #606030", "Z c #607030", "A c #706030", "S c #707030", "D c gray25", "F c #405040", "G c #504040", "H c #505040", "J c #505050", "K c #506040", "L c #506050", "P c #605040", "I c #605050", "U c #705040", "Y c #606040", "T c #606050", "R c #607050", "E c #706040", "W c #706050", "Q c #707040", "! c #707050", "~ c #606060", "^ c #707060", "/ c gray44", "( c #708050", ") c #708060", "_ c #708070", "` c #803010", "' c #903010", "] c #803020", "[ c #803030", "{ c #903020", "} c #903030", "| c #a03020", " . c #a03030", ".. c #b03020", "X. c #b03030", "o. c #804010", "O. c #904010", "+. c #804020", "@. c #804030", "#. c #805020", "$. c #904020", "%. c #904030", "&. c #905020", "*. c #905030", "=. c #906020", "-. c #a04010", ";. c #a05010", ":. c #b04010", ">. c #b05010", ",. c #a04020", "<. c #a04030", "1. c #a05020", "2. c #a05030", "3. c #b04020", "4. c #b04030", "5. c #b05020", "6. c #b05030", "7. c #b06020", "8. c #b07020", "9. c #b07030", "0. c #806050", "q. c #807040", "w. c #906040", "e. c #906050", "r. c #907050", "t. c #807060", "y. c #807070", "u. c #907060", "i. c #907070", "p. c #a06040", "a. c #a07050", "s. c #a06060", "d. c #a07060", "f. c #c03020", "g. c #c04020", "h. c #c04030", "j. c #c05020", "k. c #c05030", "l. c #c06020", "z. c #c06030", "x. c #c07030", "c. c #c07040", "v. c #807080", "b. c #b08020", "n. c #808050", "m. c #808060", "M. c #808070", "N. c #809070", "B. c #908060", "V. c #909060", "C. c #909070", "Z. c #a09050", "A. c #a08070", "S. c #b09060", "D. c #a0b070", "F. c #b0a060", "G. c #b0c070", "H. c #c08030", "J. c #c08040", "K. c #c09040", "L. c #c0a040", "P. c #c0a050", "I. c #c0b050", "U. c #d0a050", "Y. c #c0a060", "T. c #c0b060", "R. c #c0b070", "E. c #d0b070", "W. c #c0c060", "Q. c #c0c070", "!. c #d0c070", "~. c #808080", "^. c #809080", "/. c #908080", "(. c #908090", "). c #909080", "_. c #909090", "`. c #90a080", "'. c #90a090", "]. c #90b090", "[. c #a09080", "{. c #a09090", "}. c #a090a0", "|. c #a0a080", " X c #a0a090", ".X c #a0b090", "XX c #b0a080", "oX c #b0a090", "OX c #b0b080", "+X c #b0b090", "@X c #a0a0a0", "#X c #a0b0a0", "$X c #b0a0a0", "%X c gray69", "&X c #b0c0b0", "*X c #c0b080", "=X c #d0b080", "-X c #c0b0a0", ";X c #c0b0b0", ":X c #d0b0a0", ">X c #c0c080", ",X c #d0c080", " : q Y T {.5X5X5X! > % - 5X5X5X5X X{.oXI 5X5X5X", "5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X/ I 3 G T H F 1 3 I /./.% - o D ~ D F ( 5X5X5X5X5X5X", "5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5Xp.%.2.2.#.0.n.G d 8 ! I < - - G : # % - R ;X5X5X5X5X5X5X5X", "5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X@.+.,.,.,.,.3.1.> o 1 d H < - o - % - 3 - o 1 &X5X5X5X5X5X5X5X", "5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X*.u ,.3.5.3.>.f.:.3.1.0 % # & + % + % + o + o # < 1 5X5X5X5X5X5XC.", "5X5X5X5X5X5X5X5X5X5X5X5X5X5Xe.t #.6.5.5.5.g.3.g.3.4.&.- o F.3 - o # o # o # o - 3 5X5X5X@X@X).8 ", "5X5X5X5X5X5X5X5X5X5X5X5X5Xw.t +.3.5.k.7.j.5.g.:.g.3.,.* > < R.>X^ K H o X o # 3 D 3 T `._.&X(.: D.", "5X5X5X5X5X5X5X< - : # 0 u &.z.P.=XW.U.b.l.7.g.j.3.o.6 4 v % 6 s 0.l # % + o d d G < y. X{.& 5X5X", "5X5X5X5X5X5X5X5X5Xs.v u =.c.I.,X4X3XR.x.7.6.5.,.#.5.7.2.% - ,.3.&.@.s - o < K H d ; _ {.: @X5X5X", "5X5X5X5X5X5X5X5X5Xt u &.z.H.E.!.=XL.J.7.j.1.{ 7.j.:.3.>.3.,.| -.| ,.3.&.$.7 8 d 8 % ^ : 8 5X5X5X", "5X5X5X5X5X5X5X5Xa.u M +.9.J.T.Y.I.H.8.j.7.,.1.5.5.3.3.3.1.,.$.| +.] +.+.1.+.< 1 : - Y > - 5X5X5X", "5X5X5X5X5X5X5X:X%.M { 1.6.H.c.H.x.7.j.>.,.1.g.j.g.>.3.:.3.-.| ` r w u e ] o.u 7 - % > % s 5X5X5X", "5X5X5X5X5X5X-X7 % > h <.5.6.7.j.7.5.1.$.7.5.5.g.3.3.,.,.,.,.+.t 0 t 0 0 5 t M $.h - % ! ].5X5X5X", "5X5X5X5X5X5X- % + % # % 3.j.j.j.g.1.,.5.g.j.j.>.3.-.3.-.| +.{ c r 5 9 4 9 5 u c $.7 W N.5X5X5X5X", "5X5X5X5X5X$Xo # o - : - +.3.3.3.$.,.5.g.5.k.5.3.,.3.1.{ $.] t u v 0 4 6 7 0 w t $.+.l M.5X5X5X5X", "5X5X5X5X5XE # % - % > % 0 5.g.3.$.5.g.g.g.j.g.3.3.;.,.$.{ o.u 5 t 5 0 4 6 4 t v ,.o.n M.[.5X5X5X", "5X5X5X5X5X1 o - - - - # < 4.5.3.$.3.5.g.5.h.5.3.,.,.1.$.+.t 0 t 4 0 0 6 4 0 0 u &.<.k M.C.5X5X5X", "5X5X5X5Xu.% # % , % # o 6 ,.3.o.g.5.g.5.g.5.3.5.3.$.,.O.u w r 5 t 5 9 4 9 4 0 w { 1.m M./.5X5X5X", "5X5X5X5Xd - o - - - o # ,.,.+.,.5.g.3.h.5.3.5.,.,.,.+.{ M t t 0 7 0 7 0 7 0 h t +.,.Q v._ 5X5X5X", "5X5X5X5X8 o # - 6 +.| ,...O.] j.g.3.f.3.3.3.3.,.6 % @ * > * 9 5 9 4 6 4 6 4 r e +.M t.).).5X5X5X", "5X5X5X5X0 - : 8 M <.,...,.} $.g.3.X.3...,.4.,.u o # o # o # % 7 4 6 7 6 = 7 h t $.t L /.^.5X5X5X", "5X5X5X5Xt 0 q t { ,...-.| $.k.3.f.3.f.:...,.| % + . + . + . + % 6 6 6 * 6 7 t x $.* 8 C./.5X5X5X", "5X5X5X5Xv t v u $.| ,. .$.,.,.3.3.3.3...,.3.= X o . o X o + o X = 6 < > < 6 0 u M + Z /.N.5X5X5X", "5X5X5X5Xu v u +.| ,...,.{ 1.g.3...3...3...-.+ . + . + o + o + o $ * 6 * 6 4 u o.u o q.M.M.5X5X5X", "5X5X5X5Xv i B $.+.| ,.| $.4.3.3.3.3.,.3.,.| o + o X o + o # o # % > < 6 7 6 M ,.v # V./.N.5X5X5X", "5X5X5X5X@.u u c { ,.| ,.| ,.| ,...,.| -.| | @ . + . + o + . + o > 6 6 4 6 5 ,.1.@ % [.)./.5X5X5X", "5X5X5X5XP M v @.$.,.$.{ 1.,.$.,.,.,.,.,.$.| 4 X o . o X o . o # < 7 < 7 7 t 1.+.o - `.}.`.5X5X5X", "5X5X5X5Xq M t +.{ $.| ` 3.-.| ,.3.,...,.| ,.u % + o + . + o + % 7 = 6 7 0 v 5.M - % /.).5X5X5X5X", "5X5X5XH o q v t M { $.$.,.} $.<.$.| $.$.$.{ M 0 o X o # o # o > % 6 7 0 0 $.h m O - )./.5X5X5X5X", "5X5Xp % r.@.u w { ] { w | { | $.| $.] ' | $.u 5 + . + o + o > * 6 7 7 x { #.E d # h /.5X5X5X5X5X", "F T G.@X5Xd.v t M u M t $.,.$.{ +.{ M u M t t t 7 > % - : 7 < > < 7 h +.#.m ).J o R ).5X5X5X5X5X", "> f 5X5X5XoXu t ] M u t | $.| $.] e u w r w u 5 0 4 9 4 0 4 6 4 0 4 u #.u Q i.< - C.{.5X5X5X5X5X", ": Q.5X5X5X5Xh [ +.] M t +.%.+.] t u t t 0 0 0 t 7 6 7 0 4 7 < 7 0 t M ] h / d - 2 {.5X5X5X5X5X5X", "*X5X5X5X5X5X5Xv $.u t v u { ] w t 5 u 5 r t 0 a 6 0 0 7 9 4 0 5 $.1.@.m i.M.p ( ). X5X5X5X5X5X5X", "Y 5X5X5X5X5X5X5XE ,.u t M ] v t v 0 v t v 0 7 0 7 0 0 0 s t v @.&.0 C y.) M.N.~.'.5X5X5X5X5X5X5X", "@X5X5X5X5X5X5X5X@Xm u t u t u t u t u t t v t 0 t w u +.] +.&.h W m./.M.y.M._.5X5X5X5X5X5X5X5X5X", "5X5X5X5X5X5X5X5X5X Xj b M [ M u M ] M t v y M t t ] M ,.1.%.s P M.M._ ).M.).].5X5X5X5X5X5X5X5X5X", "5X5X5X5X5X5X5X5X5X5X).s ] $.{ u { $.| M ] M { M u $.%.,.,.4 - C y.M./.).).`.5X5X5X5X5X5X5X5X5X5X", "5X5X5X5X5X5X5X5X5X5X5X5X`.U M %.$.2.1.<.+.%.&.*.&.M 7 7 & - z ~.N./.)._.'.@X5X5X5X5X5X5X5X5X5X5X", "5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X+XB.E V V b h N A U A A.d - : ).).).|.).).@X5X5X5X5X5X5X5X5X5X5X5X", "5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5XM.- - 8 5X}.#X@X`.5X5X5X5X5X5X5X5X5X5X5X5X5X", "5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5Xv.: # S 5X5X5X%X/.5X5X5X5X5X5X5X5X5X5X5X5X5X", "5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X1 - OX5X5X5X2X X5X5X5X5X5X5X5X5X5X5X5X5X5X", "5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5XT - Z.5X5X5X5X`.5X5X5X5X5X5X5X5X5X5X5X5X5X" }; /* XPM */ static char *memory29_xpm[] = { /* columns rows colors chars-per-pixel */ "48 48 106 2", " c black", ". c #000022", "X c #000033", "o c #001133", "O c #110033", "+ c #111133", "@ c #112233", "# c #111144", "$ c #111155", "% c #002244", "& c #112244", "* c #112255", "= c #221144", "- c #222244", "; c #222255", ": c #223344", "> c #223355", ", c #332255", "< c #333344", "1 c #333355", "2 c #222266", "3 c #223366", "4 c #223377", "5 c #333366", "6 c #333377", "7 c #114466", "8 c #224455", "9 c #224466", "0 c #224477", "q c #225566", "w c #225577", "e c #334466", "r c #334477", "t c #335566", "y c #335577", "u c #226666", "i c #226677", "p c #336666", "a c #336677", "s c #443366", "d c #444466", "f c #445566", "g c #445577", "h c #554466", "j c #554477", "k c #555577", "l c #556677", "z c #665577", "x c #666677", "c c #335588", "v c #444488", "b c #445588", "n c #555588", "m c #556688", "M c #557799", "N c #665588", "B c #666688", "V c #666699", "C c #667788", "Z c #667799", "A c #776688", "S c #776699", "D c #777799", "F c #6666aa", "G c #7777aa", "H c LightSlateGray", "J c #7788aa", "K c #7799aa", "L c #887799", "P c #8888aa", "I c #8899aa", "U c #8899bb", "Y c #9988aa", "T c #9999aa", "R c #9999bb", "E c #99aaaa", "W c #99aabb", "Q c #aa99bb", "! c #aaaabb", "~ c #aabbbb", "^ c #99aacc", "/ c #aaaacc", "( c #aaaadd", ") c #aabbcc", "_ c #aabbdd", "` c #bbaacc", "' c #bbaadd", "] c #bbbbcc", "[ c #bbbbdd", "{ c #bbbbee", "} c #ccbbdd", "| c #ddccdd", " . c #dddddd", ".. c #ccccee", "X. c #ccddee", "o. c #ddccee", "O. c #ddddee", "+. c #ddddff", "@. c #ddeeee", "#. c #ddeeff", "$. c #eeddff", "%. c #eeeeff", "&. c #eeffff", "*. c #ffeeff", "=. c gray100", "-. c None", /* pixels */ "-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.' R L l L ! -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.( &.B H d X B l -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.` ] B ] N ] B . X ] -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.i a i a i a i a _ =.&.B X X . B X * i a i a i a -.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.a u y u a u y u *.l N ] B ] N . B . y u a u y u -.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.u a i a u a i a ) =.&.B . X X B . X i a u a i a -.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.y u a u y u a u *.x B ] N ] B . N . a u y u a u -.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.i a i a i a i a _ =.&.B X X . B X X i a i a i a -.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.a u y u a u y u *.l N ] B ] N . B . y u a u y u -.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.u a i a u a i a ) =.&.B . X X B . X i a u a i a -.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.y u a u y u a u *.x B ] N ] B . N . a u y u a u -.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.i a i a &.X i a _ =.&.B X X . B X X i a X a i a -.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.a u y u *.. y u *.l N ] B ] N . B . y u X u y u -.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.u a i a &.X X X &.=.&.B . X > 1 . X X X . a i a -.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.y p y u *.. y u *.&.+.! S x , @ O . y u X u y u -.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.i a u y &.X u y &.%.#.[ I B e ; o X u c X a u y -.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.y u y p *.. y p *.&.$.) P l j : + . y w X u y p -.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.u y u y &.X u y &.%.#.[ I B f 1 o X i c . y i y -.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.y t y p *.. y p *.&.+.) Y x j : O . y y X t y p -.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.i y q y &.X q y #.%.#.[ I B f ; o X q b X y u y -.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.y t y t *.. y t ..%.$.] P x s - X & y m X t y t -.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.q y q y &.X q y M / ^ R C j > # . 4 q Z . y q y -.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.r t y t *.1 y t v H D l h < = + = t y J X t y t -.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.t y q y _ D 7 y t y 9 2 & X % 2 0 y q n & y q y -.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.r t r t V .; 8 r t r t r t r t r t } & 3 t r t -.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.q r t r q [ @.> 9 r t r q r t r q { l * q r t y -.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.e t r t e t [ I A f > 8 5 t b Z } k $ 3 e t r t -.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.t r t r t r t F M P H / O.O.~ G g * 3 r t r t r -.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.r e r e r e r e r 3 ; & # & = & 2 e r e r e r e -.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.e r t r 9 r t r 9 r t R l # t r 9 r t r 9 r t r -.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.5 e r e e e r e e e r T B + r e e e r e e e r e -.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.e r e r e r e r e r K / e # * r e r e r e r e r -.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.6 e s e 6 e s e 6 J o.[ D - + ; 6 e 5 e 6 e 5 e -.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.e 6 e r e 6 e r U ..&./ C 1 - + * 6 e r e 6 e r -.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.I | =.} W L k 1 @ O ; o.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.X.R _ +.) R H B d ; & k I -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.R I Q H z 1 O ; N E | -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-." }; /* XPM */ static char * memory30_xpm[] = { "48 48 63 1", " c None", ". c #000000000000", "X c #410341034103", "o c #104020812081", "O c #104010401040", "+ c #104000001040", "@ c #208110402081", "# c #514441035144", "$ c #514451446185", "% c #208130C230C2", "& c #104020811040", "* c #104010400000", "= c #208110401040", "- c #2081208130C2", "; c #71C671C671C6", ": c #9E79A2899E79", "> c #CF3CDF7DCF3C", ", c #4103410330C2", "< c #208120812081", "1 c #514441036185", "2 c #618571C66185", "3 c #DF7DDF7DCF3C", "4 c #30C230C22081", "5 c #30C230C24103", "6 c #CF3CCF3CCF3C", "7 c #9658A2899658", "8 c #208130C22081", "9 c #30C241034103", "0 c #410341035144", "q c #410330C24103", "w c #514451445144", "e c #410351445144", "r c #104000000000", "t c #104010402081", "y c #618551446185", "u c #861792489658", "i c #30C230C230C2", "p c #514441034103", "a c #208120811040", "s c #EFBEEFBEEFBE", "d c #000010400000", "f c #861792488617", "g c #1040104030C2", "h c #861782078617", "j c #410351444103", "k c #618551445144", "l c #6185514471C6", "z c #30C2410330C2", "x c #71C671C68617", "c c #618571C671C6", "v c #618561856185", "b c #30C220814103", "n c #965882079658", "m c #30C2208130C2", "M c #9E7992489E79", "N c #410330C25144", "B c #9658A2899E79", "V c #000010401040", "C c #514461856185", "Z c #6185618571C6", "A c #71C682078617", "S c #71C6618571C6", "D c #71C661858617", " ", " ..XoO++@#. ", " .$%&&O*OO=O+-.. ", " .;:>,4<&OO&=O++OO=O#... ", " .567<8-99X0##X<++O+Oq... ", " .0w8o c #202030", ", c #203030", "< c #302020", "1 c #302030", "2 c #303020", "3 c gray19", "4 c #303040", "5 c #304040", "6 c #401010", "7 c #500010", "8 c #501000", "9 c #501010", "0 c #401020", "q c #501020", "w c #403010", "e c #502010", "r c #402020", "t c #402030", "y c #403020", "u c #502020", "i c #503020", "p c #503030", "a c #701000", "s c #701010", "d c #701020", "f c #602020", "g c #603020", "h c #603030", "j c #703030", "k c #403040", "l c #503040", "z c #603040", "x c #504030", "c c #604020", "v c #604030", "b c gray25", "n c #404050", "m c #504050", "M c #505040", "N c #505050", "B c #504060", "V c #604040", "C c #705040", "Z c #705050", "A c #605070", "S c #606070", "D c #707060", "F c #606080", "G c #607080", "H c #706090", "J c #708080", "K c SlateGray", "L c #7080a0", "P c #800010", "I c #903020", "U c #903030", "Y c #903040", "T c #804030", "R c #805020", "E c #805030", "W c #905020", "Q c #905030", "! c #806030", "~ c #906020", "^ c #906030", "/ c #804050", "( c #805040", ") c #805050", "_ c #905050", "` c #906060", "' c #a05040", "] c #a05050", "[ c #b05050", "{ c #a06060", "} c #a07060", "| c #b06060", " . c #b06070", ".. c #c05060", "X. c #d05060", "o. c #d06050", "O. c #e05060", "+. c #807090", "@. c #d07080", "#. c #c08070", "$. c #d08060", "%. c #f08040", "&. c #f08050", "*. c #f09040", "=. c #e08070", "-. c #808090", ";. c #809090", ":. c #8080a0", ">. c #90a0b0", ",. c #a0a0a0", "<. c #9090c0", "1. c #d09080", "2. c #d09090", "3. c #d0b080", "4. c #e08080", "5. c #e08090", "6. c #e09080", "7. c #e09090", "8. c #e0b090", "9. c #f0b090", "0. c #f0a0a0", "q. c #f0b0a0", "w. c #c0b0c0", "e. c #e0c080", "r. c #f0c090", "t. c gray94", "y. c None", /* pixels */ "y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.Q *.&.*.Q W Q ~ Q W r ; r y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.", "y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.Q %.%.%.Q W Q W Q W 6 ; r ; y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.", "y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.Q %.&.*.Q W Q Q Q W r ; r ; r y.y.y.y.y.y.y.y.h j y.y.y.y.y.", "y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.Q %.%.%.Q W Q W Q W 0 ; r ; 0 % y.y.y.y.y.y.y.f [ =.Y y.y.y.y.", "y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.Q *.&.*.Q W Q ~ Q W r ; r ; r - T y.y.y.y.y.y.g ] 4...I 9 y.y.y.", "y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.Q %.%.%.Q W Q W Q W 6 ; r ; 6 % T y.y.y.y.y.+.3 [ =.X.I s 8 j y.y.", "y.y.y.y.y.y.y.y.y.y.y.y.y.y.Q %.&.*.Q W Q Q Q W r ; r ; r - T y.y.y.y.y.n 5 t.-...U d 6 9 y.y.y.", "y.y.y.y.y.y.y.y.y.y.y.y.y.Q %.%.%.Q W Q W Q W 0 ; r ; 0 % T y.y.y.y.y.+.4 n -.w.J d 6 7 y.y.y.y.", "y.y.y.y.y.y.y.y.y.y.y.y.Q *.&.*.Q W Q ~ Q W r ; r ; r - T y.y.y.y.y.n 5 t.K F K :.5 9 y.y.y.y.y.", "y.y.y.y.y.y.y.y.y.y.y.Q %.%.%.Q W Q W Q W 6 ; r ; 6 % T y.y.y.y.y.+.3 A -.w.-.n b m b y.y.y.y.y.", "y.y.y.y.y.y.y.y.y.y.Q %.&.*.Q W Q Q Q W r ; r ; r - T y.y.y.y.y.y., t.-.S ;.:.5 > 5 y.y.y.y.y.y.", "y.y.y.y.y.y.y.y.y.| 9.0.%.Q W Q W Q W 0 ; r ; 0 % T y.y.y.y.y.y.Q Q -.w.-.k b k b y.y.v =...q y.", "y.y.y.y.y.y.y.y. .q.q.q.Q W Q ~ Q W r ; r ; r - T y.y.y.y.y.y.Q &.&.n ;.:.5 > 5 y.y.y.f =.U 6 y.", "y.y.y.y.y.y.y.y.{ 0.q.q.6.4.4.Q W 6 ; r ; 6 % T y.y.y.y.y.y.Q &.&.Q Q k b : b y.y.y.@ 3 -.d 7 y.", "y.y.y.y.y.y.y.} q.q.q.2.5.4. .` r ; r ; r - T y.y.y.y.y.y.Q &.&.Q Q Q r r 5 y.y.y.y.4 y.-.b > y.", "y.y.y.y.y.y.y.| q.0.6.7.4.| v h ; r ; 0 % T y.y.y.y.y.y.Q &.&.Q Q Q r r E y.y.y.y.y.4 -.b > @ y.", "y.y.y.y.y.y. .q.q.2.4.1. .V t 2 r y r - T y.y.y.y.y.y.Q &.&.Q Q Q r r ! y.y.y.y.y.* t.-.b > y.y.", "y.y.y.y.y.y.| q.6.4.4.| v r < r y h % T y.y.y.y.y.y.Q &.&.Q Q Q r r Q y.y.y.y.y.y.4 n k b : y.y.", "y.y.y.y.y.} q.q.5.4. .x t 2 t p l Z { y.y.y.y.y.y.Q &.&.Q Q Q r r ^ y.y.y.y.y.y.& Q &.Q : + y.y.", "y.y.y.y.y.| 9.@.4.| x r < z p / ( @.y.y.y.y.y.y.Q &.&.Q Q Q r r E y.y.y.y.y.y.y.c &.&.Q r y.y.y.", "y.y.y.y. .2.@.} ) x 1 2 h Z ) #.y.y.y.y.y.y.y.Q &.&.Q Q Q r r E y.y.y.y.y.y.y.y.Q &.Q Q & y.y.y.", "y.y.y.,.{ @.| ) p r p / C @.y.y.y.y.y.y.y.y.Q &.&.Q Q Q r r Q y.y.y.y.y.y.y.y.& Q &.Q r + y.y.y.", "y.y.y. .Z h < t x ) #.y.y.y.y.y.y.y.y.y.Q &.&.Q Q Q r r E y.y.y.y.y.y.y.y.y.g &.&.Q r y.y.y.y.", "y.y.N r < h ( @.y.y.y.y.y.y.y.y.y.y.Q &.&.Q Q Q r r E y.y.y.y.y.y.y.y.y.y.Q &.Q Q = y.y.y.y.", "y.y. % l ` y.y.y.y.y.y.y.y.y.y.y.Q &.&.Q Q Q r r ^ y.y.y.y.y.y.y.y.y.y.& Q &.Q r O y.y.y.y.", "y.N N ,.y.y.y.y.y.y.y.y.y.y.y.Q &.&.Q Q Q r r Q y.y.y.y.y.y.y.y.y.y.y.c &.&.Q r y.y.y.y.y.", "y. N y.y.y.y.y.y.y.y.y.y.y.y.y.Q &.&.Q Q Q r r E y.y.y.y.y.y.y.y.y.y.y.y.Q &.Q Q & y.y.y.y.y.", "N N y.y.y.y.y.y.y.y.y.y.y.y.y.Q &.&.Q Q Q r r Q y.y.y.y.y.y.y.y.y.y.y.y.; Q &.Q r + y.y.y.y.y.", "y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.Q &.&.Q Q Q r r E y.y.y.y.y.y.y.y.y.y.y.y.y.g &.&.Q r y.y.y.y.y.y.", "y.y.y.y.y.y.y.y.y.y.y.y.y.y.Q &.&.Q Q Q r r E y.y.y.y.y.y.y.y.y.y.y.y.y.y.Q &.Q Q = y.y.y.y.y.y.", "y.y.y.y.y.y.y.y.y.y.y.y.y.Q &.&.Q Q Q r r ! y.y.y.y.y.y.y.y.y.y.y.y.y.y.& Q &.Q r O y.y.y.y.y.y.", "y.y.y.y.y.y.y.y.y.y.y.y.Q &.&.Q Q Q r r Q y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.c &.&.Q r y.y.y.y.y.y.y.", "y.y.y.y.y.y.y.y.y.y.y.Q &.&.Q Q Q r r E y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.Q &.Q Q & y.y.y.y.y.y.y.", "y.y.y.y.y.y.y.y.y.y.Q &.&.Q Q Q r r Q y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.& Q &.Q r + y.y.y.y.y.y.y.", "y.y.y.y.y.y.y.y.y.Q &.&.Q Q Q r r ^ y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.g &.&.Q r y.y.y.y.y.y.y.y.", "y.y.y.y.y.y.y.y.Q &.&.Q Q Q r r E y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.Q &.Q Q = y.y.y.y.y.y.y.y.", "y.y.y.y.y.y.y.Q &.&.Q Q Q r r E y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y. .q. .r O y.y.y.y.y.y.y.y.", "y.y.y.y.y.y.Q &.&.Q Q Q r r E y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.q.4.t l y.y.y.y.y.y.y.y.y.", "y.y.y.y.y. .q.&.Q Q Q r r E y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.q.) t y.y.y.y.y.y.y.y.y.y.", "y.y.y.y.y.q.q.5. .Q r r E y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y. t y.y.y.y.y.y.y.y.y.y.y.", "y.y.y.y. .q.4. .t r r ^ y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y. y.y.y.y.y.y.y.y.y.y.y.y.", "y.y.y.y.q.5. .t t l R y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.", "y.y.y. .@.) 1 h ) y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.", "y.y.y. .h t ) y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.", "y.y. % l y.y.y.y.y.< M D #.8.q.3.$.e.r.e.r.e.r.e.r.e.r.e.r.e.r.e.r.e.r.e.r.G <.L F >.O.o.O._ y.", "y. y.y.y.y.S 5 < $ & ; e i T ' Q E Q E Q E Q E Q E Q E Q E Q E Q E Q E B G A n H a P s f y.", "y. y.y.y.y.y.y.y.y.% y V V i u w % - o . o . o . o - % - % . o . o . o . o # 4 . , o O X ; y.", "y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y." }; /* XPM */ static char * memory32_xpm[] = { "48 48 72 1", " c None", ". c #FFFF00", "+ c #808000", "@ c #FF0000", "# c #800000", "$ c #FFFFFF", "% c #FCFCFC", "& c #F8F8F8", "* c #F5F5F5", "= c #F0F0F0", "- c #EDEDED", "; c #E9E9E9", "> c #E6E6E6", ", c #E5E5E5", "' c #E1E1E1", ") c #DEDEDE", "! c #DDDDDD", "~ c #D9D9D9", "{ c #D6D6D6", "] c #CECECE", "^ c #CBCBCB", "/ c #C7C7C7", "( c #C3C3C3", "_ c #C0C0C0", ": c #BFBFBF", "< c #BDBDBD", "[ c #B5B5B5", "} c #B1B1B1", "| c #AEAEAE", "1 c #ADADAD", "2 c #AAAAAA", "3 c #A9A9A9", "4 c #A6A6A6", "5 c #A2A2A2", "6 c #9F9F9F", "7 c #9A9A9A", "8 c #979797", "9 c #969696", "0 c #939393", "a c #909090", "b c #8F8F8F", "c c #8C8C8C", "d c #888888", "e c #878787", "f c #848484", "g c #808080", "h c #797979", "i c #767676", "j c #757575", "k c #717171", "l c #6F6F6F", "m c #6E6E6E", "n c #676767", "o c #626262", "p c #5F5F5F", "q c #5B5B5B", "r c #545454", "s c #505050", "t c #4D4D4D", "u c #414141", "v c #404040", "w c #3E3E3E", "x c #3D3D3D", "y c #393939", "z c #363636", "A c #323232", "B c #2F2F2F", "C c #2A2A2A", "D c #272727", "E c #232323", "F c #202020", "G c #000000", " FFFFFFF ", " FFErkoAFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFF ", " FFm;$'*%5CFF$kFFk$r8EFF F$$)6AFF($;bEFgmFF ", "FFg$7AFEn;^DF$kFFk$r$_CFF F$6f!;uF(_h-|Fa$0FF ", "Fx%cFFFFFu*bF$kFFk$r$;BF ", "F:[FFFFFFFq$y$kFFk$r$wF//FF$kFFF^4(<8*}Fa'FB=bFF", "F9,EFDsCFF8;F$kFFk$r$^(!$sF$kFFz&i([;}EFa&((-=DF", "Fx%cFw$%3r=bF$iFFi$r$6aa)3F$kFE<'D(|d-yFa=aaa&lF", "FFg$7ADo-$^DF]/CC/]r$wFFd'F$0h~;uF(|E^)ta'FFF_1F", " FFm;$'*%-:FFu;=*;ur$wFFr$A$$)6AFF(|FC2'a'F Fc{F", " FFErkozp$vFFCnnCFFFFGGGGGGFFFFFFFFFFFxFFF FFFF", " FFFFFFD$mFFFFFFFGGGG@@@#@G FFF ", " FFFFF G$$@@@@#G ", " G@$@@@@@#G ", " G@@@@#@##G ", " GGG@@@@@###G ", " GGGG$@$@@@@#@##G ", " GG$@@$@@@@@@@@@@##G ", " G$@$@@@@#@@#@####GG ", " GG$@@@@@@####GGGGG ", " GG$@@@@@##GGGGGGGG ", " GG$@@@@@#GGGGG ", " GG@@@@@@##G ", " GG@@@@#@#G ", " GG@@#@####G ", " GG@#####GG ", " GG###GGGG ", " GGGG GGGGGGG ", " GGG$$$G GGGGGGG ", " G$$$$$.+G GGG GGGG ", " GG$....+G GGGGGG$.+G ", " G.$....+G GGGGGG.$.$....++G ", " GG.....+GGG$$.$..........++G ", " GG$.....+................+.+G ", " GG..................+..+..++G ", " GGG$..........+.+...++++++GGGG ", " GG....+..+..+++++++GGGGGGGGGG ", " GG.$.+++++++GGGGGGGGGGGGGGGGG ", " GGG+++GGGGGGGGGGGGGGGGGGG ", " GGGGGGGGGGGGGGGG ", " GGGGGGGG ", " ", " ", " ", " ", " "}; /* XPM */ static char * memory33_xpm[] = { "48 48 64 1", " c None", ". c #DF7D92489658", "X c #EFBE8A288E38", "o c #DF7D7DF779E7", "O c #F7DE9A699E79", "+ c #F7DE92489658", "@ c #EFBE82078617", "# c #F7DE8A288E38", "$ c #E79D82078617", "% c #DF7D71C671C6", "& c #D75C69A669A6", "* c #C71B61856185", "= c #CF3C61856185", "- c #C71B59655965", "; c #A69938E338E3", ": c #A69945144103", "> c #B6DA51445144", ", c #BEFB51445144", "< c #C71B71C671C6", "1 c #D75C79E779E7", "2 c #CF3C69A669A6", "3 c #B6DA49244924", "4 c #F7DEA289A699", "5 c #9E7930C230C2", "6 c #D75C71C671C6", "7 c #A69941034103", "8 c #EFBEB6DA8617", "9 c #F7DEB6DAB6DA", "0 c #F7DEAAAAAEBA", "q c #082004100000", "w c #28A210400000", "e c #38E328A20000", "r c #492430C20000", "t c #514434D30000", "y c #596538E30000", "u c #618541030000", "i c #69A649240000", "p c #69A641030000", "a c #71C64D340000", "s c #9E7938E338E3", "d c #8E3828A228A2", "f c #965830C230C2", "g c #E79D8A288E38", "h c #79E728A228A2", "j c #79E751440000", "k c #861751440000", "l c #59653CF30000", "z c #8617492428A2", "x c #79E718611861", "c c #30C21C711040", "v c #9E7965950000", "b c #79E710401040", "n c #71C608200820", "m c #51440C300820", "M c #8E3859650000", "N c #69A600000000", "B c #514400000000", "V c #104010401040", "C c #410330C230C2", "Z c #BEFB61856185", "A c #E79DA289A699", "S c #9E7959655965", "D c #EFBEAAAAAEBA", "F c #492400000000", " ", " ", " ", " ", " .XoO++O@##@@@$%o%%&&&&&&&*====-;:>,<1 ", " OX@###+#o@X@@X$oo%1%22==*---*=-:;:3----,*-= ", " .X#+#X%o&--#O+++###XX@@@$oo1%&=>:;:>---,--,,>- ", ".###4+#o-:5;-=---*-**==2&6@@X#X,:7>,,,---->3755,", "#899904X,757:qweerrtytuipa:,,6@o&=--,--,->:sdfds", "g80990O@,75:7qquruietueturrure=#$1&*-*->:;fddhhh", "$800004X,:f:;qwpjaiiajpikllzat-#@%%&*-,7fdhhhxxx", "$80000O#,;5:;qqcitryeciuruaupv&Xo%&2*-33fbxxbbbn", "$84009Oo,75:sqwipyupuyautjjtyj&Xo62=--:7;xbnnbbb", "$840044o,75:5qclepucyleyayyjjz&@1&&=-,3;7xmnnnbn", "$840004o,7535qcuuuuyiitpjylkur&X%&2==,>;;xmnmbbb", "$.0009Oo-753dqqepeetecuyepaaaM%@%&2=*-3;;xNnbnbn", "$80000+@-;s3fqtiuluplyjuejurtj%@%2==-,3s;xNnnbbm", "$80000+@-7;3dqtycipeplruiuizkM1@%&22--:5sxNmnnbn", "$.0094OX-7;3dwazzziiMitajtyjyt1@6&2=-,355xNnnbbn", "$80900O#*:;3dwrivytkutzjtjvkjv@@6&==-,:55xNmnmbn", "$80090O#=:73hwvkMzjMalMjtkaeiv@@%&2=->35sxmNnbnn", "$80900O+=:::drvjpMitziraaazkjv@@6&2=-,:55xBnnnbm", "$8090OO+2:::%X@%66=-*,zvvupjyjX@6&2=-,:5sxmNmbnn", "$804VV$+=3::oO###@#X@@@$@o$o%1#@&&==->35sxmNnnnn", "$8OCVVzO&:::6@$$@#X@X@@@@@@@###$6&&=-,35sxBBmnnm", "$84VVVcX&7;5Vruuijv:3>--Z*&1@##@=***-,35sxBmNmnn", "$.4VVqc$%:sfVjvjputrrcccrtuij2#$-::>->35sxBmNNnN", "g89ghcmX%75dVukzzMMzjjjaipuyt,#ozcCs:,3s;xBBmNNm", "g.04O..$$:sdVwwwceceertlijaja2+&cVVcf,>;sxBBmmNn", "$890O.g$@:fdVvkjauyrewwwcwwew-+%cVVch:,;;hBBBmNN", "$800A..g$3fhVvMvvMvMzMjjjapye-+6SCcmx;>;;hBBBmmm", "o89Dccs7rvvvvvMMMMzzkkjjao#11%%6=->7;hBFFBBm", "o89CVVc*@&-OO#@o%=,vvkjkzzkkzo+%&=-&*-,::hFFBBBB", "o80$hcc2$OO4444444O4O#$%6&2=*##1=S:h7--:7hBFFFBB", "&#@@o--&oO+44OO4044+O44O4440OOX@&VVch7,::hFFFFFB", ">7:;-222$@@#+####@+OO+++4444OX@@3VVcCf-3:dFFBFFF", "87dfdh5;,-&2&2%%1@@@@@@@@o$@o1&%2CcVCf-3:hFFFwFF", " 88g*,77sfsfss:,=2=&22=&*=&&2&&ZCCh:-3:hFFBFB=", " 881=,7sshdd5ss:3,,3>-*==2-,,-,::hFFFB* ", " 881*>s;s5ffdfdd;;s;sssssddbwFB= ", " 88g6=,7sdhhdddddhfdnBw* ", " 884$=7fddmBBmB= ", " ", " ", " ", " ", " "}; /* XPM */ static char *memory34_xpm[] = { /* columns rows colors chars-per-pixel */ "48 48 251 2", " c black", ". c gray4", "X c #656564", "o c #262726", "O c #181919", "+ c #bebdbe", "@ c #cac9ca", "# c #cdcdcd", "$ c #d9d4d6", "% c #dcdadb", "& c #29292a", "* c #454543", "= c #32322d", "- c #343533", "; c gray70", ": c #b9b9b9", "> c #c4c3c4", ", c #d9dad7", "< c #dde2e7", "1 c #eaeae4", "2 c #ecebea", "3 c #d3ced1", "4 c #949493", "5 c #58595a", "6 c #302e26", "7 c #2b3626", "8 c #acacac", "9 c #e6e5d7", "0 c #f0edde", "q c #fbfae5", "w c #f6f6ea", "e c #111100", "r c #262619", "t c #393a36", "y c #4c4c44", "u c #a4a4a4", "i c #ddddc8", "p c #ebe9b8", "a c #f1e0c0", "s c #f3f3b7", "d c #f6f3d3", "f c #e4e3c4", "g c #ddd3a2", "h c #3f2e00", "j c #514f44", "k c #464437", "l c #d4d3c3", "z c #f1e3b3", "x c #ededb3", "c c #f5f0c1", "v c #eadcad", "b c #e8e7a9", "n c #d9d7ba", "m c #d8d886", "M c #a7a59d", "N c #585537", "B c #8c8956", "V c #80806e", "C c #334333", "Z c #c1bcb9", "A c #e3d2c3", "S c #ece7e9", "D c #e5e3e3", "F c #cac5c4", "G c #d8d698", "H c #bfb271", "J c #686735", "K c #847d6b", "L c #bfc2c6", "P c #dacab9", "I c #ebdcb5", "U c #f0dfb3", "Y c #f8ebac", "T c #959599", "R c #949287", "E c #89898a", "W c #786e3a", "Q c #94813a", "! c #f0f0a4", "~ c #9b9b9b", "^ c #7a797a", "/ c #747473", "( c #9a9445", ") c #9a9654", "_ c #444411", "` c #221100", "' c #dbcb7a", "] c #b5b4a9", "[ c #838482", "{ c #a9a5a3", "} c #797a86", "| c #3e3e3d", " . c #6a6658", ".. c #40400f", "X. c #212100", "o. c #e2d28b", "O. c #76736b", "+. c #b3b1ad", "@. c #83817c", "#. c #474a4b", "$. c #110000", "%. c #b8b5b7", "&. c #e9e996", "*. c #d3d072", "=. c #414140", "-. c #1f231e", ";. c #a4944a", ":. c #333311", ">. c #e8db93", ",. c #f1eae7", "<. c #cdcac5", "1. c #413d41", "2. c #867a35", "3. c #3f300e", "4. c #392811", "5. c #b6b356", "6. c #68686a", "7. c #e2dcdd", "8. c #eff1ed", "9. c #c4c4bd", "0. c #a28b37", "q. c #17170b", "w. c #38444a", "e. c #b8ab45", "r. c #f2ebec", "t. c #635b56", "y. c #47452d", "u. c #635e49", "i. c #413d32", "p. c #d4d3d3", "a. c #f5eff1", "s. c #524d39", "d. c #76714c", "f. c #f5f4f3", "g. c #6b664e", "h. c #d8cb9b", "j. c #d7c884", "k. c #c1c158", "l. c #ecd9fc", "z. c #756c69", "x. c #39d323", "c. c #d5c8a6", "v. c #cdc776", "b. c #f5f6fd", "n. c #0d0d19", "m. c #f7ecfa", "M. c #e1c571", "N. c #c9c98c", "B. c #c9bc8b", "V. c #f8f6f7", "C. c #d0cdc7", "Z. c #d4d2cb", "A. c #fbfcfa", "S. c #8b8b3c", "D. c #b0aeab", "F. c #fbfaf4", "G. c #575649", "H. c #3d3627", "J. c #827e79", "K. c #ebf8f8", "L. c #aca451", "P. c #201c13", "I. c #020202", "U. c #1e400c", "Y. c #a49e97", "T. c #c4bfa5", "R. c #b7aa79", "E. c #050503", "W. c #d2cecd", "Q. c #e0dad6", "!. c #40f826", "~. c #e9e4e5", "^. c #b8cbd9", "/. c #dbd7da", "(. c #68592a", "). c #999179", "_. c #3de725", "`. c #e3dee1", "'. c #c9c5cb", "]. c #c1bdc3", "[. c #151527", "{. c #353842", "}. c #7c8288", "|. c #b9bac6", " X c #2d2d3a", ".X c #4e5763", "XX c #37cc23", "oX c #4c4c54", "OX c #9395a2", "+X c #9a9aa5", "@X c #c6c9d7", "#X c #b1bdd1", "$X c #dacde4", "%X c #575674", "&X c #34bb22", "*X c #4d9f1b", "=X c #332530", "-X c #4e962e", ";X c #bfb26b", ":X c #b1adb2", ">X c #a19fa8", ",X c #858691", " @ # $ , < 1 2 3 4 & & 5 6 7 JXJXJXJXJXJXJXJXJXJXJXJX", "JXJXJXJXJXJXJXJXJXJXJXJXJXJX 8 ; : + > # $ % 9 9 0 q w q w e r r r t y JXJXJXJXJXJXJXJXJXJX", "JXJXJXJXJXJXJXJXJXJXJXJXJX u 8 ; : + > # $ i i p a s d p p p f g h r j k - JXJXJXJXJXJXJXJXJX", "JXJXJXJXJXJXJXJXJXJXJXJX u 8 ; : + + @ l l f p s z x c x v b n m M N B V C O JXJXJXJXJXJXJXJX", "JXJXJXJXJXJXJXJXJXJXJXJX u 8 ; : : + > Z n A p v s z s z S D # F G H J J B K k JXJXJXJXJXJXJXJX", "JXJXJXJXJXJXJXJXJXJXJX 8 ; : : + L n P f I b U x Y 2 3 8 T 4 R E 4 5 W Q K B r e JXJXJXJXJXJX", "JXJXJXJXJXJXJXJXJXJXJX 8 ; : + > > # n n p v x x ! # ; ~ X X ^ / X k / 5 t ( ) _ ` e e JXJXJXJX", "JXJXJXJXJXJXJXJXJXJX ; : + + > @ l f p b z s ! ' ] ^ / [ { { { } 5 | .& - ) W ..r X.e JXJXJX", "JXJXJXJXJXJXJXJXJXJX ; : : : : @ # P p z x U ! o.] ^ O.[ 4 ; ; +.8 @.#.| | o ( Q _ X.` X.$.e JX", "JXJXJXJXJXJXJXJXJXJX : : %.: : > i I x z x b &.*.O.O.T 8 i 9 , # > 4 / =.= -.k ;.J _ :.:.X.e JX", "JXJXJXJXJXJXJXJXJXJX + > : ; : > f z x s ! >.&.' / 4 ; < ,.1 9 , <.; M ^ - 1.=.;.2._ 3.:.4.X.e ", "JXJXJXJXJX JXJXJXJX @ X.z s s b &.5.*.6.E 7.d 8.D 9 i l 9.{ 4 6.y * C 0.q._ k w.=.X.", "JXJXJXJXJX JXJXJXJX # @ + @ , X.3.s Y &.>.&.e.X ~ w 1 r.r.0 9 i <.; u E t.y = & 6 t y.u.i.` ", "JXJXJXJXJX JXJXJXJX p.> @ p.% f 3.b v G >.&.5.O.+ 8.r.r.a.,.0 1 2 p.8 M / y t = k s.N d.=.=.", "JXJXJXJXJX JXJXJX p.: @ $ < X.h b g m o.&.5.k < 2 2 2 8.2 ,.q f.D : # M y t k j u.g.B ;.1.", "JXJXJXJXJX JXJXJX $ 8 X.h.G G G j.>.k.O 8.2 p., q l.d q 2 % <.<.y y y z.R v ' ;.=.", "JXJXJXJXJX x. JXJX S @ # # f c.G h.m v.m e.-.2 b.b.n.q m.q 1 p.# O.z.R ] 9 s M.;.1.", "JXJXJXJXJX x. JXJX 2 1 # # $ X.c.N.B.N.v.v.e.& $ b.q.O V.V. 8., C.] : Z.p U >.k.2.* ", "JXJXJXJXJX x. JXJX V.A. p.# u O.6 X R N.N.S.5.- D.b.n.q. F.b. F.f.l 9.w f v >.o.2.G.k ", "JXJXJXJXJX x. JXJX A. # r H.u.G.k 6 J.2.= C ^ b.b.. F.m.q A.F.F.A.2 9 I v h.o.J s.y.", "JXJXJXJXJX x.x. JX V.% p.# # q.u.K K G.k t ^ R * [ { b. K.V.A.A.F.V.A.m.q A.n c.h.j.L.s.i.i.", "JXJXJXJXJX x. JX f.p.# @ F P.s.K J.J. ./ O.^ ^ u @ D b.b.b.I.m.q A.F.K.F.8.n c.G d.d.s.y.:.", "JXJXJXJXJXJXU.U. JX D p.@ @ + R y.O.Y.] %.<.8 4 8 <., f.A.F. q A.8.r.1 7.l T.R.L.u.i.i.E.", "JXJX JXJXU.U. JX % # > > + F q.u.{ Z C.W.Z.p.1 f.8.w A.F. I.q f.a.a.a.Q.l ] d.W s.- . X.", "JXJXJX U.U. # > : + ; > > P.K ; F W.$ % 9 D 2 V.A.A. q % f.a.a.Q.C.] u.N i.e E.` ", "JXJXJX !.!.x.U.U. @ : ; ; 8 + $ E.y { 9.W.% 7.D 1 2 8.V.V.K. f.f.a.~.7.Q.Z.Z g.N s.. . e ", "JXJXJXJXI.!.!.x.U.U. : ; u 8 u ; > ^.r E C.$ 9 ~.~.1 2 2 V.A.K.F.b.a.a.a.7./.3 W.F K g.g.. q.E.", " JXJX x.U.U. ; u ~ ~ E u > p.(.i.+.Z ~.2 2 2 2 2 f.V.K.F.r.r.~.~.7.$ W.W.Q.M ).K t o . ", "JX JXJXJXJX x._.U. u ~ ^ X / E : # Q s.4 { $ r.S ~.~.~.`.7.`.S `.p.'.'.% /.@ ].$ Z.Z M O.n.[.", "JX JX JXJXI.U.x.U. ~ E / X X / ~ +.0.k [ ~ Z 7./.F > # /././.`.$ # ].> $ `.3 ].W.Q.<.+.@.[.{.", "JXJXJXU.U. U.x.x. [ ^ 6.5 t =.}.u Q = [ ~ : $ <.%.%.F 3 $ $ $ # ].%.|.3 ~.`.3 '.`.7.]./ X.X", "JXJXJXU.U.U.U.U.x.XX 6.5 oX#.t & XK.R.k ~ ; F W.Z { 8 %.F @ + '.'.%.OX+X3 `.S % @X|.#X$X X{.%X", "JXJXJXU.U.XXXX&XXX&X 5 *X*X* - =X-XS ;Xj +.F $ W.~ ~ { :X'.>X>X: '.:X,XOX|./.~./.L +XU.U.&X&X%X", "JX JXI.:.&X&X&X&X&X o *X*X*X XX8 :X:X,XT %.].>X}.3X4Xp.5X% |.T U.U.:.&X6X", "JXU. U.U.XX7X7X7X7X7X7XI.. *X8X1X9X{ r G.@ Z.% ].+X:X+ :X+X} T :X%.,X0XqXwX@X5X7.F 4 U.U.U.&X&X", "JXU. U. XXeXeXeXeX7X* t & rXtXyXM O #.E /.5X% '.@X3 '.uX0X,X+X>XiX} OXwX#X@X5X~.$ ~ oXU.U.U.&X", "JXU.JXU.&X&X&XU.:.X.rX8Xt *X-XpXaXsXw.8 Z.$ % > '.5XdX$ iXOX0XuXiXuXfXwX#X#X@X5X5X2 OXgX& & U.n.", "JX &X7X7X7X7XJXJXE.. *X*X-X c #8E3861854103", ", c #A69979E75965", "< c #6185410330C2", "1 c #9E7969A64924", "2 c #38E328A21861", "3 c #208120811861", "4 c #69A66DB669A6", "5 c #AEBA82076185", "6 c #A69982076185", "7 c #71C6514438E3", "8 c #F7DEC71BAEBA", "9 c #DF7DBAEA9658", "0 c #C71BA28979E7", "q c #D75CAEBA8E38", "w c #514438E328A2", "e c #30C220811861", "r c #DF7DBAEA8E38", "t c #86175D754103", "y c #69A6514438E3", "u c #D75CA28979E7", "i c #BEFB924871C6", "p c #C71B965871C6", "a c #5965410328A2", "s c #965879E76185", "d c #B6DA8E3869A6", "f c #69A655554103", "g c #A69986176185", "h c #C71B9A6971C6", "j c #A69971C65144", "k c #79E7514438E3", "l c #861769A65144", "z c #79E761854103", "x c #492434D328A2", "c c #9E7971C65144", "v c #EFBEDF7DCF3C", "b c #A69969A64924", "n c #D75CAAAA8617", "m c #861759654103", "M c #000000000000", "N c #208114511040", "B c #208118611040", "V c #492438E330C2", "C c #104010400820", "Z c #082004100000", "A c #EFBEBEFBA699", "S c #DF7DB2CA9658", " ", " ", " ", " ", " .X ", " oO+@#$$%&Oo ", " o*=-;:>,<,123+ ", " 4@5:67890@q6>w-+o ", " o+e,qqrt0q0yrui7pa$. ", " s6,a99d,f0gfpg,,h7w$X ", " o@;:9s=9g5%:jklgzdr<>2+ ", " +xcv9gyl:jtkj>kj=0s>p7$X ", " Ocdtsqi,w;jjt==>w1tw7=wwww=m>g70c2X ", " .c>#pqpj=7>7w2MNeB$Bwjzp0;wl ", " Xaw;fh5==O ", " +=q9u,%tjtkwN2cr=0t>1a-,fl0m+ ", " ox=tnrnj<%t7N-pyuf;a177e=sr5=M ", " l5p0zsni17w<$5r;kl=-==,pweCNN=mw2ygh7M ", " Xa#09051eBe--=-:0p7M ", " 47qArhgmkwely-CkwM=Naw%N7&%;,::,3ej:hqp1;m7=wNcnlkaweZZN#lzitwO ", " @1wj6988v8A,V$mkm5pdmm7=eekddjp88888vAh:#VB$Cee2-eNMwk=0@q5=n;w-+ ", " .3:9S::hAA9AAA889pcfftf@++&fCe<>wd1=m=eBo ", "43$=fuesSpSSSSSSS9AA9npdp::5;>f&CB2wwwBMM+ ", ".+eN=dSSSSSSSSSSSSSSS99AA8ASSqqgf+&e&&@fVBO ", " .O+=jiuuuSSSSSquuiiuuSSSSSSSuu0iigssp0fl@3&X ", " X3@fttt>;;c;;>tm@ff>1diii:j;;tl>d:::duSqs2Z*o ", " ZZBZCCC3C&@@@&3&+BCe&a@ff@Ve333e@@&&f>c::57BZ4", " oX.....*O+CC+&4o X4+&CMZ&OO++O+OM3$C23V2awM3", " 4OOOOOO4 ", " ", " ", " ", " ", " ", " "}; /* XPM */ static char *memory36_xpm[] = { /* columns rows colors chars-per-pixel */ "48 48 251 2", " c black", ". c #060505", "X c #131313", "o c gray5", "O c #0b0a09", "+ c #1d1b1c", "@ c #191919", "# c gray15", "$ c #1e2007", "% c #181606", "& c #262707", "* c #b4b18d", "= c #aaaa8a", "- c #b6b495", "; c #a39b83", ": c #938669", "> c #9a967d", ", c #968b74", "< c #786b58", "1 c #a3a284", "2 c #ada786", "3 c #c6c599", "4 c #ccd3aa", "5 c #c7c7a7", "6 c #c2bea2", "7 c #c3bc96", "8 c #443639", "9 c #aeae94", "0 c #010101", "q c #030416", "w c #02020a", "e c #0d111d", "r c #9a949f", "t c #3c4808", "y c #323709", "u c #2d3807", "i c #f3efb8", "p c #bcb38c", "a c #d3d39d", "s c #d2cb92", "d c #baba8a", "f c #eae8a9", "g c #847858", "h c #a79d79", "j c #f2f0ab", "k c #f5f6ba", "l c #fffeca", "z c #fcffd3", "x c #c4b88a", "c c #e9e8b5", "v c #fefee4", "b c #ffffec", "n c #e4ebc7", "m c #080740", "M c #11193b", "N c #000737", "B c #c9a255", "V c #fcc04f", "C c #f4b53a", "Z c #eca82f", "A c #c88221", "S c #020202", "D c #9890a3", "F c #3b3944", "G c #312b0e", "H c #e2e5bc", "J c #b1a983", "K c #a9a47e", "L c #857a68", "P c #a1966f", "I c #402913", "U c #c7c48d", "Y c #d9d99b", "T c #dbdcaa", "R c #d8d8a4", "E c #e0ddab", "W c #e2ddb9", "Q c #435b90", "! c #4d528c", "~ c #403e82", "^ c #cc9059", "/ c #eea852", "( c #e2984e", ") c #db8928", "_ c #5a5566", "` c #463d45", "' c #0d1301", "] c #34382e", "[ c #b3a578", "{ c #e1cd94", "} c #918575", "| c #d3cfa5", " . c #d4d5ac", ".. c #d7d8b7", "X. c #a5a5c9", "o. c #d3bbed", "O. c #ebc4af", "+. c #fdc083", "@. c #e7a760", "#. c #313131", "$. c #6c646a", "%. c #52320a", "&. c #663a0c", "*. c #c77528", "=. c #917965", "-. c #58544a", ";. c #9a9478", ":. c #fafbc7", ">. c #794b2e", ",. c #494629", "<. c #fdffdb", "1. c #f3f8c2", "2. c #a69b89", "3. c #e3e4c2", "4. c #fee9ff", "5. c gray100", "6. c #faf7d9", "7. c #fcd6b2", "8. c #d09942", "9. c #00012a", "0. c #332f32", "q. c gray21", "w. c #612207", "e. c #a60000", "r. c #e24c0a", "t. c #455214", "y. c #a4a489", "u. c #bbbc95", "i. c #dbe1ae", "p. c #dae2b5", "a. c #786238", "s. c #050302", "d. c #110c01", "f. c #918a79", "g. c #5c5952", "h. c #686457", "j. c #63585d", "k. c #fbdfc6", "l. c #f7b775", "z. c #da983b", "x. c #772808", "c. c #710000", "v. c #b70000", "b. c #d4d9aa", "n. c #e8f1bc", "m. c #4a3415", "M. c #8a8565", "N. c #b3ab97", "B. c #3f2b24", "V. c #b1a6af", "C. c #dbcfdd", "Z. c #4b240d", "A. c #8b1f05", "S. c #910000", "D. c #c2c9a3", "F. c #745f35", "G. c #e4ecbd", "H. c #8a8575", "J. c #b2ab8c", "K. c #9d9987", "L. c #a69f97", "P. c #cbbfe4", "I. c #c76311", "U. c #212338", "Y. c #69709d", "T. c #676991", "R. c #494949", "E. c #231707", "W. c #6b0501", "Q. c #4f0000", "!. c #2f0000", "~. c #755a1b", "^. c #cbcca2", "/. c #544931", "(. c #1d0000", "). c #ecf2c4", "_. c #bcbc9b", "`. c #bab6a2", "'. c #384182", "]. c #dea470", "[. c #565a79", "{. c #756965", "}. c #201a1c", "|. c #49520e", " X c #140300", ".X c #504b0e", "XX c #bec39f", "oX c #370e00", "OX c #352713", "+X c #c7cfaa", "@X c #dbe4ba", "#X c #e5f2c9", "$X c #2c305d", "%X c #b7935d", "&X c #f09e2e", "*X c #a8490c", "=X c #3a3a16", "-X c #545349", ";X c #cfd9b1", ":X c #95734a", ">X c #dde7c3", ",X c #8f5012", " , < 1 2 * * 3 4 5 6 7 = ; ; 8 6 5 9 0 o q w e r w ", "t y u t & i p a 3 s d f f : g h s s f j k l z i i * 7 x c v b n m M N B V C Z A S + D F X ", "u % & % G H J h K L K a a a : P x x I U Y a T R 2 P , L c E H W . Q ! ~ ^ / ( ) A w _ ` ", "& ' & ' u 5 ] < h g K d T E [ d U l { g k f i l T 7 2 } ; | ...0 X.o.o.O.+.@.( A q w #.$. ", "%.&.*.t $ =.-.;.: , , } h h J a c :.>.,.l <.k 1.T J 2.2., ...3. 4.5.5.5.6.7.+.8.9.q 0 0.q. ", "&.w.e.r.t.S y.< | J u.U i.f p.1.E a.=. s.d.j 3 f.g.h.g.j.L H H 3.. 5.5.5.5.5.k.l.z.9.w 0 ", "%.x.c.v.) S 2.h.3 T * d b.n.1.v c m. O z z | .f.M.j.2.N.2.L 0 5.5.5.5.5.7.l.z.w B.8 8 V.C.", "Z.A.c.S.*.S D.3 n.b.* u.i.i.n. .L F. o o l 1.z G.N.L H.J.K.$.L.0 P.4.4.4.6.7.l.I.U.V.j.Y.T.R.", "E.W.Q.!.~. ; 3.^.- 2 b.p.4 p b.H /.(.% % l ).).n._.f.6 K.L 2.`.0 Y.'.! O.( ].].*.[.{._ _ $.}.", "|.G Xd..X {.K.j.-.> ^.u.XX3 G.H m.oXm.OXs.:.G.i.p.+X@X#Xf.K.`.V. $XN N %X&X) ) *XS O Y.$X` >.", "|.t $ u =X0 K.g.-X, h.XX= u.;Xp.= m.:XF.% 3 1.p.4 D...D.N.K...>X 9.q 9.,XXH 8X9X0XqX P n XXy.y.D.5 ..n wX0 O w &.Xn <.aX 0 0 jXI.*X*XsX0 0 0 X ", "iXiX' $ |.w g.] ] ^.p.- > > p N./.p <.OXs.,.1 kXd @XD.+X+XlXpX<.aX0 0 0 jXI.*XsXx.0 0 0 X ", "iXiXiX dXS tXyXh hX> 1 = ;.> {.n._.d. X U T 3 3 - D.4 ;XzX#X>XwX0 0 0 0 oXxXxXcX*X. 0 0 0 eX", "iXiXiXiX. f.vX_.G.@X4 bX1 y.;.:.z p.^.n.H > 9 +XhXrX4 lXzXwXwXnX0 0 0 o jXiXS S ", "iX% dXiXiX `...z <.<.zX).z 3.4 zX).@XT . . ...3.v v b b b b mXwX 0 0 0 0 0 ", " ' S S h.MXqXqXqXqXMXqXMX% NXBX# fX3XeXBX# MXqXqXVXqXqXVXVXCX0 ZXZXZX. . . . . . . . w ZX. ", " 0 0 S 0 S ", " S . . . ", "JX JXJX JXJX JXJX o X @ o o JX JXJX JXJX JXJX JXJXJX JX", "JX JXJX JXJX JXJX o X X X @ JX JXJX JXJX JXJX JXJXJX JX", "JX JXJX JXJX JX+ AX o + @ X AX JX JXJX JXJX JXJX JXJXJX JX", " o o O o o O X ", " ", " @ + + AXAXNXNX ", "JXJXJXJXJXJXJXJXJXJXJXJXJXJXJX+ NXNX+ + AXNXNX3XX JXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJX", "JXJXJXJXJXJXJXJXJXJXJXJXJXJXJX# NX+ @ NXAXNXNXNXSX JXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJX", "JXJXJXJXJXJXJXJXJXJXJXJXJXJXJX AXNXNXNX# SX3X JXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJX", "JXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJX X NXNXNXNX# # #.+ JXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJX", "JXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXq.# # # # # # # 3X#.X JXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJX", "JXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXfXNX. 3X# # 3X3X3Xq.DXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJX", "JXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJX . SX# 3X3XSXSXSX#.R.S JXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXAX", "JXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJX #.3XSXSX3XSXSXSX#.SXfXq.. JXJXJXJXJXJXJXJXJXJXJXJXo FXCX", "JXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJX#.fXNX. + SXSXSX#.#.#.#.SXDXCX3XO JXJXJXJXJX. X R.$.CXR.R.", "JXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXX # SXSX#.#.#.q.q.q.q.q.#.GXHXFXFX$.CXGX#.fXR.R.R.R.", "JXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJX . q.#.3X#.q.#.q.q.q.fXfXfXfXfXyXyXGXGXGXR.R.R.R.R.R.", "JXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJX3X#.X + q.q.q.q.fXfXfXfXF yXF yXGXGXR.GXR.R.R.R.R." }; /* XPM */ static char *memory37_xpm[] = { /* columns rows colors chars-per-pixel */ "48 48 241 2", " c black", ". c gray100", "X c #ffebeb", "o c #d2c2ad", "O c #d6c6b9", "+ c #d4c5aa", "@ c #ccc0a3", "# c #d2c2b5", "$ c #d6c6b2", "% c #d4c9ad", "& c #d8c9ab", "* c #daccbc", "= c #d6c5ae", "- c #d6c5b5", "; c #d1bea6", ": c #d9c9b0", "> c #d9cab9", ", c #d8c7af", "< c #d1c2b1", "1 c #cebdad", "2 c #cdbda2", "3 c #cebdb0", "4 c #dccab5", "5 c #d4c2a9", "6 c #d1c2a6", "7 c #d5cabb", "8 c #cec0a9", "9 c #d7c9b5", "0 c #d9c8b5", "q c #d1bc9d", "w c #d6c9b2", "e c #d2c5ae", "r c #d4c4b5", "t c #d8c6b1", "y c #d1c1aa", "u c #d6c9b9", "i c #d2c4aa", "p c #cec1b2", "a c #d4c2ae", "s c #a1947c", "d c #d8c7b6", "f c #d1bead", "g c #cdbea9", "h c #cfc1ad", "j c #d2bca9", "k c #d1bfb1", "l c #cabca2", "z c #d3c29c", "x c #d5c2b1", "c c #d3c3a4", "v c #cbb7a9", "b c #cdbaa5", "n c #d1c197", "m c #cbbda6", "M c #d5c2b9", "N c #cebda6", "B c #cebd9d", "V c #cab9a5", "C c #ccb6a4", "Z c #c9b6a1", "A c #cab195", "S c #cab699", "D c #cdb99d", "F c #cdbaa2", "G c #d1bda1", "H c #d0bb95", "J c #c6b9a2", "K c #cdbd9a", "L c #cab99a", "P c #cabaa1", "I c #fff2ef", "U c #caba9d", "Y c #cab59d", "T c #6e615d", "R c #d7b7b0", "E c #c89c89", "W c #7a6254", "Q c #c18d80", "! c #c8a390", "~ c #c8a994", "^ c #c5b39c", "/ c #c5b395", "( c #c4b5a4", ") c #846554", "_ c #855548", "` c #45281c", "' c #393634", "] c #a57a5c", "[ c #77574b", "{ c #a89478", "} c #c6b292", "| c #b9a493", " . c #c6b99b", ".. c #ccbbaa", "X. c #c6b599", "o. c #332e31", "O. c #887152", "+. c #683e34", "@. c #8c593f", "#. c #64503f", "$. c #957b5f", "%. c #c5b19d", "&. c #8f7471", "*. c #362317", "=. c #000001", "-. c #53393b", ";. c #997c74", ":. c #75533f", ">. c #5b3826", ",. c #633d2b", "<. c #512d20", "1. c #4e281f", "2. c #615758", "3. c #ac8f8c", "4. c #cec19c", "5. c #cdb999", "6. c #b48787", "7. c #362913", "8. c #a49e91", "9. c #cdb494", "0. c #a27f63", "q. c #895e58", "w. c #452a28", "e. c #bea68d", "r. c #6d6c66", "t. c #d8c7a0", "y. c #d2b6a4", "u. c #d4b68b", "i. c #c9b596", "p. c #b5a69b", "a. c #311d11", "s. c #6b6462", "d. c #b89b89", "f. c #c3ad9b", "g. c #9b6557", "h. c #333235", "j. c #c2a58c", "k. c #c2a584", "l. c #ccb49b", "z. c #c2a98d", "x. c #c6b28e", "c. c #a88474", "v. c #c6b5a1", "b. c #6a4a49", "n. c #5d4333", "m. c #c9b2a1", "M. c #856a67", "N. c #795847", "B. c #c9b291", "V. c #c3ac92", "C. c #c4ac8c", "Z. c #c7bb91", "A. c #bdb498", "S. c #beac8c", "D. c #bdaa84", "F. c #2a292c", "G. c #2e2a24", "H. c #c9b586", "J. c #c9ad8e", "K. c #bdab98", "L. c #000002", "P. c #88674f", "I. c #c6ad96", "U. c #432930", "Y. c #251c16", "T. c #5f5648", "R. c #cbb38b", "E. c #c3ab85", "W. c #ac9585", "Q. c #333021", "!. c #caae99", "~. c #cdb994", "^. c #c9b29d", "/. c #ccb88f", "(. c #c5b187", "). c #27200d", "_. c #958c72", "`. c #34312d", "'. c #d1bca5", "]. c #d0b397", "[. c #c9ad93", "{. c #a87d78", "}. c #362c29", "|. c #9e7a68", " X c #0d0d12", ".X c #0b0b0e", "XX c #212124", "oX c #a59277", "OX c #a18872", "+X c #04040b", "@X c #14141a", "#X c #2b2b33", "$X c #c0a87d", "%X c #bfa281", "&X c #bfae90", "*X c #4f444d", "=X c #594842", "-X c #33333a", ";X c #c4a578", ":X c #513e41", ">X c #201b0a", ",X c #020206", " , < - $ @ 1 2 3 - 4 5 ", "BXBXBXBXBXBXBXBXBXBXBXBXBXBXBX. X o - 6 # 7 8 7 9 0 > % < q * w 0 - $ * = - e w r w > $ < * t < ", "BXBXBXBXBXBXBXBXBXBXBXBXBXBX. X e # 5 < < w < y $ w , u r > 7 > u i * 6 * r O r $ 7 = p = = o a ", "BXBXBXBXBXBXBXBXBXBXBXBXBX. X s d + e o e u f # g e $ = O = h < d * 4 r o - o o $ 2 O o o r 9 # ", "BXBXBXBXBXBXBXBXBXBXBXBX. X - - e = e - % < o $ j = o O r < y < o d > i * @ O r - u y u e 8 i h ", "BXBXBXBXBXBXBXBXBXBXBX. X k l o r z u , x r 2 O $ u i $ 9 = d : e > < * $ 0 o o r : r - - < t o ", "BXBXBXBXBXBXBXBXBXBX. X - i > u c v y r w = t c k % x y b # t d : d e e > > 3 9 3 e 8 h y r - g ", "BXBXBXBXBXBXBXBXBXBXX = y < d c < n # 6 - j $ f 6 o e h y m d r > - $ o = $ + ; M + 2 w o = r # ", "BXBXBXBXBXBXBXBXBXBXd : : r 8 u x x $ a # , o c o & < - N < y # % f e j r i u y y N ; e 2 o + @ ", "BXBXBXBXBXBXBXBXBXBXr d t O i y x + - o y < f f B f 6 $ o $ < y - j g , 8 # $ r x o f g 3 < 1 V ", "BXBXBXBXBXBXBXBXBXBX$ 6 > a f y 6 M , x y 2 b 2 x y C e f < 2 x 6 O e - N 8 $ r e o g o g f y m ", "BXBXBXBXBXBXBXBXBXBXx = 6 = y $ 2 g w a $ Z x 2 b A S 1 D < F f N G r H o 2 2 F o 5 y p G ; J S ", "BXBXBXBXBXBXBXBXBXBXc + x 5 u z > 2 + 2 5 < q < 2 g $ D r K y D @ r @ r ; o y L P f B # 1 Z F 1 ", "BXBXBXBXBXBXBXBXBXBX0 : + I I I I o c f < D a K y 2 ; o G p U h 6 G e U j Y i b O y 1 f g N v P ", "BXBXT R E W Q ! ! ~ % 7 I * - c h c P ^ g g 5 < 2 N B B 2 / f q y g y w D m 2 6 g x 5 ; - P 5 ( ", "BX) _ ` BXBX' ] [ { E c c + % w } 1 e | k G j z b 5 F h U 0 B r c c c ; c 6 y @ 2 1 g e h ...X.", "o.O.BXBXBXBXBXo.+._ @.@._ _ #.BXBXw = | $.r D 1 c j 6 b @ q o z = 2 q @ 5 c .2 8 2 P 2 %.2 P @ ", "&.*.BXBXBXBXBXBX-.;.:.>.,.<.1.BXBX2.c 3.$.@ 5 4.x 6 o e G o 5.f z 2 r D 6 q P m S ( S J ^ g ^ J ", "6.7.BXBXBXBXBXBXBX8.9.E 0.q.w.BXBX7 P e.$.; 5 g 2 2 e G 2 4.o @ G P q y @ b D ^ P 2 P %.~ X.l ^ ", "q.7.BXBXBXBXBXBXBXr.$ t.y.u.i.r % y 2 3.$.j 2 6 ; @ o a 2 j U h 4.a @ m 6 c y U h 4.2 / p.X.Z P ", "q.a.BXBXBXBXBXBXBXs.6 v D o 5.U S i g d.8 6 F y 6 F X.F 2 U b 2 j U 3 S o 2 l b 2 j X.Y f.X.J U ", "g.+.BXBXBXBXBXBXBXh.A 5.j.k.l.b 6 b z.$.q @ 6 c j S b B g P 2 m L b B l F ..S 2 g } ~ ( x.^ U Y ", "c.0.BXBXBXBXBXBXBXBX% x c 8 e.e.E { $.G N D G Z K F z 8 5.2 Z g l 2 v.2 8 U l g l g v.L ( X.v.m ", "b.f.n.BXBXBXBXBXBXBXa c @ 2 3 j @ o n g 5.; q 2 F L 1 D 1 S V 5.2 m.l F 2 b N P J X.U j 9.^ Y f.", "-.M.N.BXBXBXBXBXBXBX1 @ U J X.g B.( X.v...D ^ X.Z L } %.V.J m.P C.V Z.%.^ / A.X.J ..S.2 A Z D.D.", "F.7.) G.BXBXBXBXBXBXg v.G J @ 4.J Z.V S %.U V.A H.f.D.V.e.^ J.S.e.} Y m h 8 ( g .A.K.} } C.X.V.", "BX) BXP.BXBXBXBXBXBXP B Z l y .X... .^ e.9.x.S v.x.I.V.f.%.} f.V.f.v.5.p Z.U ^ %./ V.V./ ~ Y V.", "BXU.Y.M.T.BXBXBX' BXP @ q G D L L K F S j } X.i.R.l.R.m.R.Z I.S ~ 9.F E.f.P %.U } F I.x.~ } ~ F ", "BXs.>.h.W.BXBXBXBXBXQ.c y G 5 q o / S D S 5.A R.!.q y.B.i.9.~.^.H.X./.^.5.B.i./.A B.D (.C.~ C.D.", "BXBXM.).U._.BXBXBXBXBX`.H 2 H 5 9.D '.9.'.B.l.j.R.].u.].[.Y I.U v R.v [.Y I.9.y.H m.9.x.I.z.~ (.", "BXBXBX:.' {.BXBXBXBXBXBX}.s g / 2 5.B.D z.q J.9.!.].l.].l.J.S A R.m.H.v / S !.R.^.H.D R.V K.} | ", "BXBXBXM.Y.2.|.BXBXBXBXBX X_.].5.; l.S ^.[.%.C.9.[.J./ C.A I.%.z.~ !.R.} ~ } ^.C.%.B.l.} D.!.i.", "BXBXBXBXb.BX{.G.BXBXBXBXBX.XXXoXg E.9.B.J.V } %.V.[.f.k.f.k.X.k.C.Y e.v z.%.} z.V.z./ z.X.%.i.9.", "BXBXBXBX! >.F.OXBXBXBXBXBX+X@X#X2.Y i.!.C.C.C $Xj.E.z.%.%Xf.z.X.&Xz./ k.I.z.} f.B.f.k.V.j.C.~ I.", "BXBXBXBXBX;.BX*X=XBXBXBXBX XXX-X2.W.%.X.D E.v.R.B.X.;XI.;X^.;XI.C.I.f.~ j.S I.i.k.I.j.F A i.I.", "BXBXBXBXBX:X>XBXW o.BXBXBXBX,X@X.BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBX", "BXBXBXBXBXBXBXBXBXBXY.*.` g.#.BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBX", "BXBXBXBXBXBXBXBXBXBXBXBXNXQ.Q.BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBX" }; /* XPM */ static char *memory38_xpm[] = { /* columns rows colors chars-per-pixel */ "48 48 55 1", " c black", ". c #000010", "X c #001000", "o c #001010", "O c #100000", "+ c #100010", "@ c #101000", "# c #101010", "$ c #101020", "% c #102010", "& c #201010", "* c #301010", "= c #201020", "- c #202010", "; c #203010", ": c #202020", "> c #202030", ", c #203020", "< c #302030", "1 c #304030", "2 c gray25", "3 c #405040", "4 c #504040", "5 c #504050", "6 c #505040", "7 c #505050", "8 c #505060", "9 c #506050", "0 c #506060", "q c #605050", "w c #605060", "e c #606060", "r c #607060", "t c #706070", "y c #707060", "u c gray44", "i c #807080", "p c #808070", "a c #808080", "s c #809080", "d c #908080", "f c #908090", "g c #909080", "h c #909090", "j c #90a090", "k c #a08090", "l c #a09090", "z c #a0a090", "x c #a0a0a0", "c c gray69", "v c #b0b0c0", "b c #c0b0b0", "n c #c0c0c0", "m c #d0d0c0", "M c None", /* pixels */ "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM", "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM", "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM", "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM", "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM", "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM", "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM", "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM", "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM", "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM", "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM", "MM+##@+##@+##@+##@+##@+##@+##@+##@+##@+##@+#uxxM", "MM##o###o###o###o###o###o###o###o###o###o###ydxM", "MM::>vv8vv8v8:::::::::v::::::::::::::::::::@udlM", "MM::>vv8:v:8v::::::::vvv:::::::::::::::::::#udlM", "MM:::8::8888:::::::::::::::::::::::::::::::#ushM", "MM1########################################1ushM", "MM::#::::::::::::::::::::::::::::::::::::#::ushM", "MM::#::::::::::::::::::::::::::::::::::::#::ydkM", "MM::#::::::::::::::::::::::::::::::::::::#::ydkM", "MM::#::::::::::::::::::::::::::::::::::::#::ydkM", "MM::#::::::::::::::::::::::::::::::::::::#::uahM", "MM::#::::::::::::::::::::::::::::::::::::#::uahM", "MM::#::################$888888888888888::#::uahM", "MM::#:######ivcp########<88888xn;&88888#:#::ydlM", "MM::#:#####9n.yne########8888gqXOX&888#8:#::ydlM", "MM::#:#####e..Xma########8888uXXO+u88#88:#::ydlM", "MM::#:#####iXXOOy########8888q..Xmh8#888:#::ushM", "MM::#:#####0qXOX&########8888gc.qbt#888::#::uahM", "MM::#::#####xn;&#######=888888gcxg88888::#::tahM", "MM::#::::::::::::::::::::::::::::::::::::#::rafM", "MM::#::::::::::::::::::::::::::::::::::::#::ralM", "MM::#::::::::::::::::::::::::::::::::::::#::rdlM", "MM::#::::::::::::::::::::::::::::::::::::#::uajM", "MM::#:::::::::::::::::::::::::::::*:**:::#::rahM", "MM::#::::::::::::::::::::::::::::::::::::#::0ahM", "MM,-%&####@###########@#@@#@@#@@#@@#@@#@@#:-iagM", "MMgr9q66532422423423422423463443466566567wyphzxM", "MMMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaM", "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM", "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM", "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM", "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM", "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM", "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM", "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM", "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM", "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" }; /* XPM */ static char *memory39_xpm[] = { /* columns rows colors chars-per-pixel */ "48 48 95 2", " c black", ". c #102020", "X c #201020", "o c #202010", "O c #202020", "+ c #202030", "@ c #203020", "# c #203030", "$ c #302020", "% c #302030", "& c #303020", "* c gray19", "= c #303040", "- c #304030", "; c #304040", ": c #403030", "> c #403040", ", c #404030", "< c gray25", "1 c #404050", "2 c #405040", "3 c #405050", "4 c #504040", "5 c #504050", "6 c #505040", "7 c #505050", "8 c #505060", "9 c #506050", "0 c #506060", "q c #605050", "w c #605060", "e c #606050", "r c #606060", "t c #606070", "y c #607060", "u c #607070", "i c #706060", "p c #706070", "a c #707060", "s c gray44", "d c #707080", "f c #708070", "g c #708080", "h c #807070", "j c #807080", "k c #808070", "l c #808080", "z c #808090", "x c #809080", "c c #809090", "v c #908080", "b c #908090", "n c #909080", "m c #909090", "M c #9090a0", "N c #90a090", "B c #90a0a0", "V c #a09090", "C c #a090a0", "Z c #a0a090", "A c #a0a0a0", "S c #a0a0b0", "D c #a0b0a0", "F c #a0b0b0", "G c #b0a0a0", "H c #b0a0b0", "J c #b0b0a0", "K c gray69", "L c #b0b0c0", "P c #b0c0b0", "I c #b0c0c0", "U c #c0b0b0", "Y c #c0b0c0", "T c #c0c0b0", "R c #c0c0c0", "E c #c0c0d0", "W c #c0d0c0", "Q c #c0d0d0", "! c #d0c0d0", "~ c #d0d0c0", "^ c #d0d0d0", "/ c #d0d0e0", "( c #d0e0d0", ") c #d0e0e0", "_ c #e0d0d0", "` c #e0d0e0", "' c #e0e0d0", "] c gray88", "[ c #e0f0e0", "{ c #e0f0f0", "} c #f0e0e0", "| c #f0e0f0", " . c #f0f0e0", ".. c gray94", "X. c None", /* pixels */ "X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.", "X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.", "X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.", "X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.m m m m m m m m m m m X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.", "X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.m m ........................m m m X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.", "X.X.X.X.X.X.X.X.X.X.X.X.X.m m ........` K / { ..{ ..............m m X.X.X.X.X.X.X.X.X.X.X.X.X.X.", "X.X.X.X.X.X.X.X.X.X.X.X.m ............[ b 7 h W ! ....] ` A ^ ...m m X.X.X.X.X.X.X.X.X.X.X.X.X.", "X.X.X.X.X.X.X.X.X.X.X.m ..................E f r D / ....P L y l ( ....m X.X.X.X.X.X.X.X.X.X.X.X.", "X.X.X.X.X.X.X.X.X.X.m ........................' ` ........ .] J G .....m X.X.X.X.X.X.X.X.X.X.X.", "X.X.X.X.X.X.X.X.X.m { | ( R R ` { ........................................m X.X.X.X.X.X.X.X.X.X.", "X.X.X.X.X.X.X.X. ( Y A p * : a K ( | ......................................m X.X.X.X.X.X.X.X.X.", "X.X.X.X.X.X.X. W S m s @ O O O 9 A Q ] ..............] D ^ { ..........Q / ..m X.X.X.X.X.X.X.X.", "X.X.X.X.X.X. J V x l y O O O o > s C P } ............[ V 7 h W _ ........9 l ^ m X.X.X.X.X.X.X.", "X.X.X.X.X.X.a b x l m l O O O O - p l M P | ............{ R f 8 K ` ......^ l r R m X.X.X.X.X.X.", "X.X.X.X.X. b k v n C T * O O O < 9 p l b D ] ..............| ^ ! ....] .. .| ' ] ..m X.X.X.X.X.", "X.X.X.X.X.a s j f j x Y g + @ * 3 r y p y d F ] ......................................m X.X.X.X.", "X.X.X.X. e j k h r w s H A h a p a r 7 4 * < m | ....................................m X.X.X.X.", "X.X.X.X.< s x l y = @ * r m x d u p r < @ O O % I ......................................m X.X.X.", "X.X.X. w y l l 5 O X O * y h s j f j , O O X O r ] ....................................m X.X.X.", "X.X.X.< 9 j x b - O O O @ 8 u s g z N 7 . O O O - ! ............................{ ......m X.X.X.", "X.X.X.< i s v m > O O o $ 7 p y s l Y y O O O o : K ........................} P V l C W m X.X.X.", "X.X. t r j x A 9 O O O @ w f j l l R S O O O O < A { ..................{ Y s 5 2 5 9 z l X.X.X.", "X.X.r r w s j m b @ X O 4 r j k j a C ] p O X O w A | ................' l < > * > - 4 r j X.X.X.", "X.X.r r 9 p y l F K f j f j f j 0 > < m ) S 0 s x H [ ..............^ p - = ; > ; 5 ; r g X.X.X.", "X.X.r y q 6 % & p K U N v l l s : O O O s P A x v K ] ............W w * : * > > > * O y j X.X.X.", "X.X.r t 9 * O O # s x z l d f t O O O O # p g z x H ] ..........W 7 * * < < < < # O @ C X.X.X.X.", "X.X.r s j & X O O < h k j s l r O O O O O 2 p s l D } ......| ~ 5 * * < < < < < $ O 7 X.X.X.X.", "X.X.r m l * O O . > u j f l x l . O O O O < y j x K [ ......( t & < < < < < < < O 1 N X.X.X.X.X.", "X.X. m j , O o O * i f j f v l O O O O $ , w f b K | ....] j < < < < < < 7 7 7 q f X.X.X.X.X.", "X.X.X.< 0 l O O # 7 0 s s s s b - O O O * 5 r j c L { ..{ A < < < 7 7 7 7 7 r r r A X.X.X.X.X.", "X.X.X. p k h 6 s s j a p 9 q a s - * < w r p l m P | ..R 9 > < 7 7 r r r r r f b X.X.X.X.X.X.", "X.X.X.X.< 5 f b x l l s 9 > - < y m B b f d g z N Y ( E f 7 2 7 r r r r r s s s X.X.X.X.X.X.X.", "X.X.X.X.< r 7 y h k j s : O O O > r s f h k j x V K G s 5 7 r r r r r s s s s s X.X.X.X.X.X.X.", "X.X.X.X.X.< < 8 y d s d * O O O O 5 r t y s s z m m l t 7 7 s s s s s s s s N X.X.X.X.X.X.X.X.", "X.X.X.X.X.< < , 7 y j Z : O O O O - w r r r p x l s p r s s s s s s s s s l l X.X.X.X.X.X.X.X.X.", "X.X.X.X.X.X.< 8 ; w f R 7 O O O . = 9 r y t y s 9 t u t 7 < 9 r r s s l l l X.X.X.X.X.X.X.X.X.", "X.X.X.X.X.X.X.< 7 < r K v O O O O * 7 7 w r q , 4 r p 2 $ O 5 9 s s s l l X.X.X.X.X.X.X.X.X.X.", "X.X.X.X.X.X.X.X.< r - d W 7 O O # < 3 8 7 5 - > 2 t 3 O O = s s s l l l X.X.X.X.X.X.X.X.X.X.X.", "X.X.X.X.X.X.X.X.X.s j < s K j 7 4 < 4 < > * : , w 9 $ O % 9 s s l l l X.X.X.X.X.X.X.X.X.X.X.X.", "X.X.X.X.X.X.X.X.X.X.s < 3 1 9 < - * * * @ = - < 9 = O O 7 s l c c K X.X.X.X.X.X.X.X.X.X.X.X.X.", "X.X.X.X.X.X.X.X.X.X.X. s < 7 & $ O $ @ $ & > 6 w * * 9 s a l n G X.X.X.X.X.X.X.X.X.X.X.X.X.X.", "X.X.X.X.X.X.X.X.X.X.X.X.X. s < y = # = @ = < r y p f j g l m X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.", "X.X.X.X.X.X.X.X.X.X.X.X.X.X.X. s < 8 * * * w s j s j f l N X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.", "X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X. s s s s s X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.", "X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.", "X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.", "X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.", "X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X." }; /* XPM */ static char * memory40_xpm[] = { "48 48 540 2", " c None", /*". c #D7D7D7",*/ ". c None", "+ c #D4D4D4", "@ c #CDCDCD", "# c #D0D0D0", "$ c #D3D3D3", "% c #D2D2D2", "& c #D6D6D6", "* c #D5D5D5", "= c #C8C8C8", "- c #AAAAAA", "; c #B6B6B6", "> c #BEBEBE", ", c #BDBDBD", "' c #B7B7B7", ") c #B8B8B8", "! c #BCBCBC", "~ c #ADADAD", "{ c #C7C7C7", "] c #CACACA", "^ c #BBBBBB", "/ c #959595", "( c #949494", "_ c #A0A0A0", ": c #B0B0B0", "< c #B2B2B2", "[ c #B9B9B9", "} c #B4B4B4", "| c #919191", "1 c #D1D1D1", "2 c #B3B3B3", "3 c #8C8C8C", "4 c #AEAEAE", "5 c #858585", "6 c #747474", "7 c #B5B5B5", "8 c #C1C1C1", "9 c #979797", "0 c #AFAFAF", "a c #BABABA", "b c #9F9F9F", "c c #8A8A8A", "d c #C6C6C6", "e c #D7D7D6", "f c #ADACAC", "g c #73716E", "h c #888887", "i c #8E8E8E", "j c #818181", "k c #C0C0C0", "l c #C9C9C9", "m c #8F8F8F", "n c #D4D3D3", "o c #CAC7C4", "p c #B8B6B1", "q c #736F68", "r c #8C8372", "s c #99948C", "t c #908E8A", "u c #73716D", "v c #AAA8A5", "w c #D0CFCF", "x c #A7A7A7", "y c #D5D4D3", "z c #C2BEB8", "A c #9C907D", "B c #A89A84", "C c #AB9C85", "D c #C0B196", "E c #CBBDA5", "F c #CDC1AE", "G c #BAAF9C", "H c #B5AA99", "I c #CCC7C0", "J c #CFCCC8", "K c #797979", "L c #C5C2BB", "M c #A59A87", "N c #A09177", "O c #B4A387", "P c #C7B698", "Q c #D5C4A8", "R c #D8CAB1", "S c #D9CBB5", "T c #D3C5AE", "U c #C8BAA2", "V c #BFB29A", "W c #B0A38E", "X c #C3BEB6", "Y c #C2C1BE", "Z c #D2D1D1", "` c #C5C5C5", " . c #656565", ".. c #C6C2BB", "+. c #A89D8A", "@. c #A6987E", "#. c #B6A689", "$. c #C8B799", "%. c #D7C6A9", "&. c #E0D1B7", "*. c #E2D5BE", "=. c #DDD0B9", "-. c #D1C2A8", ";. c #BEAE93", ">. c #B3A387", ",. c #A9997C", "'. c #998B73", "). c #7B7264", "!. c #B6B2AD", "~. c #D3D2D1", "{. c #C8C7C7", "]. c #969696", "^. c #6C6C6C", "/. c #575757", "(. c #B4A488", "_. c #C5B498", ":. c #D5C4A7", "<. c #E5D7C0", "[. c #E2D5BF", "}. c #D9CBB4", "|. c #CCBCA1", "1. c #BCAB8E", "2. c #AB9A80", "3. c #9E8D72", "4. c #938165", "5. c #86755B", "6. c #8C7E6B", "7. c #B7B2AC", "8. c #B4B3B3", "9. c #868686", "0. c #737373", "a. c #535353", "b. c #636363", "c. c #BFBFBF", "d. c #D3D3D2", "e. c #C1BEB8", "f. c #A49A86", "g. c #A5977E", "h. c #C4B295", "i. c #D4C3A6", "j. c #DECFB4", "k. c #E4D8C0", "l. c #E3D6BF", "m. c #DACBB5", "n. c #CEBEA4", "o. c #B8A587", "p. c #A9977B", "q. c #9E8B6F", "r. c #948164", "s. c #8D7A5D", "t. c #847157", "u. c #786B58", "v. c #68655F", "w. c #616161", "x. c #4B4B4B", "y. c #4A4A4A", "z. c #A8A8A8", "A. c #B9B6B1", "B. c #998F7D", "C. c #A3957B", "D. c #C3B294", "E. c #D1BFA1", "F. c #DECEB3", "G. c #E5D7BF", "H. c #E5D8C2", "I. c #DED0B7", "J. c #CFBFA5", "K. c #C5B396", "L. c #BDAA8B", "M. c #AF9C7E", "N. c #A49173", "O. c #9C896B", "P. c #958264", "Q. c #827054", "R. c #73634B", "S. c #5B5244", "T. c #44413E", "U. c #2F2F2F", "V. c #545454", "W. c #C4C3C0", "X. c #847B6D", "Y. c #9B8C73", "Z. c #D0BEA0", "`. c #DAC9AC", " + c #E3D5BD", ".+ c #E5D8C1", "++ c #DFD2BC", "@+ c #D3C3A9", "#+ c #C6B497", "$+ c #BEAB8C", "%+ c #B5A182", "&+ c #A69375", "*+ c #978466", "=+ c #937F62", "-+ c #8C785B", ";+ c #816E52", ">+ c #736147", ",+ c #5E503A", "'+ c #3F3A31", ")+ c #4F4E4D", "!+ c #D5D5D3", "~+ c #C5C2BA", "{+ c #A49882", "]+ c #B2A286", "^+ c #D9C9AB", "/+ c #E0D2B8", "(+ c #E4D7C0", "_+ c #E0D2BC", ":+ c #D4C6AE", "<+ c #C7B699", "[+ c #C0AC8D", "}+ c #B7A485", "|+ c #AA987A", "1+ c #9F8C6E", "2+ c #988466", "3+ c #938062", "4+ c #8E7B5E", "5+ c #867255", "6+ c #7B674B", "7+ c #6C593F", "8+ c #5C4B34", "9+ c #5F5443", "0+ c #AAA7A4", "a+ c #D4D3D2", "b+ c #B1A591", "c+ c #B3A388", "d+ c #C1AF92", "e+ c #CFBD9E", "f+ c #D9C8AA", "g+ c #E3D7BF", "h+ c #E0D3BD", "i+ c #D7C8AF", "j+ c #C9B89B", "k+ c #C0AD8E", "l+ c #B9A687", "m+ c #AE9B7C", "n+ c #A28E70", "o+ c #988568", "p+ c #938063", "q+ c #877356", "r+ c #7D694D", "s+ c #715E43", "t+ c #65533A", "u+ c #584731", "v+ c #645746", "w+ c #BFBCB8", "x+ c #BFBBB6", "y+ c #A39783", "z+ c #AE9D81", "A+ c #BAA98B", "B+ c #C4B394", "C+ c #D0BFA1", "D+ c #DACAB0", "E+ c #DFD2BB", "F+ c #D7C9B2", "G+ c #CAB99E", "H+ c #C2AF91", "I+ c #BCA98A", "J+ c #B19E7F", "K+ c #9B886A", "L+ c #8E7B5D", "M+ c #877457", "N+ c #7E6A4E", "O+ c #746045", "P+ c #68563B", "Q+ c #5B4A32", "R+ c #51412B", "S+ c #5D5141", "T+ c #BEBBB8", "U+ c #C8C7C3", "V+ c #958B7B", "W+ c #A2937A", "X+ c #B5A589", "Y+ c #BFAF92", "Z+ c #C7B598", "`+ c #CDBEA2", " @ c #D7CAB4", ".@ c #D5C7AF", "+@ c #CBBA9F", "@@ c #C3B092", "#@ c #BEAA8B", "$@ c #B6A283", "%@ c #A89578", "&@ c #9C896C", "*@ c #887457", "=@ c #806C50", "-@ c #776347", ";@ c #6B593E", ">@ c #604E35", ",@ c #54432D", "'@ c #4D3F2C", ")@ c #665D52", "!@ c #C0BEBC", "~@ c #D4D4D3", "{@ c #C2BEB7", "]@ c #9C8F79", "^@ c #95866D", "/@ c #A19278", "(@ c #AD9E83", "_@ c #C0B095", ":@ c #CDBFA7", "<@ c #D4C8B3", "[@ c #CCBEA9", "}@ c #C5B398", "|@ c #BFAD8E", "1@ c #B7A384", "2@ c #AB987A", "3@ c #A08C6E", "4@ c #968265", "5@ c #907C5F", "6@ c #8A765A", "7@ c #806D51", "8@ c #786549", "9@ c #6F5D42", "0@ c #66543A", "a@ c #594831", "b@ c #4F402A", "c@ c #5A4E3D", "d@ c #ABA8A3", "e@ c #CBC9C6", "f@ c #988F7F", "g@ c #7C705B", "h@ c #786D56", "i@ c #7D715C", "j@ c #837762", "k@ c #978C77", "l@ c #B5A995", "m@ c #BFB199", "n@ c #BBA98D", "o@ c #B2A082", "p@ c #AB9879", "q@ c #A08D6F", "r@ c #988567", "s@ c #8D795C", "t@ c #847053", "u@ c #796549", "v@ c #705D42", "w@ c #69563C", "x@ c #5F4D34", "y@ c #52422C", "z@ c #483924", "A@ c #584C3C", "B@ c #BCBAB7", "C@ c #CAC8C5", "D@ c #928A7B", "E@ c #726754", "F@ c #6F644F", "G@ c #706551", "H@ c #6F6551", "I@ c #6E6450", "J@ c #786D59", "K@ c #877B64", "L@ c #9E8E74", "M@ c #A69376", "N@ c #9B886B", "O@ c #927F62", "P@ c #907D60", "Q@ c #867356", "R@ c #7C684C", "S@ c #6A573D", "T@ c #625037", "U@ c #57452E", "V@ c #4C3C27", "W@ c #453725", "X@ c #5D554A", "Y@ c #BEBDBB", "Z@ c #BAB7B1", "`@ c #787061", " # c #695E4B", ".# c #6D624E", "+# c #6E634F", "@# c #6D634F", "## c #6A604C", "$# c #695F4A", "%# c #6C614C", "&# c #746852", "*# c #81745D", "=# c #918065", "-# c #8E7B5F", ";# c #8A775A", "># c #8B785B", ",# c #725F44", "'# c #6B583D", ")# c #5C4B33", "!# c #4E3E29", "~# c #473723", "{# c #544838", "]# c #A9A6A1", "^# c #C4C4C3", "/# c #7A7771", "(# c #655C4D", "_# c #675D4A", ":# c #6B614E", "<# c #6A614E", "[# c #655C49", "}# c #645B48", "|# c #665C48", "1# c #675D49", "2# c #685E4A", "3# c #6D624C", "4# c #796950", "5# c #826F53", "6# c #826F52", "7# c #7C684B", "8# c #6D5A40", "9# c #67543B", "0# c #53432C", "a# c #443624", "b# c #62584C", "c# c #BFBDBB", "d# c #B7B6B4", "e# c #817A6F", "f# c #685F4C", "g# c #635A47", "h# c #4B4433", "i# c #483F2F", "j# c #544935", "k# c #605642", "l# c #645A47", "m# c #625845", "n# c #655A45", "o# c #706046", "p# c #766449", "q# c #6F5D41", "r# c #69573C", "s# c #56452E", "t# c #433421", "u# c #514636", "v# c #D3D2D2", "w# c #BBB8B4", "x# c #837C6F", "y# c #665D4B", "z# c #5B5241", "A# c #403729", "B# c #3D3426", "C# c #453C2D", "D# c #514939", "E# c #605744", "F# c #635946", "G# c #615744", "H# c #635743", "I# c #665A44", "J# c #695940", "K# c #635138", "L# c #584730", "M# c #4E3D28", "N# c #463723", "O# c #423422", "P# c #5C5449", "Q# c #BEBCBA", "R# c #BAB8B3", "S# c #7E7769", "T# c #5B5343", "U# c #443D2F", "V# c #433B2B", "W# c #4C4434", "X# c #5C5340", "Y# c #685F4B", "Z# c #605643", "`# c #605540", " $ c #5F5038", ".$ c #58462F", "+$ c #4F3F2A", "@$ c #433522", "#$ c #5D5243", "$$ c #ABA8A4", "%$ c #B8B5B1", "&$ c #787166", "*$ c #554D3F", "=$ c #52493A", "-$ c #695E4A", ";$ c #726753", ">$ c #635A46", ",$ c #605644", "'$ c #5B5240", ")$ c #594E3B", "!$ c #52432E", "~$ c #473824", "{$ c #41321F", "]$ c #4B3F2E", "^$ c #938F89", "/$ c #CBCBCA", "($ c #B4B1AE", "_$ c #6F6A60", ":$ c #696254", "<$ c #675E4D", "[$ c #756955", "}$ c #665C4A", "|$ c #625846", "1$ c #5D5441", "2$ c #58503E", "3$ c #564C39", "4$ c #50432F", "5$ c #463724", "6$ c #5F5649", "7$ c #B9B7B4", "8$ c #D2D2D1", "9$ c #C2C1BF", "0$ c #B2AFAB", "a$ c #787267", "b$ c #6E6657", "c$ c #605746", "d$ c #5A5141", "e$ c #595040", "f$ c #574D3D", "g$ c #554C3B", "h$ c #514938", "i$ c #4F4534", "j$ c #494030", "k$ c #423827", "l$ c #5D5244", "m$ c #ACA9A4", "n$ c #C3C2C0", "o$ c #B0ADA9", "p$ c #6D675C", "q$ c #625B4F", "r$ c #5F574B", "s$ c #4A4236", "t$ c #453E32", "u$ c #453F31", "v$ c #463F31", "w$ c #4D4335", "x$ c #938F8A", "y$ c #C1C0BE", "z$ c #BEBDBA", "A$ c #ABA9A5", "B$ c #5C574F", "C$ c #4E4943", "D$ c #534D43", "E$ c #595347", "F$ c #595248", "G$ c #605A52", "H$ c #B8B6B5", "I$ c #D1D1D0", "J$ c #BDBCBB", "K$ c #BAB9B8", "L$ c #BCBAB8", "M$ c #BDBCB9", "N$ c #BDBCBA", "O$ c #BEBDBC", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . + @ # $ $ % % % # @ + & . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . & * = - ; > , ' ) ! ' ~ { { % . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . % { ] ^ ; - / / ( _ : < [ } | [ $ . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . 1 2 3 4 ; _ 5 6 7 { ] 8 9 0 a b c d . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . e 1 f g h _ i j } k % . . $ { l ! - m d . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . n o p q r s t u v w & . . . . & # 7 x 3 d . . . . . . . . . ", ". . . . . . . . . . . . . . . . . y z A B C D E F G H I J y & . . . # } b K 8 & . . . . . . . . ", ". . . . . . . . . . . . . . . . y L M N O P Q R S T U V W X Y Z . + ` < 3 ., & . . . . . . . . ", ". . . . . . . . . . . . . . . y ..+.@.#.$.%.&.*.=.-.;.>.,.'.).!.~.{.( ].^./.^ & . . . . . . . . ", ". . . . . . . . . . . . . . y L +.@.(._.:.&.<.[.}.|.1.2.3.4.5.6.7.8.9.0.a.b.c.& . . . . . . . . ", ". . . . . . . . . . . . . d.e.f.g.(.h.i.j.k.l.m.n.h.o.p.q.r.s.t.u.v.w.x.y.z.% . . . . . . . . . ", ". . . . . . . . . . . . % A.B.C.(.D.E.F.G.H.I.J.K.L.M.N.O.P.s.Q.R.S.T.U.V., & . . . . . . . . . ", ". . . . . . . . . . . e W.X.Y.>.D.Z.`. +.+++@+#+$+%+&+O.*+=+-+;+>+,+'+)+z.1 . . . . . . . . . . ", ". . . . . . . . . . . !+~+{+]+D.Z.^+/+(+_+:+<+[+}+|+1+2+3+4+5+6+7+8+9+0+# . . . . . . . . . . . ", ". . . . . . . . . . a+..b+c+d+e+f+&.g+h+i+j+k+l+m+n+o+p+4+q+r+s+t+u+v+w+& . . . . . . . . . . . ", ". . . . . . . . . d.x+y+z+A+B+C+D+E+++F+G+H+I+J+N.K+p+L+M+N+O+P+Q+R+S+T+& . . . . . . . . . . . ", ". . . . . . . . . U+V+W+X+Y+Z+`+T @.@+@@@#@$@%@&@r.4+*@=@-@;@>@,@'@)@!@& . . . . . . . . . . . ", ". . . . . . . . ~@{@]@^@/@(@_@:@<@[@}@|@I+1@2@3@4@5@6@7@8@9@0@a@b@c@d@Z . . . . . . . . . . . . ", ". . . . . . . . e@f@g@h@g@i@j@k@l@m@n@o@J+p@q@r@3+s@t@u@v@w@x@y@z@A@B@& . . . . . . . . . . . . ", ". . . . . . . . C@D@E@F@G@H@I@G@J@K@L@p.M@N@O@P@s.Q@R@s+S@T@U@V@W@X@Y@& . . . . . . . . . . . . ", ". . . . . . . . ~@Z@`@ #.#+#@###$#%#&#*#=#-#;#>#Q@r+,#'#0@)#!#~#{#]#1 . . . . . . . . . . . . . ", ". . . . . . . . e ^#/#(#_#:#<#[#}#|#1#2#3#4#5#6#7#,#8#9#x@0#z@a#b#c#& . . . . . . . . . . . . . ", ". . . . . . . . . $ d#e#f#1#g#h#i#j#k#l#m#n#o#p#q#r#0@x@s#V@t#u#]#Z . . . . . . . . . . . . . . ", ". . . . . . . . . . v#w#x#y#z#A#B#C#D#E#F#G#H#I#J#K#x@L#M#N#O#P#Q#& . . . . . . . . . . . . . . ", ". . . . . . . . . . . a+R#S#T#U#V#W#X#Y#|#m#G#Z#`# $.$+$~#@$#$$$1 . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . d.%$&$*$=$z#-$;$-$l#>$,$'$)$!$~${$]$^$/$& . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . v#($_$:$<$G@[$}$|$E#1$2$3$4$5$O#6$7$* . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . 8$9$0$a$b$c$d$e$f$g$h$i$j$k$l$m$Z . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . & ~.n$o$p$q$r$s$t$u$v$U#w$x$/$& . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . & Z y$z$A$B$C$D$E$F$G$H$* . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . & & I$J$K$L$M$N$O$Z . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . & & & & & & . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "}; /* XPM */ static char * memory41_xpm[] = { "48 48 64 1", " c None", ". c #DF7DCF3CC71B", "X c #965875D669A6", "o c #71C671C671C6", "O c #A699A289A699", "+ c #965892489658", "@ c #8E38410330C2", "# c #D75C7DF769A6", "$ c #F7DECF3CC71B", "% c #96588A288E38", "& c #A69992489E79", "* c #8E3886178E38", "= c #104008200820", "- c #596510401040", "; c #C71B30C230C2", ": c #C71B9A699658", "> c #618561856185", ", c #20811C712081", "< c #104000000000", "1 c #861720812081", "2 c #DF7D4D344103", "3 c #79E769A671C6", "4 c #861782078617", "5 c #41033CF34103", "6 c #000000000000", "7 c #49241C711040", "8 c #492445144924", "9 c #082008200820", "0 c #69A618611861", "q c #B6DA71C65144", "w c #410330C238E3", "e c #CF3CBAEAB6DA", "r c #71C6451430C2", "t c #EFBEDB6CD75C", "y c #28A208200820", "u c #186110401040", "i c #596528A21861", "p c #71C661855965", "a c #A69996589658", "s c #30C228A230C2", "d c #BEFBA289AEBA", "f c #596545145144", "g c #30C230C230C2", "h c #8E3882078617", "j c #208118612081", "k c #38E30C300820", "l c #30C2208128A2", "z c #38E328A238E3", "x c #514438E34924", "c c #618555555965", "v c #30C2208130C2", "b c #38E328A230C2", "n c #28A228A228A2", "m c #41032CB228A2", "M c #104010401040", "N c #492438E34103", "B c #28A2208128A2", "V c #A699596538E3", "C c #30C21C711040", "Z c #30C218611040", "A c #965865955965", "S c #618534D32081", "D c #38E31C711040", "F c #082000000820", " ", " .XoO ", " +@#$%o& ", " *=-;#::o+ ", " >,<12#:34 ", " 45671#:X3 ", " +89<02qwo ", "e* >,67;ro ", "ty> 459@>+&& ", "$2u+ > ", "Oh$;ya *3d.a8j,Xe.d3g8+ ", " Oh$;ka *3d$a8lz,,xxc:.e3g54 ", " Oh$;kO *pd$%svbzz,sxxxxfX..&wn> ", " Oh$@mO *3dthwlsslszjzxxxxxxx3:td8M4 ", " Oh$@g& *3d$XNlvvvlllm,mNwxxxxxxxfa.:,B* ", " Oh$@,Od.czlllllzlmmqV@V#V@fxxxxxxxf:%j5& ", " Oh$1hd5lllslllCCZrV#r#:#2AxxxxxxxxxcdwM* ", " OXq6c.%8vvvllZZiqqApA:mq:Xxcpcxxxxxfdc9* ", " 2r<6gde3bllZZrVi7S@SV77A::qApxxxxxxfdcM ", " :,q-6MN.dfmZZrrSS:#riirDSAX@Af5xxxxxfevo", " +A26jguXtAZZZC7iDiCCrVVii7Cmmmxxxxxx%3g", " *#16jszN..3DZZZZrCVSA2rZrV7Dmmwxxxx&en", " p2yFvzssXe:fCZZCiiD7iiZDiDSSZwwxx8e*>", " OA1666 >=01-kuu666> ", " ,6ky& &46-10ul,66, ", " Ou0<> o66y66By7=xu664 ", " <> +66uv,zN666* ", " 566,xxj669 ", " 4666FF666> ", " >966666M ", " oM6668+ ", " *4 ", " ", " "}; /* XPM */ static char *memory42_xpm[] = { /* columns rows colors chars-per-pixel */ "48 48 24 1", " c black", ". c #101010", "X c #102010", "o c #203020", "O c #302030", "+ c #603040", "@ c #703040", "# c #505050", "$ c #708070", "% c #905050", "& c #a04060", "* c #807080", "= c #a0a0a0", "- c #90b0c0", "; c #90c0b0", ": c #80c0c0", "> c #90c0c0", ", c #b0c0c0", "< c #c0b0c0", "1 c #c0c0b0", "2 c #c0c0c0", "3 c #f0e0f0", "4 c gray94", "5 c None", /* pixels */ "555555555555555555555555555555555555555555555555", "555555OoOoOoO55555555555555555555555555555555555", "55555O222<222Oo555555555555555555555555555555555", "5555o22,222,222555555555555555555555555555555555", "5555OOoO>-;->21o55555555555555555555555555555555", "555555O Oo-:>:2Oo5555555555555555555555555555555", "55555555o >-:->o 5555555555555555555555555555555", "555555555#O:-:>- 5555555555555555555555555555555", "555555555#o=>-%>- 555555555555555555555555555555", "555555555#O:>=&>: 555555555555555555555555555555", "555555555Oo-= 4:- 555555555555555555555555555555", "555555555o>:= 3: 555555555555555555555555555555", "55O O555oO;= 44>- 555555555555555555555555555555", "55o22 O5O:-= 4>:O 55555555555555555555555555555", "55Oo2<2# -= 34 :-= 55555555555555555555555555555", "555 ,22#-:= 4>-:>o 5555555555555555555555555555", "5555 2122=o43 ;>-2-o5555555555555555555555555555", "55555 2:>:-:>:->:22Oo555555555555555555555555555", "555555o ==>22=<2Oo55555555555555555555555555", "555555555555 -, =2:Oo5555555555555555555555555", "55555555555555 -2#=22Oo555555555555555555555555", "555555555555555O -2 =2=Oo55555555555555555555555", "5555555555555555O <2#2<:Oo5555555555555555555555", "55555555555555555O 2, :2;Oo555555555555555555555", "555555555555555555O -;#12:Oo55555555555555555555", "5555555555555555555O 4: 2-:Oo5555555555555555555", "55555555555555555555O 4222-:Oo555555555555555555", "555555555555555555555O 4,22-;+o55555555555555555", "5555555555555555555555O -:21-:@o5555555555555555", "55555555555555555555555O -:-222+o555555555555555", "555555555555555555555555O 4:22<:@o55555555555555", "5555555555555555555555555O 4=222;+o5555555555555", "55555555555555555555555555O 42212:@o555555555555", "555555555555555555555555555O 4=222:+o55555555555", "5555555555555555555555555555O 422:<2@o5555555555", "55555555555555555555555555555O 4,2:2:=o555555555", "555555555555555555555555555555O 422>2:=o55555555", "5555555555555555555555555555555O 4=2:2:=o5555555", "55555555555555555555555555555555O 4=22<;-o555555", "555555555555555555555555555555555O 4:22-22o55555", "5555555555555555555555555555555555O 4=2oOo*o5555", "55555555555555555555555555555555555O 4=O552o5555", "555555555555555555555555555555555555O 2o552O5555", "5555555555555555555555555555555555555O.*55$o5555", "55555555555555555555555555555555555555O.*$&O5555", "555555555555555555555555555555555555555O..X55555", "555555555555555555555555555555555555555555555555", "555555555555555555555555555555555555555555555555" }; gtkboard/pixmaps/misc.xpm000066400000000000000000000116721153150217100160200ustar00rootroot00000000000000/* XPM */ static char * red_X_40_xpm[]= { "40 40 2 1", ". c red", " c none", " ", " ", " ", " ", " ", " ", " ", " .. .. ", " .... .... ", " ..... ..... ", " ..... ..... ", " ..... ..... ", " ..... ..... ", " ..... ..... ", " ..... ..... ", " ..... ..... ", " ..... ..... ", " .......... ", " ........ ", " ...... ", " ...... ", " ........ ", " .......... ", " ..... ..... ", " ..... ..... ", " ..... ..... ", " ..... ..... ", " ..... ..... ", " ..... ..... ", " ..... ..... ", " ..... ..... ", " .... .... ", " .. .. ", " ", " ", " ", " ", " ", " ", " ", }; static char * grey_square_54_xpm [] = { "54 54 1 1", ". c #d7d7d7", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", }; gtkboard/pixmaps/ninemm_bg.xpm000066400000000000000000003760331153150217100170250ustar00rootroot00000000000000/* XPM */ static char * ninemm_bg_xpm[] = { "252 252 125 2", " c None", ". c #FFFFFF", "+ c #626262", "@ c #373737", "# c #EAEAEA", "$ c #ACACAC", "% c #A0A0A0", "& c #F5F5F5", "* c #393939", "= c #565656", "- c #000000", "; c #E4E4E4", "> c #959595", ", c #868686", "' c #F3F3F3", ") c #030303", "! c #272727", "~ c #676767", "{ c #737373", "] c #434343", "^ c #3C3C3C", "/ c #6E6E6E", "( c #010101", "_ c #1E1E1E", ": c #212121", "< c #131313", "[ c #111111", "} c #202020", "| c #FCFCFC", "1 c #F4F4F4", "2 c #ADADAD", "3 c #F2F2F2", "4 c #FEFEFE", "5 c #2B2B2B", "6 c #595959", "7 c #E8E8E8", "8 c #C2C2C2", "9 c #B3B3B3", "0 c #313131", "a c #646464", "b c #6B6B6B", "c c #3D3D3D", "d c #DADADA", "e c #AEAEAE", "f c #2E2E2E", "g c #A2A2A2", "h c #E6E6E6", "i c #5F5F5F", "j c #CECECE", "k c #DEDEDE", "l c #797979", "m c #474747", "n c #404040", "o c #6A6A6A", "p c #161616", "q c #1B1B1B", "r c #101010", "s c #0E0E0E", "t c #181818", "u c #F6F6F6", "v c #EBEBEB", "w c #9D9D9D", "x c #919191", "y c #F9F9F9", "z c #222222", "A c #D7D7D7", "B c #2A2A2A", "C c #8A8A8A", "D c #525252", "E c #B7B7B7", "F c #3E3E3E", "G c #3A3A3A", "H c #7F7F7F", "I c #C8C8C8", "J c #D8D8D8", "K c #808080", "L c #4A4A4A", "M c #6C6C6C", "N c #050505", "O c #060606", "P c #040404", "Q c #C1C1C1", "R c #8F8F8F", "S c #818181", "T c #D0D0D0", "U c #E5E5E5", "V c #F7F7F7", "W c #585858", "X c #151515", "Y c #707070", "Z c #EFEFEF", "` c #0C0C0C", " . c #424242", ".. c #B1B1B1", "+. c #F1F1F1", "@. c #191919", "#. c #A8A8A8", "$. c #FAFAFA", "%. c #969696", "&. c #1C1C1C", "*. c #A5A5A5", "=. c #333333", "-. c #A9A9A9", ";. c #232323", ">. c #B9B9B9", ",. c #020202", "'. c #2F2F2F", "). c #9C9C9C", "!. c #ABABAB", "~. c #ECECEC", "{. c #0B0B0B", "]. c #3B3B3B", "^. c #383838", "/. c #9B9B9B", "(. c #878787", "_. c #343434", ":. c #989898", "<. c #121212", "[. c #E2E2E2", "}. c #747474", "|. c #FBFBFB", "1. c #252525", "2. c #5C5C5C", "3. c #535353", "4. c #494949", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . $ @ @ @ @ @ @ @ @ @ @ @ @ @ @ % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . & * @ @ @ @ @ @ @ @ @ @ @ @ @ = . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - ; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > - - - - - - - - - - - - - - , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ' ) - - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - ; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > - - - - - - - - - - - - - - , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ' ) - - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - ; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > - - - - - - - - - - - - - - , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ' ) - - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - ~ { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { ] - - - - - - - - - - - - - - ^ { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { / ( - - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - _ : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : < - - - - - - - - - - - - - - [ : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : } - - - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - ; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > - - - - - - - - - - - - - - , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ' ) - - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - ; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > - - - - - - - - - - - - - - , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ' ) - - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - ; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > - - - - - - - - - - - - - - , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ' ) - - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . # ; ; ; ~ - - - - - - _ ; ; ; | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 ; ; 2 - - - - - - - - % ; ; 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 ; ; ; 5 - - - - - - 6 ; ; ; 7 . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . b c c c c c c c c c c c c c c c d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e c c f - - - - - - - - 5 c c g . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . h c c c c c c c c c c c c c c c i . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . c - - - - - - - - - - - - - - - j . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > - - - - - - - - - - - - - - , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . k - - - - - - - - - - - - - - - f . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . c - - - - - - - - - - - - - - - j . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > - - - - - - - - - - - - - - , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . k - - - - - - - - - - - - - - - f . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . c - - - - - - - - - - - - - - - j . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > - - - - - - - - - - - - - - , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . k - - - - - - - - - - - - - - - f . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . c - - - - - - - - - - - - - - - + l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l m - - - - - - - - - - - - - - n l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l o - - - - - - - - - - - - - - - f . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - f . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - f . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - f . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - f . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - f . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - f . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . c - - - - - - - - - - - - - - - p q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q r - - - - - - - - - - - - - - s q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q t - - - - - - - - - - - - - - - f . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . c - - - - - - - - - - - - - - - j . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > - - - - - - - - - - - - - - , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . k - - - - - - - - - - - - - - - f . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . c - - - - - - - - - - - - - - - j . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > - - - - - - - - - - - - - - , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . k - - - - - - - - - - - - - - - f . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . c - - - - - - - - - - - - - - - j . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > - - - - - - - - - - - - - - , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . k - - - - - - - - - - - - - - - f . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . c - - - - - - - - - - - - - - - j . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > - - - - - - - - - - - - - - , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . k - - - - - - - - - - - - - - - f . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . d j j j + - - - - - - p j j j j u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . v j j w - - - - - - - - x j j 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . y j j j j z - - - - - - = j j j A . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . C D D D D D D D D D D D D D D d . . . . . . . . . . . . . . . . . . . . . . E D D F - - - - - - - - G D D 2 . . . . . . . . . . . . . . . . . . . . . . ; D D D D D D D D D D D D D D H . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . D - - - - - - - - - - - - - - I . . . . . . . . . . . . . . . . . . . . . . > - - - - - - - - - - - - - - , . . . . . . . . . . . . . . . . . . . . . . J - - - - - - - - - - - - - - ] . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . D - - - - - - - - - - - - - - I . . . . . . . . . . . . . . . . . . . . . . > - - - - - - - - - - - - - - , . . . . . . . . . . . . . . . . . . . . . . J - - - - - - - - - - - - - - ] . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . D - - - - - - - - - - - - - - a K K K K K K K K K K K K K K K K K K K K K K L - - - - - - - - - - - - - - ] K K K K K K K K K K K K K K K K K K K K K K M - - - - - - - - - - - - - - ] . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . D - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ] . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . D - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ] . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . D - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ] . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . D - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ] . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . D - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ] . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . D - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ] . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . D - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ] . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . D - - - - - - - - - - - - - - N O O O O O O O O O O O O O O O O O O O O O O P - - - - - - - - - - - - - - ) O O O O O O O O O O O O O O O O O O O O O O N - - - - - - - - - - - - - - ] . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . D - - - - - - - - - - - - - - Q u u u u u u u u u u u u u u u u u u u u u u R - - - - - - - - - - - - - - S u u u u u u u u u u u u u u u u u u u u u u T - - - - - - - - - - - - - - ] . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . D - - - - - - - - - - - - - - I . . . . . . . . . . . . . . . . . . . . . . > - - - - - - - - - - - - - - , . . . . . . . . . . . . . . . . . . . . . . J - - - - - - - - - - - - - - ] . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . D - - - - - - - - - - - - - - I . . . . . . . . . . . . . . . . . . . . . . > - - - - - - - - - - - - - - , . . . . . . . . . . . . . . . . . . . . . . J - - - - - - - - - - - - - - ] . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . d I I a - - - - - - - N Q I I ' . . . . . . . . . . . . . . . . . . . . . . 7 I I I I I I I I I I I I I I U . . . . . . . . . . . . . . . . . . . . . . V I I I [ - - - - - - - W I I A . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . $ > > > ] - - - - - - < > > > 1 . . . . . . . . . . . . . . . . . . e > > > m - - - - - - r > > > > v . . . . . . . . . . . . . . . . . . E > > L - - - - - - - P R > > 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Z > > > ` - - - - - - - .> > ... . . . . . . . . . . . . . . . . . +.> > > > @.- - - - - - F > > > #.. . . . . . . . . . . . . . . . . . $.%.> > &.- - - - - - G > > > *.. . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - ; . . . . . . . . . . . . . . . . . . c - - - - - - - - - - - - - - - j . . . . . . . . . . . . . . . . . . D - - - - - - - - - - - - - - I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . J - - - - - - - - - - - - - - ] . . . . . . . . . . . . . . . . . . k - - - - - - - - - - - - - - - f . . . . . . . . . . . . . . . . . . ' ) - - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - ; . . . . . . . . . . . . . . . . . . c - - - - - - - - - - - - - - - j . . . . . . . . . . . . . . . . . . D - - - - - - - - - - - - - - I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . J - - - - - - - - - - - - - - ] . . . . . . . . . . . . . . . . . . k - - - - - - - - - - - - - - - f . . . . . . . . . . . . . . . . . . ' ) - - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - 2 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 f - - - - - - - - - - - - - - - w 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 F - - - - - - - - - - - - - - I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . J - - - - - - - - - - - - - - =.8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 -.- - - - - - - - - - - - - - - ;.8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 >.,.- - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . J - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . J - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . J - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . J - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . J - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . J - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . J - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . J - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - % 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 5 - - - - - - - - - - - - - - - x 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 G - - - - - - - - - - - - - - I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . J - - - - - - - - - - - - - - '.9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ).- - - - - - - - - - - - - - - } 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 !.,.- - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - ; . . . . . . . . . . . . . . . . . . c - - - - - - - - - - - - - - - j . . . . . . . . . . . . . . . . . . D - - - - - - - - - - - - - - I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . J - - - - - - - - - - - - - - ] . . . . . . . . . . . . . . . . . . k - - - - - - - - - - - - - - - f . . . . . . . . . . . . . . . . . . ' ) - - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - ; . . . . . . . . . . . . . . . . . . c - - - - - - - - - - - - - - - j . . . . . . . . . . . . . . . . . . D - - - - - - - - - - - - - - I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . J - - - - - - - - - - - - - - ] . . . . . . . . . . . . . . . . . . k - - - - - - - - - - - - - - - f . . . . . . . . . . . . . . . . . . ' ) - - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . % , , , ^ - - - - - - [ , , , 3 . . . . . . . . . . . . . . . . . . g , , , n - - - - - - s , , , , 7 . . . . . . . . . . . . . . . . . . 2 , , ] - - - - - - - ) S , , U . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ~., , , {.- - - - - - - ]., , *.. . . . . . . . . . . . . . . . . . Z , , , , p - - - - - - ^., , , /.. . . . . . . . . . . . . . . . . . y (., , @.- - - - - - _., , , :.. . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . K - - - - - - - O u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X - - - - - - - Y . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . ; J J M - - - - - - - N T J J V . . . . . . . . . . . . . . . . . . . . . . Z J J J J J J J J J J J J J J ~.. . . . . . . . . . . . . . . . . . . . . . y J J J <.- - - - - - - i J J [.. . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . D - - - - - - - - - - - - - - I . . . . . . . . . . . . . . . . . . . . . . > - - - - - - - - - - - - - - , . . . . . . . . . . . . . . . . . . . . . . J - - - - - - - - - - - - - - ] . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . D - - - - - - - - - - - - - - I . . . . . . . . . . . . . . . . . . . . . . > - - - - - - - - - - - - - - , . . . . . . . . . . . . . . . . . . . . . . J - - - - - - - - - - - - - - ] . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . D - - - - - - - - - - - - - - I . . . . . . . . . . . . . . . . . . . . . . > - - - - - - - - - - - - - - , . . . . . . . . . . . . . . . . . . . . . . J - - - - - - - - - - - - - - ] . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . D - - - - - - - - - - - - - - [ X X X X X X X X X X X X X X X X X X X X X X ` - - - - - - - - - - - - - - {.X X X X X X X X X X X X X X X X X X X X X X <.- - - - - - - - - - - - - - ] . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . D - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ] . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . D - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ] . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . D - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ] . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . D - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ] . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . D - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ] . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . D - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ] . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . D - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ] . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . D - - - - - - - - - - - - - - W Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y .- - - - - - - - - - - - - - ].Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y i - - - - - - - - - - - - - - ] . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . D - - - - - - - - - - - - - - I . . . . . . . . . . . . . . . . . . . . . . > - - - - - - - - - - - - - - , . . . . . . . . . . . . . . . . . . . . . . J - - - - - - - - - - - - - - ] . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . D - - - - - - - - - - - - - - I . . . . . . . . . . . . . . . . . . . . . . > - - - - - - - - - - - - - - , . . . . . . . . . . . . . . . . . . . . . . J - - - - - - - - - - - - - - ] . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . H ] ] ] ] ] ] ] ] ] ] ] ] ] ] A . . . . . . . . . . . . . . . . . . . . . . ..] ] =.- - - - - - - - '.] ] *.. . . . . . . . . . . . . . . . . . . . . . [.] ] ] ] ] ] ] ] ] ] ] ] ] ] }.. . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . l - - - - - - q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B - - - - - - o . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . h k k k o - - - - - - t k k k k y . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . +.k k -.- - - - - - - - ).k k Z . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |.k k k k 1.- - - - - - 2.k k k ; . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . c - - - - - - - - - - - - - - - j . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > - - - - - - - - - - - - - - , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . k - - - - - - - - - - - - - - - f . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . c - - - - - - - - - - - - - - - j . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > - - - - - - - - - - - - - - , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . k - - - - - - - - - - - - - - - f . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . c - - - - - - - - - - - - - - - j . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > - - - - - - - - - - - - - - , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . k - - - - - - - - - - - - - - - f . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . c - - - - - - - - - - - - - - - j . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > - - - - - - - - - - - - - - , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . k - - - - - - - - - - - - - - - f . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . c - - - - - - - - - - - - - - - z 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 @.- - - - - - - - - - - - - - p 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 1.- - - - - - - - - - - - - - - f . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - f . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - f . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - f . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - f . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - f . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - f . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . c - - - - - - - - - - - - - - - = o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o F - - - - - - - - - - - - - - ^.o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o 2.- - - - - - - - - - - - - - - f . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . c - - - - - - - - - - - - - - - j . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > - - - - - - - - - - - - - - , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . k - - - - - - - - - - - - - - - f . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . c - - - - - - - - - - - - - - - j . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > - - - - - - - - - - - - - - , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . k - - - - - - - - - - - - - - - f . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . c - - - - - - - - - - - - - - - j . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > - - - - - - - - - - - - - - , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . k - - - - - - - - - - - - - - - f . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . i f f f f f f f f f f f f f f f A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . #.f f ;.- - - - - - - - } f f /.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; f f f f f f f f f f f f f f f 3.. . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . { - - - - - - : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 - - - - - - - - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 - - - - - - a . . . . . . . . . . . . . . . ", ". . . . . . . . . . . & ' ' ' / - - - - - - } ' ' ' 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . $.' ' >.- - - - - - - - !.' ' y . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 ' ' ' f - - - - - - i ' ' ' & . . . . . . . . . . . ", ". . . . . . . . . . . * ) ) ) ( - - - - - - - ) ) ) ; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . %.) ) ,.- - - - - - - - ,.) ) (.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ' O ) ) ( - - - - - - ( ) ) ) B . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - ; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > - - - - - - - - - - - - - - , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ' ) - - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - ; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > - - - - - - - - - - - - - - , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ' ) - - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 &.- - - - - - - - - - - - - - @.0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 f ( - - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - 6 a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a G - - - - - - - - - - - - - - _.a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a i ( - - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - ; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > - - - - - - - - - - - - - - , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ' ) - - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - ; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > - - - - - - - - - - - - - - , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ' ) - - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . @ - - - - - - - - - - - - - - ; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > - - - - - - - - - - - - - - , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ' ) - - - - - - - - - - - - - ! . . . . . . . . . . . ", ". . . . . . . . . . . = ! ! ! ! ! ! ! ! ! ! ! ! ! ! 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . *.! ! ! ! ! ! ! ! ! ! ! ! ! ! :.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . & B ! ! ! ! ! ! ! ! ! ! ! ! ! 4.. . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "}; gtkboard/pixmaps/pacman.xpm000066400000000000000000000320141153150217100163150ustar00rootroot00000000000000/* XPM */ static char * red_ball_55_xpm[]= { "55 55 3 1", " c yellow", ". c none", "X c black", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................XXXXXXXX........................", "....................XXX XXX....................", "..................XX XX..................", "................XX XX................", "...............X X...............", "..............X X..............", ".............X X.............", "............X X............", "...........X X...........", "..........X X..........", ".........X X.........", ".........X X.........", "........X X........", "........X X........", ".......X X.......", ".......X X.......", ".......X X.......", "......X X......", "......X X......", "......X X......", "......X X......", "......X X......", "......X X......", "......X X......", "......X X......", "......X X......", ".......X X.......", ".......X X.......", ".......X X.......", "........X X........", "........X X........", ".........X X.........", ".........X X.........", "..........X X..........", "...........X X...........", "............X X............", ".............X X.............", "..............X X..............", "...............X X...............", "................XX XX................", "..................XX XX..................", "....................XXX XXX....................", ".......................XXXXXXXXX.......................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", }; static char * green_ball_55_xpm[]= { "55 55 2 1", " c green", ". c none", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", "....................... .......................", ".................... ....................", ".................. ..................", "................ ................", "............... ...............", ".............. ..............", "............. .............", "............ ............", "........... ...........", ".......... ..........", ".......... ..........", "......... .........", "......... .........", "........ ........", "........ ........", "........ ........", "....... .......", "....... .......", "....... .......", "....... .......", "....... .......", "....... .......", "....... .......", "....... .......", "....... .......", "........ ........", "........ ........", "........ ........", "......... .........", "......... .........", ".......... ..........", ".......... ..........", "........... ...........", "............ ............", "............. .............", ".............. ..............", "............... ...............", "................ ................", ".................. ..................", ".................... ....................", "....................... .......................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", }; static char *blue_ball_55_xpm[] = { "55 55 2 1", " c blue", ". c none", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", "....................... .......................", ".................... ....................", ".................. ..................", "................ ................", "............... ...............", ".............. ..............", "............. .............", "............ ............", "........... ...........", ".......... ..........", ".......... ..........", "......... .........", "......... .........", "........ ........", "........ ........", "........ ........", "....... .......", "....... .......", "....... .......", "....... .......", "....... .......", "....... .......", "....... .......", "....... .......", "....... .......", "........ ........", "........ ........", "........ ........", "......... .........", "......... .........", ".......... ..........", ".......... ..........", "........... ...........", "............ ............", "............. .............", ".............. ..............", "............... ...............", "................ ................", ".................. ..................", ".................... ....................", "....................... .......................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", }; static char * grey_ball_55_xpm[]= { "55 55 2 1", " c grey", ". c none", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", "....................... .......................", ".................... ....................", ".................. ..................", "................ ................", "............... ...............", ".............. ..............", "............. .............", "............ ............", "........... ...........", ".......... ..........", ".......... ..........", "......... .........", "......... .........", "........ ........", "........ ........", "........ ........", "....... .......", "....... .......", "....... .......", "....... .......", "....... .......", "....... .......", "....... .......", "....... .......", "....... .......", "........ ........", "........ ........", "........ ........", "......... .........", "......... .........", ".......... ..........", ".......... ..........", "........... ...........", "............ ............", "............. .............", ".............. ..............", "............... ...............", "................ ................", ".................. ..................", ".................... ....................", "....................... .......................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", ".......................................................", }; gtkboard/pixmaps/splash.xpm000066400000000000000000005640301153150217100163600ustar00rootroot00000000000000/* XPM */ static char * splash_xpm[] = { "300 300 577 2", " c None", ". c #097FFF", "+ c #0A80FE", "@ c #0A81FE", "# c #0A82FE", "$ c #0A83FE", "% c #0B83FE", "& c #0B84FE", "* c #0B85FE", "= c #0B86FE", "- c #0C86FE", "; c #0C87FE", "> c #0C88FE", ", c #0C89FE", "' c #0D89FD", ") c #0D8AFD", "! c #0D8BFD", "~ c #0D8CFD", "{ c #0E8CFD", "] c #0E8DFD", "^ c #0E8EFD", "/ c #0E8FFD", "( c #0F8FFD", "_ c #0F90FD", ": c #0F91FD", "< c #0F92FD", "[ c #1093FC", "} c #1094FC", "| c #1095FC", "1 c #1096FC", "2 c #1196FC", "3 c #1197FC", "4 c #1198FC", "5 c #1199FC", "6 c #1299FC", "7 c #129AFC", "8 c #129BFC", "9 c #129CFC", "0 c #139CFB", "a c #139DFB", "b c #139EFB", "c c #139FFB", "d c #149FFB", "e c #14A0FB", "f c #14A1FB", "g c #14A2FB", "h c #15A2FB", "i c #15A3FB", "j c #15A4FB", "k c #15A5FB", "l c #16A6FA", "m c #16A7FA", "n c #16A8FA", "o c #16A9FA", "p c #17A9FA", "q c #17AAFA", "r c #17ABFA", "s c #17ACFA", "t c #18ACFA", "u c #18ADFA", "v c #2D8CDF", "w c #6269A7", "x c #477BC4", "y c #CA2338", "z c #FF0000", "A c #2D8DDF", "B c #2D8BDF", "C c #B03454", "D c #954770", "E c #477AC4", "F c #E4121D", "G c #3094DF", "H c #18AEFA", "I c #6268A7", "J c #4982C3", "K c #E5131C", "L c #277AE2", "M c #426BC5", "N c #B03554", "O c #416BC6", "P c #AE2E55", "Q c #933D71", "R c #2B87E0", "S c #B13753", "T c #CB2538", "U c #5D5BA9", "V c #784C8D", "W c #C91F39", "X c #AE2E54", "Y c #5E5CA9", "Z c #6065A8", "` c #CA2238", " . c #974B70", ".. c #AE2D55", "+. c #E30F1D", "@. c #784D8D", "#. c #426CC5", "$. c #2982E1", "%. c #5F61A9", "&. c #AF3154", "*. c #944271", "=. c #6062A8", "-. c #2A83E0", ";. c #4576C5", ">. c #4577C5", ",. c #477CC4", "'. c #626AA7", "). c #626CA7", "!. c #964870", "~. c #B13654", "{. c #E4131D", "]. c #B13754", "^. c #C91E39", "/. c #E3101D", "(. c #933F71", "_. c #287DE1", ":. c #AF3054", "<. c #E4111D", "[. c #CA2138", "}. c #7A528C", "|. c #954471", "1. c #6166A8", "2. c #954670", "3. c #487CC4", "4. c #626BA7", "5. c #18AFFA", "6. c #2778E2", "7. c #923C72", "8. c #923D72", "9. c #933E71", "0. c #287EE1", "a. c #4471C5", "b. c #2A84E0", "c. c #2B86E0", "d. c #B03354", "e. c #487EC4", "f. c #636CA7", "g. c #636DA7", "h. c #7D5B8C", "i. c #2779E2", "j. c #426DC5", "k. c #E4101D", "l. c #5E5EA9", "m. c #79518D", "n. c #C92039", "o. c #2D8EDF", "p. c #CA2438", "q. c #2F91DF", "r. c #636EA7", "s. c #646FA7", "t. c #B13853", "u. c #3095DF", "v. c #5D5AA9", "w. c #AE2F54", "x. c #944171", "y. c #2C89E0", "z. c #487DC4", "A. c #19AFF9", "B. c #AF2F54", "C. c #5E5FA9", "D. c #2980E1", "E. c #6063A8", "F. c #944371", "G. c #B03254", "H. c #7B568C", "I. c #7C578C", "J. c #B13554", "K. c #2E8EDF", "L. c #2E8FDF", "M. c #2F93DF", "N. c #5F60A9", "O. c #2A85E0", "P. c #7A548C", "Q. c #4880C4", "R. c #436EC5", "S. c #7A538C", "T. c #7C5A8C", "U. c #19B0F9", "V. c #416AC6", "W. c #AF3254", "X. c #4679C5", "Y. c #954571", "Z. c #7C598C", "`. c #784B8D", " + c #934071", ".+ c #79508D", "++ c #2981E1", "@+ c #6167A8", "#+ c #4881C4", "$+ c #4470C5", "%+ c #6064A8", "&+ c #7D5C8C", "*+ c #7C588C", "=+ c #7A558C", "-+ c #19B1F9", ";+ c #944071", ">+ c #CB2438", ",+ c #964A70", "'+ c #C92139", ")+ c #784E8D", "!+ c #7B578C", "~+ c #19B2F9", "{+ c #5E5BA9", "]+ c #4370C5", "^+ c #4677C5", "/+ c #467AC5", "(+ c #964770", "_+ c #487FC4", ":+ c #974A70", "<+ c #5F5FA9", "[+ c #2C88E0", "}+ c #7D5A8C", "|+ c #964970", "1+ c #287AE1", "2+ c #794E8D", "3+ c #2B88E0", "4+ c #1AB2F9", "5+ c #2C8AE0", "6+ c #1AB3F9", "7+ c #6168A8", "8+ c #2C8BE0", "9+ c #5E5DA9", "0+ c #6470A7", "a+ c #794F8D", "b+ c #4474C5", "c+ c #7D5E8B", "d+ c #1AB4F9", "e+ c #6066A8", "f+ c #4983C3", "g+ c #7D5D8B", "h+ c #CB2638", "i+ c #3096DF", "j+ c #1AB5F9", "k+ c #4A85C3", "l+ c #2E90DF", "m+ c #B23853", "n+ c #B23953", "o+ c #3098DF", "p+ c #974C70", "q+ c #954371", "r+ c #6471A7", "s+ c #1BB5F9", "t+ c #1BB6F9", "u+ c #1BB7F9", "v+ c #2F92DF", "w+ c #1BB8F9", "x+ c #1CB9F8", "y+ c #1CBAF8", "z+ c #319CDF", "A+ c #6675A6", "B+ c #984E6F", "C+ c #B23A53", "D+ c #B23B53", "E+ c #329DDE", "F+ c #33A0DE", "G+ c #4C8CC2", "H+ c #4475C5", "I+ c #4B89C3", "J+ c #984E70", "K+ c #E5141C", "L+ c #CC2838", "M+ c #329EDE", "N+ c #B33C53", "O+ c #4472C5", "P+ c #7B558C", "Q+ c #7E618B", "R+ c #6677A6", "S+ c #4A84C3", "T+ c #CC2738", "U+ c #99506F", "V+ c #1CBBF8", "W+ c #4B88C3", "X+ c #329CDE", "Y+ c #984F6F", "Z+ c #7F638B", "`+ c #339FDE", " @ c #7D5C8B", ".@ c #3097DF", "+@ c #6676A6", "@@ c #319BDF", "#@ c #6574A7", "$@ c #6575A7", "%@ c #4C8DC2", "&@ c #6472A7", "*@ c #339EDE", "=@ c #E5151C", "-@ c #7F648B", ";@ c #99516F", ">@ c #1CBCF8", ",@ c #33A1DE", "'@ c #1DBCF8", ")@ c #4C8BC2", "!@ c #7F658B", "~@ c #CB2738", "{@ c #4D8DC2", "]@ c #1DBDF8", "^@ c #6473A7", "/@ c #4D8EC2", "(@ c #80658B", "_@ c #4575C5", ":@ c #984D70", "<@ c #7F618B", "[@ c #4B86C3", "}@ c #6779A6", "|@ c #1DBEF8", "1@ c #4473C5", "2@ c #CC2938", "3@ c #7E608B", "4@ c #4B87C3", "5@ c #80668B", "6@ c #34A3DE", "7@ c #3199DF", "8@ c #1DBFF8", "9@ c #6573A7", "0@ c #99526F", "a@ c #1EBFF8", "b@ c #4C89C2", "c@ c #B33D53", "d@ c #1EC0F8", "e@ c #677BA6", "f@ c #677AA6", "g@ c #34A4DE", "h@ c #954671", "i@ c #4C8AC2", "j@ c #34A2DE", "k@ c #7E5E8B", "l@ c #35A5DD", "m@ c #319ADF", "n@ c #CC2937", "o@ c #1EC1F8", "p@ c #4678C5", "q@ c #9A536F", "r@ c #34A1DE", "s@ c #4E90C2", "t@ c #98506F", "u@ c #6679A6", "v@ c #B33B53", "w@ c #6678A6", "x@ c #3099DF", "y@ c #1EC2F8", "z@ c #1FC2F7", "A@ c #1FC3F7", "B@ c #7F628B", "C@ c #1FC4F7", "D@ c #1FC5F7", "E@ c #20C5F7", "F@ c #20C6F7", "G@ c #20C7F7", "H@ c #19A2E2", "I@ c #1E9BB1", "J@ c #19A3E2", "K@ c #249281", "L@ c #2F821F", "M@ c #2C8638", "N@ c #298A50", "O@ c #278E68", "P@ c #1D97B2", "Q@ c #268D68", "R@ c #239181", "S@ c #189FE3", "T@ c #1B9FCA", "U@ c #20C8F7", "V@ c #239081", "W@ c #1B9CCB", "X@ c #298950", "Y@ c #1E99B2", "Z@ c #249381", "`@ c #1DA4CA", " # c #1BA8E2", ".# c #20949A", "+# c #1E98B2", "@# c #18A0E3", "## c #1DA3CA", "$# c #2A8C50", "%# c #1A9BCB", "&# c #21949A", "*# c #219799", "=# c #279068", "-# c #21C8F7", ";# c #2C8738", "># c #259581", ",# c #21C9F7", "'# c #189EE3", ")# c #209FB1", "!# c #1B9ECA", "~# c #1E9AB1", "{# c #1BA0CA", "]# c #1CA0CA", "^# c #2A8B50", "/# c #1F9DB1", "(# c #1CA2CA", "_# c #239C98", ":# c #2A8D50", "<# c #289268", "[# c #259780", "}# c #1FAAC9", "|# c #289368", "1# c #1DB0E1", "2# c #1FABC9", "3# c #289468", "4# c #2B8E50", "5# c #1DB2E1", "6# c #22A7B0", "7# c #299467", "8# c #24A198", "9# c #2D8838", "0# c #22A8B0", "a# c #1EB5E0", "b# c #24A298", "c# c #2D8938", "d# c #299567", "e# c #21B0C8", "f# c #2B8F50", "g# c #23AAB0", "h# c #18A1E3", "i# c #1AA5E2", "j# c #278F68", "k# c #1F9CB1", "l# c #1AA7E2", "m# c #209EB1", "n# c #279168", "o# c #259681", "p# c #1BA9E2", "q# c #1EA6C9", "r# c #1EA7C9", "s# c #269980", "t# c #22A5B0", "u# c #1DB1E1", "v# c #269A80", "w# c #20ADC8", "x# c #279B80", "y# c #25A298", "z# c #1FB7E0", "A# c #299667", "B# c #279C80", "C# c #23A9B0", "D# c #1CAFE1", "E# c #249F98", "F# c #22A6B0", "G# c #20AEC8", "H# c #21AFC8", "I# c #249481", "J# c #1BA7E2", "K# c #20A1B0", "L# c #239D98", "M# c #1EB3E0", "N# c #279D80", "O# c #219699", "P# c #229899", "Q# c #20A2B0", "R# c #1FA7C9", "S# c #21A4B0", "T# c #25A398", "U# c #21CAF7", "V# c #1B9DCB", "W# c #229999", "X# c #2D8738", "Y# c #1FACC9", "Z# c #1AA6E2", "`# c #1CA1CA", " $ c #1F9EB1", ".$ c #1EB4E0", "+$ c #21B1C8", "@$ c #21A3B0", "#$ c #19A4E2", "$$ c #1E9CB1", "%$ c #1BACE1", "&$ c #21A2B0", "*$ c #1CAEE1", "=$ c #1DAFE1", "-$ c #24A098", ";$ c #268E68", ">$ c #249581", ",$ c #229A99", "'$ c #239B98", ")$ c #1EA5C9", "!$ c #1FA9C9", "~$ c #1FB6E0", "{$ c #24ABB0", "]$ c #229B99", "^$ c #1DA5CA", "/$ c #259680", "($ c #1CADE1", "_$ c #1FA8C9", ":$ c #20B8E0", "<$ c #21CBF7", "[$ c #298B50", "}$ c #20A0B0", "|$ c #269880", "1$ c #23ABB0", "2$ c #26A498", "3$ c #239281", "4$ c #289168", "5$ c #1BAAE1", "6$ c #2B9050", "7$ c #22B2C8", "8$ c #21959A", "9$ c #1BAAE2", "0$ c #1BADE1", "a$ c #21CCF7", "b$ c #1A9ACB", "c$ c #268C68", "d$ c #179EE3", "e$ c #20939A", "f$ c #239E98", "g$ c #20A0B1", "h$ c #20BBE0", "i$ c #26A697", "j$ c #24ADAF", "k$ c #21BCDF", "l$ c #289F80", "m$ c #23B6C8", "n$ c #28A080", "o$ c #24AFAF", "p$ c #27A897", "q$ c #2D8A38", "r$ c #22BFDF", "s$ c #23B9C8", "t$ c #2A9967", "u$ c #24B9C8", "v$ c #2C924F", "w$ c #26B1AF", "x$ c #26B3AF", "y$ c #29A380", "z$ c #24BCC8", "A$ c #2C934F", "B$ c #23C4DF", "C$ c #1E97B2", "D$ c #1FB8E0", "E$ c #26A698", "F$ c #21BDDF", "G$ c #2B914F", "H$ c #21BEDF", "I$ c #23B7C8", "J$ c #2C914F", "K$ c #23C1DF", "L$ c #2A9A67", "M$ c #23C2DF", "N$ c #24BAC8", "O$ c #20AFC8", "P$ c #299767", "Q$ c #2A9767", "R$ c #2A9867", "S$ c #25AFAF", "T$ c #27A997", "U$ c #29A280", "V$ c #27AB97", "W$ c #279E80", "X$ c #26A797", "Y$ c #23B8C8", "Z$ c #22C0DF", "`$ c #25B1AF", " % c #27AA97", ".% c #26B2AF", "+% c #23C3DF", "@% c #21BBDF", "#% c #23B5C8", "$% c #25B0AF", "%% c #249E98", "&% c #24AEAF", "*% c #1BABE1", "=% c #20B9E0", "-% c #19A5E2", ";% c #269780", ">% c #2A9B67", ",% c #25A498", "'% c #28A180", ")% c #21B2C8", "!% c #24ACB0", "~% c #27A797", "{% c #24BBC8", "]% c #1CA3CA", "^% c #26A598", "/% c #20BAE0", "(% c #22B3C8", "_% c #23C0DF", ":% c #1EB6E0", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p q q q q ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p q q q q q ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p q q q q q q ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n o p p p p p q q q q q q r ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n o p p p p p q q q q q q r r ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n o p p p p p q q q q q q r r r ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n o p p p p p q q q q q q r r r r ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m n n n n n n o p p p p p q q q q q q r r r r r ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m n n n n n n o p p p p p q q q q q q r r r r r r ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a v w w w v b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 x y z z z z A b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u ", ". . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 B C z z z z z D b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u ", ". . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 E F z z z z z z A b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j k k k k k k l l G l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H ", ". . . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 I z z z z z z z D b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j k k k k k k l l J K G l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H ", ". . . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , L M ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 I z z z z C C N N b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i j j j j j j k k k k k k l l l K z G m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H ", ". . . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , O P z Q ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 R 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 E z z F x a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i j j j j j j k k k k k k l l l S z T m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H ", ". . . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > U V W z z z W X Y Y Y Y ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 Z ` 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 B F z F v a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i j j j j j j k k k k k k l l l S z z .m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H ", ". . . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > U ..+.z z z z z z z z z z z z z z z W X @.#.~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / _ _ _ _ _ _ : : : : : : $.%.%.&.&.&.&.*.=.-.[ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 ;.Z Z Z Z Z >.Z z z 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 y z z v a a b b b b b b c ,.N N '.d e e e e e e f f f f f f ).).!.~.~.~.~.~.{.z z z z z z z z z z T ].].].S S S K z z z J m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H ", ". . . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; V ^.z z z z z z z z z z /.X X X X z z z z z z z z /.(._.{ { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / ( _ _ _ _ _ _ : : : : %.:.<.z z z z z z z z z z [.}.} } } } } | | | | | | 1 2 2 2 2 2 3 ;.|.<.z z z z z z z z z z z 1.6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 2.z z 2.a a b b b b b b c c N z z 3.e e e e e e f f f 4.~.F z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z T m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.", ". . . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; 6.7.z z z ^.8.U L , P z z z z 9.) ) ) ) ! ! #.@.W z z z z z z (.0.] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / ( _ _ _ _ _ _ : : a.:.z z z z z z z z z z z z z z z z [.b.} } | | | | | | 1 2 2 2 2 2 c.` z z z z z z z z z z z z z z d.6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 v z z z v a b b b b b b c c c F z F e e e e e e f e.~.z F ~.!.).).).f.g.h.~.z z z z z z z z z z z z z z z z z z z z z z z J m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.", ". . . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; 7.z z +.V i.> > , , , z z z z z Y ) ) ) ! ! ! ! ! ! j.W z z z z z k.l.] ] ] ^ ^ ^ ^ ^ ^ / / / / ( _ _ _ _ _ _ : m.n.z z n.m.%.< < < < =.*.<.z z z z z z z <.b.| | | | | | 1 2 2 2 2 2 Z z z z z z z z z z z z z z z z z <.7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a 2.z z 2.a b b b b b b c c c o.z z !.e e e e e e.p.z !.e.f g g g g h i i i i i q.g.].z z z z ].k k k r.r.s.s.S S S S t. .u.m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.", ". . . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; v.+.z z V > > > > , , , M z z z z z ) ) ) ! ! ! ! ! ! ~ ~ ~ w.z z z z z z l.] ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ a.k.z z x.a.< < < < < < [ [ [ [ }.z z z z z z z <.| | | | | 1 2 2 2 2 2 Z z z z z z z z z z z z z z z z z z z y.7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a v z z z v b b b b b b c c c c '.z z z.e e e e !.z F e.f g g g g g h i i i i i i j j ].z z z z r.k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.", ". . . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; 7.z z +.i.> > > > , , , ' V z z z z W ) ) ! ! ! ! ! ! ~ ~ ~ ~ { B.z z z z z z C.^ ^ ^ ^ / / / / / ( _ _ _ _ _ D.:.z z k.a.: < < < < < < [ [ [ [ [ [ E.<.z z z z z z F.| | | 1 2 2 2 2 2 G.z z z z z d.d.d.d.d.d.d.d.` z z z z z H.7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a I.z z y b b b b b b c c c c d J.z F e e e K.F z F L.f g g g g g h i i i i i i j j j z z z z z M.k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.", ". . . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; 6.^.z z ..> > > > > , , , ' ' X z z z z 9.) ! ! ! ! ! ! ~ ~ ~ ~ { { ] n.z z z z z k.0.^ ^ / / / / / ( _ _ _ _ _ N.k.z z :.: : < < < < < < [ [ [ [ [ [ } } E.z z z z z z z O.| 1 2 2 2 2 2 Z z z <.P.c.4 4 4 4 4 4 5 5 6 1.z z z z z d.7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a F z z w b b b b b c c c c d d F z !.e e K.F z F L.f g g g g g h i i i i i i j j j Q.z z z z {.k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.", ". . . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; 6.+.z z +.i.> > > > , , , ' ' ' z z z z z Y ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] R.z z z z z z (.^ / / / / / ( _ _ _ _ _ :.z z z :.: : < < < < < < [ [ [ [ [ [ } } } } *.z z z z z z S.1 2 2 2 2 2 Z z z G.3 3 4 4 4 4 4 4 5 5 6 6 |.z z z z z z 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a x z z z b b b b b c c c c d d K.z z z.e K.F z z T.f g g g g g h i i i i i i j j j j h.z z z z ].k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.", ". . . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; 6.+.z z z V.> > > > , , , ' ' ' #.z z z z z ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] n.z z z z z z / / / / / ( _ _ _ _ _ :.z z z :.: : < < < < < < [ [ [ [ [ [ } } } } } b.z z z z z z W.2 2 2 2 2 c.<.z G.3 3 4 4 4 4 4 4 5 5 6 6 6 ` z z z z z z X.8 8 8 8 8 9 9 9 0 0 0 a a a a 2.z z N b b b b c c c c d d e 4.z p.e f F z z z f g g g g g h i i i i i i j j j j j ].z z z z r.k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.", ". . . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ..z z z 8.> > > > , , , ' ' ' ) @.z z z z X ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] C.z z z z z z C./ / / ( _ _ _ _ _ :.z z z n.: : < < < < < < [ [ [ [ [ [ } } } } } } | W.z z z z z z 2 2 2 2 3 G.z <.3 3 4 4 4 4 4 4 5 5 6 6 6 6 z z z z z z z Y.8 8 8 8 9 9 9 0 0 0 a a a a a y z z w b b b c c c c d d e e J.z Z.f !.z z z ~.g g g g g h i i i i i i j j j j j j z z z z z M.l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.", ". . . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; `.z z z z i.> > > , , , ' ' ' ) ) X z z z z @.! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ^ ^ z z z z z z +/ / ( _ _ _ _ _ .+z z z z ++: < < < < < < [ [ [ [ [ [ } } } } } } | | E.z z z z z z c.2 2 3 ;.z z |.3 4 4 4 4 4 4 5 5 6 6 6 6 @+z z d.z z z z y 8 8 8 9 9 9 0 0 0 a a a a a v z z z b b b c c c c d d e e e z z L.L.z z z z T.g g g g h i i i i i i j j j j j j #+z z z z {.l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.", ". . . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; 6.z z z z ^.> > > , , , ' ' ' ) ) ) z z z z z #.! ! ! ~ ~ ~ ~ { ] ] ] ] ] ] ^ ^ ^ k.z z z z z :./ ( _ _ _ _ _ $+z z z z m.: < < < < < < [ [ [ [ [ [ } } } } } } | | | | z z z z z z %+2 3 3 ` z z Z 4 4 4 4 4 4 5 5 6 6 6 6 7 Y.z z y.z z z z z 8 8 9 9 9 0 0 0 a a a a a a w z z N b b c c c c d d e e e z.z p.f !.z z z z ).g g g h i i i i i i j j j j j j k &+z z z z S l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.", ". . . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; 7.z z z z V > > , , , ' ' ' ) ) ) #.z z z z z ! ! ! ~ ~ ~ ~ { ] ] ] ] ] ] ^ ^ ^ ^ B.z z z z z :.( _ _ _ _ _ _ k.z z z k.: < < < < < < [ [ [ [ [ [ } } } } } } | | | | | z z z z z z %+3 3 ;.z z z Z 4 4 4 4 4 5 5 6 6 6 6 7 7 ` z ` 7 z z z z z @+9 9 9 0 0 0 a a a a a a b N z z *+b c c c c d e e e e e Z.z T.f F z z z z ).g g h i i i i i i j j j j j j k k ].z z z z s.l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.", ". . . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; z z z z z U > , , , ' ' ' ) ) ) ) @.z z z z X ! ! ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ B.z z z z z :._ _ _ _ _ _ x.z z z z a.< < < < < < [ [ [ [ [ [ } } } } } } | | | | | | W.z z z z z Z 3 3 |.z z z =+4 4 4 4 5 5 6 6 6 6 7 7 7 z z Y.8 C z z z z C 9 9 0 0 0 a a a a a a b b z z z A c c c c d e e e e e e 4.e.f f z z z z z ).g h i i i i i i j j j j j j k k k z z z z z G l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+", ". . . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; v.z z z z z > , , , ' ' ' ) ) ) ) ) X z z z z @.! ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ :.z z z z z :._ _ _ _ _ ++z z z z k.< < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 G.z z z z z Z 3 3 ` z z z d.4 4 4 5 5 6 6 6 6 7 7 7 @+z z @+8 H.z z z z F 9 0 0 0 a a a a a a b b A z z F c c c d d e e e e e e f f f f 4.z z z z z !.h i i i i i i j j j j j j k k k #+z z z z K l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+", ". . . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; ..z z z z z , , , ' ' ' ) ) ) ) ) ) z z z z z j.~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / :.z z z z z ;+_ _ _ _ : x.z z z z m.< < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 G.z z z z z Z 3 3 z z z z z R 4 5 5 6 6 6 6 7 7 7 7 Y.z z 8 8 X.z z z z z E 0 0 a a a a a a b b b w z z N c c d d e e e e e e f f f f f 4.z z z z z >+i i i i i i j j j j j j k k k k ,+z z z z S l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+", ". . . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > ..z z z z z , , ' ' ' ) ) ) ) ) ) #.z z z z z ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / :.z z z z z N._ _ _ : ++z z z z z $.< < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 G.z z z z z Z 3 3 z z z z z =+5 5 6 6 6 6 7 7 7 7 7 ` z y 8 8 8 z z z z z I.0 a a a a a a b b b b N z z '.c d d e e e e e e f f f f f f ).z z z z z z q.i i i i j j j j j j k k k k k T z z z z s.l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+", ". . . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > z z z z z z , ' ' ' ) ) ) ) ) ) ! @.z z z z w.~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / z z z z z z $+_ _ : : m.z z z z '+< < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 G.z z z z z c.3 4 z z z z z <.5 6 6 6 6 7 7 7 7 7 y.z z Y.8 8 8 C z z z z y a a a a a a b b b b b F z z c d d e e e e e e f f f f f f g ).z z z z z z h.i i i j j j j j j k k k k k k z z z z z G m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+", ". . + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > z z z z z z ' ' ' ) ) ) ) ) ) ! ! X z z z z )+~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / z z z z z z _ _ : : : n.z z z z x.< < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 G.z z z z z 3 4 4 d.z z z z z 1.6 6 6 7 7 7 7 7 7 @+z z @+8 8 9 !+z z z z z a a a a a b b b b b o.z z p.d d e e e e e e f f f f f f g g g z z z z z z {.i i j j j j j j k k k k k k s.z z z z K m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+~+", ". + + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > z z z z z z {+' ) ) ) ) ) ! ! ! ! z z z z z j.{ { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / ]+z z z z z n._ : : : ++z z z z z %.< < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 z z z z z ` 4 4 4 =+z z z z <.^+6 6 7 7 7 7 7 7 8 C z z 8 8 9 9 /+z z z z z w a a a b b b b b c '.z z (+d e e e e e e f f f f f f g g g g p.z z z z {._+i j j j j j j k k k k k k l :+z z z z t.m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+~+~+", "+ + + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > z z z z z z M ) ) ) ) ) ! ! ! ! #.z z z z z { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / <+z z z z z ;+: : : : %.z z z z z $.< [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 z z z z z d.4 4 4 R z z z d.[+6 6 7 7 7 7 7 7 8 8 z z y 8 9 9 9 0 z z z z z 2.a b b b b b b c c N z z '.e e e e e e f f f f f f g g g g g }+z z z |+i i j j j j j j k k k k k k l l T z z z z s.m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+~+~+~+", "+ + + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > /.z z /.Q 1+) ) ) ) ) ! ! ! ! ! @.z z z z B.{ ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( :.z z z z z a.: : : : :.z z z z z < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 ;.z z z z z Z 4 4 4 4 ` <.1.6 6 6 7 7 7 7 7 7 8 8 X.z z Y.9 9 9 0 0 C z z z z F b b b b b b c c c p.z z e e e e e e f f f f f f g g g g g h i {.>+q.i i j j j j j j k k k k k k l l l z z z z z u.m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+", "+ + + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , P /.V ' ' ) ) ) ) ) ! ! ! ! ! ! w.z z z z 2+] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ k.z z z z k.: : : : : '+z z z z <.[ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 Z z z z z z R 4 4 4 5 3+[+6 6 6 7 7 7 7 7 7 8 8 8 Y.z z /+9 9 0 0 0 2.z z z z z x b b b b c c c c z z p.e e e e e f f f f f f g g g g g h i i _+i i i j j j j j j k k k k k k l l l s.z z z z K m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+", "+ + + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , L ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ z z z z z R.] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ D.z z z z z x.: : : : < z z z z z &.[ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 G.z z z z ` 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 y z z 9 9 0 0 0 a w z z z z z *+b b b c c c c '.z z !.e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l :+z z z z t.m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+", "+ + @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ j.z z z z k.] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ .+z z z z z ++: : : < < z z z z z &.[ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 <.z z z z =+4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 5+z z C 9 0 0 a a a a z z z z z y b b c c c c d Z.z z 4.e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l T z z z z s.m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+", "+ @ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ )+z z z z B.] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ n.z z z z :.: : : < < %.z z z z z &.[ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 ;.z z z z z R 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 H.z z 7+0 0 a a a a a y z z z z z A c c c c d d J.z z e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l z z z z z u.n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+", "@ @ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ w.z z z z l.] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ $+z z z z z a.: : < < < %.z z z z z &.[ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 |.z z z z |.4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 y z F 0 0 a a a a a a *+z z z z z Z.c c c d d e z z p.e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l s.z z z z K n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+", "@ @ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ z z z z k.] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ ;+z z z z :.: : < < < < %.z z z z z &.[ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 <.z z z z R 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 8+z z 2.0 a a a a a a b x z z z z z p.c c d d e K.z z !.e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m .z z z z t.n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+", "@ @ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ 9+z z z z (.] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ D.z z z z z ++: < < < < < %.z z z z z <.} } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 Z z z z z |.5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 9 9 !+z z B a a a a a a b b b z z z z z z o.d d e e 4.z z 4.f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m T z z z z 0+n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+", "@ @ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { (.z z z k.0.] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ ;+z z z z m.: < < < < < < =.z z z z z z } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 ` z z z <.5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 9 9 9 F z y a a a a a a b b b b N z z z z z Z.d e e e J.z z L.f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m z z z z K n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+", "@ @ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { k.z z z a+] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ D.z z z z :.: < < < < < < [ =.z z z z z z b+} } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 Z z z z z >.5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 9 9 9 E z z x a a a a a b b b b b w z z z z z p.e e e e F z F f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m s.z z z z c+n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+", "@ # # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { R.z z z B.] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ n.z z z k.++< < < < < < [ [ [ z z z z z z }.} } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 <.z z z e+5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 9 9 9 0 y z y a a a a a b b b b b b c z z z z z z z.e e e z z ~.f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m t.z z z K n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+", "# # # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] n.z z k.0.^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ :.z z z k.++< < < < < < [ [ [ [ z z z z z z [.} | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 d.z z z |.5 6 6 6 6 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 E z z v a a a a b b b b b b c c N z z z z z !.e e 4.z z 4.f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m z z z z f+n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+", "# # # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] R.z z k.0.^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ %.z z z :.++< < < < < < [ [ [ [ [ &.z z z z z z b+| | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 Z z z z d.5 6 6 6 6 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 y z 2.a a a a b b b b b b c c c '.z z z z z z K.e !.z z e.f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m g+z z z c+n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+", "# # # # $ % % % % % & & & & & & * * * * * * = = - - - - ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] n.z k.0.^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ m.z z z x.: < < < < < < [ [ [ [ [ [ E.z z z z z z [.| | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 Z z z z e+5 6 6 6 6 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 I.z F a a a a b b b b b b c c c c d z z z z z z !.f p.z z f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m h+z z t.n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+", "# # # $ % % % % % & & & & & & * * * * * * = = - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] B.z k.0.^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ D.:.z z k.a.: < < < < < < [ [ [ [ [ [ } } <.z z z z z z S.| | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 =+z z <.e+5 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 I.z z x a a a b b b b b b c c c c d d !.z z z z z z e.z z ~.f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m 0+z z t.n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+", "# # $ % % % % % & & & & & & * * * * * * = = - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] 0.B.z k.0.^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ .+k.z z x.: : < < < < < < [ [ [ [ [ [ } } } }.z z z z z z z E.1 2 2 2 2 2 3 3 3 3 3 3 4 R d.z z d.3+5 6 6 6 7 7 7 7 7 7 8 8 5+C H.@+7+7+7+I C F z z w a a a b b b b b b c c c c d d e z.z z z z z z F z z !.g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m i+K z t.n n o p p p p p q q q q q q r r r r r r s s t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+", "# $ % % % % % & & & & & & * * * * * * = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { R.(.k.z k.0.^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ N.;+z z z x.++: : < < < < < < [ [ [ [ [ [ } } } } } [.z z z z z z z G.c.2 2 2 3 3 3 3 3 3 R =+z z <.Z 5 5 6 6 6 7 7 7 7 7 7 8 8 8 C z z z z z z z z z z C a a a b b b b b b c c c c d d e e e p.z z z z z z z z ).g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m f+K z c+n n o p p p p p q q q q k+k+r r r r r r s s t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+", "$ % % % % % & & & & & & * * * * * * = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ (.B.W z z z z z z B.B.B.B.B.B.:.:.:.:.:.:.:.:.z z z z z x.++: : : < < < < < < [ [ [ [ [ [ } } } } } } O.<.z z z z z z z z G.%+c.3 3 3 ;.Z d.z z <.=+4 5 6 6 6 6 7 7 7 7 7 7 8 8 8 @+z z z z z z z z z z 2.a a a b b b b b b c c c c d d e e e e Z.z z z z z z z z l+g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m s.s.g+h+z z K t.t.t.m+m+m+m+m+n+h+z z z h+o+r r r r r s s t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+", "% % % % % & & & & & & * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ w.z z z z z z z z z z z z z z z z z z z z z z z z z k.m.++: : : : < < < < < < [ [ [ [ [ [ } } } } } } | | O.W.z z z z z z z z z z z z z z z z ` =+4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 5+F z z z z z z z z z w a a a b b b b b b c c c c d d e e e e e e F z z z z z z z g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m u.K z z z z z z z z z z z z z z z z z z h+k+r r r r r r s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+", "% % % % & & & & & & * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ w.z z z z z z z z z z z z z z z z z z z z z z z n.;+$+: : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | b+` z z z z z z z z z z z ` =+R 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 y z z z z z z z z 2.v a a a b b b b b b c c c c d d e e e e e e f T.z z z z z z ~.g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m T z z z z z z z z z z z z z z z z h+p+k+q r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+", "% % % & & & & & & * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ )+B.B.B.B.B.B.B.B.B.B.B.B.B.B.:.:.:.:. +<+N.N.$+_ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 c.%+q+G.G.G.G.|.Z ;.4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 5+Y.C C C C C I.w a a a a a b b b b b b c c c c d d e e e e e e f f f F z z z z z z l+h i i i i i i j j j j j j k k k k k k l l l l l l m m m s.t.t.t.t.t.t.t.t.t.m+m+p+r+r+r+k+q q q q r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+", "% % & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f e.z z z z z z ~.i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+", "% & & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f ~.z z z z z z g.i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+", "& & & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g l+F z z z z z {.q.i i j j j j j j k k k k k k l l G l l l m m m m m m n n n n n n o p p p p p q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+", "& & & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g e.z z z z z z ~.i j j j j j j k k k k k k l l G S l l m m m m m m n n n n n n o p p p p p q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+", "& & & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g f.z z z z z z h.j j j j j k k k k k k l l l :+z l m m m m m m n n n n n n o p p p p p q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+", "& & * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i |+z z z z z z g.j j j k k k k k k l l l G z z s.m m m m m n n n n n n o p p p p p q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+", "& * * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i g.z z z z z z g.j k k k k k k l l l l T z z .m m m m n n n n n n o p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+", "* * * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i g.{.z z z z z ].k k k k k l l l l S z z z T m m m n n n n n n o p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+", "* * * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j v+].z z z z z {.&+M.k l l l J T z z z z z m m n n n n n n o p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+", "* * * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j Q.T z z z z z z T S S K z z z z z .u.m n n n n n n p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+", "* * * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k M.&+].z z z z z z z z z T g+u.m m n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+", "* * = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l s.s.s.s.s.u.m m m m m n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+", "* = = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+", "= = - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+", "= - - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+", "- - - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+", "- - - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+", "- - ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+", "- ; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k M.r.s.s.G l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+", "; ; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k #+T z z z z G l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+", "; ; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k M.].z z z z z :+l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+", "; ; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k #+{.z z z z z z G m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+", "; ; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k r.z z z z z z z :+m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+x+x+x+x+x+x+", "; ; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k r.z z z z S S S S m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+x+x+x+x+x+x+y+", "; > > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : < < < < < < [ [ [ [ -.[ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f L.f f f g g g g g h i i i i i i j j j j j j k k #+z z K J l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+x+x+x+x+x+x+y+y+", "> > > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : < < < < < < [ [ [ }.<.-.} } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 2.B 0 a a a a a a b b b b b b c c c c d d e e e e e e f f 4.p.f f g g g g g h i i i i i i j j j j j k k k M.{.z K G l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+x+x+x+x+x+x+y+y+y+", "> > > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : < < < < < < [ [ }.<.z z &.&.&.&.&.&.F.E.b+| | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 1.Y.d.d.d.Y.@+@+8 8 8 8 8 9 9 9 C z 2.a a a a a a b b b b b b c c c c d d e z.4.4.4.4.4.e.4.z z f g g g g g h i i i i i i j j j j j k k k k T z z G l l l l m m m m m m n 0+t.t.t.t.t.m+m+m+m+m+n+n+n+n+n+n+o+r r r r r s s t t t t u u u u u u H H H H H H 5.5.z+A+B+C+D+D+D+A+E+U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+F+G+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+", "> > > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : < < < $.%.m.&.&.<.z z z z z z z z z z z z z z W.H+2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 [+|.z z z z z z z z z z z y C !+7+7+y z z w a a a a a b b b b b b c c c c 3.(+F z z z z z z z z z z z ).g g g g h i i i i i i j j j j j k k k k ,+z z :+l l l l m m m m m m i+t.z z z z z z z z z z z z z z z h+o+r r r r r s s t t t t u u u u u u H H H H H H I+J+K+z z z z z z z z z L+M+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+G+N+z G+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+", "> > > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ : : : : : : < O+x.<.z z z z z z z z z [.&.&.&.&.z z z z z z z z ` c.2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 P+z z z z z z z z z z z z z z z z z z z z z v a a a a b b b b b b c c c o.p.z z z z z z z z z z z z z z ~.g g g h i i i i i i j j j j j k k k k M.z z z G l l l m m m m m m n n n i+0+0+r+r+z z z z z z r+r+k+q r r r r r r s s t t t t u u u u u u H H H H H Q+K+z z z z z z z z z z z z z K+M+-+-+~+~+~+~+4+4+6+6+6+6+R+L+z z K+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+", "> > , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ : : : : : : m.<.z z z <.&.*.*.z z z z z b.} } } | | b+[.z z z z z z <.c.3 3 3 3 3 3 4 4 4 4 4 4 5 5 [+d.z z z z z z z z z z z z z z z z z z z z z z a a a a b b b b b b c c c '.z z z z z z z z z z z z z z z z F g g h i i i i i j j j j j j k k k k k ,+z z :+l l l m m m m m m n n n n n n o p S+z z z z z n+q q q r r r r r r s s t t t t u u u u u u H H H H Q+K+z z z z C+C+D+T+z z z z z z z z K+-+~+~+~+~+4+4+6+6+6+6+L+z z z z U+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+", "> , , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ : : : : : m.<.z z '+%.$.[ [ [ =.z z z z <.} } } | | | | | W.z z z z z z |.3 3 3 3 3 4 4 4 4 4 4 5 5 [+<.z z z z z z z z z z z z z z z z z z z z z z y a a a b b b b b b c c c '.z z z z z z z z z z z z z z z z z z l+h i i i i i j j j j j j k k k k k M.z z z G l l m m m m m m n n n n n n o p p r+z z z z z r+q q r r r r r r s s t t t t u u u u u u H H H W+K+z z K+Q+X+A.A.U.U.U.E+Y+z z z z z z z Z+~+~+~+4+4+6+6+6+6+`+z z z z z G+d+j+j+j+j+j+s+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+", ", , , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ : : : : ++n.z z '+O+< < [ [ [ [ &.z z z z &.} } | | | | | | 1 ` z z z z z z 3 3 3 3 4 4 4 4 4 4 5 5 [+<.z z d.@+y.7 7 7 8 5+@+@+Y.C C C y z z z z z z C a a b b b b b b c c c N z z z z z J.J.J.~.~.~.~.~.p.z z z z z }+i i i i i j j j j j j k k k k k k @z z T l l m m m m m m n n n n n n o p p p m+z z z z z .@q r r r r r r s s t t t t u u u u u u H H H J+z z K+Q+5.A.A.A.U.U.U.U.U.U.+@z z z z z z L+~+~+4+4+6+6+6+6+6+R+z z z z K+d+j+j+j+j+j+s+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+", ", , ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / _ _ _ _ _ _ : : : : %.z z z m.< < < [ [ [ [ [ <.z z z z E.} | | | | | | 1 2 %+z z z z z z Z 3 3 4 4 4 4 4 4 5 5 [+<.z ` y.7 7 7 7 7 8 8 8 8 8 8 9 9 9 I.z z z z z z w a b b b b b b c c c '.z z F Z.K.e e e f f f f f f ).z z z z z ~.i i i i j j j j j j k k k k k k l K z z s.l m m m m m m n n n n n n o p p p p K z z z z K q r r r r r r s s t t t t u u u u u u H H @@K+z z J+5.5.A.A.A.U.U.U.U.U.U.-+-+Y+z z z z z z ~+4+4+6+6+6+6+6+6+N+z z z z U+j+j+j+j+j+s+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+", ", ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / ( _ _ _ _ _ _ : : : : m.z z z %.< < < [ [ [ [ [ -.z z z z z b.| | | | | | 1 2 2 c.z z z z z z Z 3 4 4 4 4 4 4 5 5 [+<.z d.7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 E z z z z z z z w b b b b b b c c c '.z z J.e e e e e f f f f f f g !.z z z z z z i i i j j j j j j k k k k k k l J z z z l m m m m m m n n n n n n o p p p p p z z z z z n+r r r r r r s s t t t t u u u u u u H H #@z z z $@5.5.A.A.A.U.U.U.U.U.U.-+-+-+M+z z z z z K+4+4+6+6+6+6+6+6+d+K+z z z z %@j+j+j+j+s+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+", "' ' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / ( _ _ _ _ _ _ : : : : m.z z z m.< < < [ [ [ [ [ [ E.z z z z <.| | | | | | 1 2 2 2 2 z z z z z z Z 4 4 4 4 4 4 5 5 6 d.z z y.7 7 7 7 7 8 8 8 8 8 8 9 9 9 B F z C y z z z z b b b b b b c c c o.F z J.e e e e e f f f f f f g g p.z z z z z z _+i j j j j j j k k k k k k l l :+z z S m m m m m m n n n n n n o p p p p p r+z z z z z &@r r r r r s s t t t t u u u u u u H H #@z z K+z+5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+L+z z z D+*@4+6+6+6+6+6+6+d+G+z z z z =@j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+", "' ' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / ( _ _ _ _ _ _ : : : : %.z z z '+< < < [ [ [ [ [ [ } *.z z z z W.| | | | | 1 2 2 2 2 2 z z z z z z >.4 4 4 4 4 5 5 6 1.z z d.7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 y z F a z z z z z b b b b b c c c c J.z F e e e e e f f f f f f g g g z z z z z z z |+j j j j j j k k k k k k l l l T z z s.m m m m m n n n n n n o p p p p p q n+z z z z z r r r r r s s t t t t u u u u u u H H C+z z K+z+5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+Z+z z D+4+4+6+6+6+6+6+6+d+d+-@z z z z ;@j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@", "' ) ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : ++z z z z O+< < [ [ [ [ [ [ } } [.z z z z E.| | | | 1 2 2 2 2 2 3 z z z z z z 4 4 4 4 4 5 5 6 6 <.z z @+7 7 7 7 8 8 8 8 8 8 9 9 9 0 2.z z v v z z z z N b b b b c c c c 3.z z !.e e e e f f f f f f g g g ).z z ~.z z z z T j j j j j k k k k k k l l l G z z z m m m m m n n n n n n o p p p p p q q K z z z z h+r r r r s s t t t t u u u u u u H H C+z z K+z+5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+R+z R+4+4+6+6+6+6+6+6+d+d+d+N+z z z z ,@j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@", ") ) ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : n.z z z '+< < [ [ [ [ [ [ } } } z z z z z O.| | | 1 2 2 2 2 2 3 ;.z z z z z ` 4 4 4 4 5 5 6 6 P+z z z @+7 7 7 8 8 8 8 8 8 9 9 9 0 I z z w a w z z z z N b b b c c c c d p.z z 4.e e e f f f f f g g g g g !.z z q.z z z z z j j j j k k k k k k l l l l s.z z t.m m m m n n n n n n o p p p p p q q .@z z z z z p+r r r s s t t t t u u u u u u H H C+z z z $@5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+)@R+4+4+6+6+6+6+6+6+d+d+d+d+z z z z L+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@", ") ) ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : a.z z z z x.< [ [ [ [ [ [ } } } E.z z z z <.| | | 1 2 2 2 2 2 3 3 Z z z z z z =+4 4 4 5 5 6 6 6 ` z z z @+7 7 8 8 8 8 8 8 9 9 9 0 B z z C a a I.z z z z w b b c c c c d 3.z z z 4.e e f f f f f g g g g g h >+z >+i z z z z z g.j j k k k k k k l l l l l S z z g+m m m n n n n n n o p p p p p q q q r+z z z z z &@r r s s t t t t u u u u u u H H #@z z z Q+5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+G+z z z z !@s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@", ") ) ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : &.z z z z %.[ [ [ [ [ [ } } } } *.z z z z W.| | 1 2 2 2 2 2 3 3 3 G.z z z z <.4 4 4 5 5 6 6 6 6 z z z z Y.7 8 8 8 8 8 8 9 9 9 0 0 F z y a a a C z z z z w b c c c c d d !.z z z Z.e f f f f f g g g g g h i z z |+i ~.z z z z ].j k k k k k k l l l l l l z z z u.m m n n n n n n o p p p p p q q q q n+z z z z z r r s s t t t t u u u u u u H H #@z z z ~@5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+!@z z z z {@t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@", ") ) ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < z z z z z [ [ [ [ [ [ } } } } } &.z z z z E.| 1 2 2 2 2 2 3 3 3 3 z z z z z =+4 4 5 5 6 6 6 6 @+z z z z ` 8 8 8 8 8 8 9 9 9 0 0 C z F v a a a N z z z z A c c c c d d e p.z z z J.f f f f f g g g g g h i g.z z g.i h.z z z z {.k k k k k k l l l l l l u.z z K m m n n n n n n o p p p p p q q q q q K z z z z h+r s s t t t t u u u u u u H H @@K+z z z z+5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+j+N+z z z =@t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@", ") ) ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < %.z z z z z [ [ [ [ [ } } } } } } z z z z z O.1 2 2 2 2 2 3 3 3 3 P.z z z z ` 4 4 5 5 6 6 6 6 7 @+z z z z z 8 8 8 8 8 9 9 9 0 0 I.z z w a a a b z z z z z c c c c d d e e z z z z z L.f f f g g g g g h i i |+z z i j Q.z z z z z #+k k k k l l l l l l m s.z z t.m n n n n n n o p p p p p q q q q q .@z z z z z p+s s t t t t u u u u u u H H H ~@z z z J+5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+d+d+d+d+d+d+j+j+z z z z ;@t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@", ") ! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < m.z z z z z [ [ [ [ } } } } } } b+z z z z z 1 2 2 2 2 2 3 3 3 3 c.<.z z z <.R 4 5 5 6 6 6 6 7 7 @+z z z z z @+8 8 8 9 9 9 0 0 E z z 2.a a a b b z z z z p.c c c d d e e e z z z z z T.f f g g g g g h i i i >+z >+j j j z z z z z &+k k k l l l l l l m m t.z z s.n n n n n n o p p p p p q q q q q q &@z z z z z ^@s t t t t u u u u u u H H H Q+z z z K+5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+d+d+d+d+d+d+j+j+%@z z z z /@t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@", "! ! ! ! ! ! ~ ~ ~ ~ { { ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < &.z z z z z [ [ [ } } } } } } | S.z z z z W.2 2 2 2 2 3 3 3 3 3 G.z z z z Z 4 5 5 6 6 6 6 7 7 7 @+z z z z z C 8 8 9 9 9 0 0 B F z C a a a b b w z z z z N c c d d e e e e z z z z z F f g g g g g h i i i q.z z |+j j j ].z z z z T k k l l l l l l m m m K z z n n n n n n o p p p p p q q q q q q r n+z z z z z s t t t t u u u u u u H H H @@z z z z Q+A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+d+d+d+d+d+d+j+j+j+;@z z z =@t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@", "! ! ! ! ! ~ ~ ~ ~ { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < &.z z z z z =.[ } } } } } } | | W.z z z z P.2 2 2 2 3 3 3 3 3 P.z z z <.Z 4 5 5 6 6 6 6 7 7 7 7 7 z z z z y X.8 9 9 9 0 0 0 y z F v a a b b b w z z z z D c d d e e e e e ~.z z z z z ).g g g g h i i i i g.z z g.j j j h.z z z z z k l l l l l l m m m u.z z h+n n n n n o p p p p p q q q q q q r r K z z z z h+t t t t u u u u u u H H H H C+z z z K+A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+L+z z z (@t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@", "! ! ! ! ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < &.z z z z z }.} } } } } } | | | z z z z z _@2 2 2 3 3 3 3 3 |.z z z ` R 4 5 5 6 6 6 6 7 7 7 7 7 7 F z F H.8 8 9 9 9 0 0 0 2.z z x a a b b b b N z z z z '.d e e e e e e f T.z z z z F e.g g g h i i i i i ~.z z j j j j #+z z z z z s.l l l l l m m m m s.z z .n n n n o p p p p p q q q q q q r r o+z z z z z :@t t t u u u u u u H H H H W+z z z z <@A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+z z z z /@t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@", "! ! ! ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < &.z z z z z [.} } } } } | | | b+z z z z z 2 2 2 3 3 3 3 ;.` z z <.=+4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 Y.H.8 8 8 9 9 9 0 0 0 w z z w a a b b b b b N z z z z '.e e e e e e f f L.z z z ~.l+g g g h i i i i i i z z T j j j k k z z z z z :+l l l l m m m m m t.z z 0+n n n o p p p p p q q q q q q r r r &@z z z z z [@t t u u u u u u H H H H H ~@z z z z X+A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+}@z z z =@t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@", "! ! ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ =.z z z z z [.} } } } | | | | S.z z z z G.2 2 3 3 c.Z ` z z <.|.R 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 v z z C a a b b b b b b z z z z z e e e e e e f f f f p.F ).g g g g h i i i i i i Q.z z |+j j k k k ].z z z z K l l l m m m m m m h+z z n n n o p p p p p q q q q q q r r r r n+z z z z z t t u u u u u u H H H H H W+z z z z C+A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+;@z z z ;@t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@", "~ ~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ 1@z z z <.b+} } } } | | | | | W.z z z z z z z z z z z z ` =+4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a F z F a a b b b b b c c z z z z z e e e e e f f f f f L.l+g g g g h i i i i i i j |+z z Q.j k k k k ,+z z z z z J l m m m m m m n z z h+n n o p p p p p q q q q q q r r r r r K z z z z n+t u u u u u u H H H H H H J+z z z z A+U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+2@z z z /@u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@", "~ ~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ <.z }.} } } } } | | | | | | z z z z z z z z z z G.P.R 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a C z z v a b b b b b c c '.z z z z p.e e e e f f f f f f g g g g g h i i i i i i j j T z z j k k k k k r.z z z z z @m m m m m m n 0+z z .n o p p p p p q q q q q q r r r r r o+z z z z z 3@u u u u u u H H H H H H 5.z z z z z U.U.U.U.U.U.-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+z z z =@u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@", "~ ~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ 1@b.} } } } } | | | | | | H+z z z z z |.Z Z c.3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a I.z z w a b b b b b c c c '.z z z z J.e e e f f f f f f g g g g g h i i i i i i j j v+z z ].k k k k k k l z z z z z T m m m m m n n c+z z 0+o p p p p p q q q q q q r r r r r r ^@z z z z z 4@u u u u u H H H H H H 5.Q+z z z z T+U.U.U.U.U.-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+}@z z z 5@u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@", "~ { { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 P.z z z z G.3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a w z z y w w w w w w '.'.'.'.p.z z z z J.e e f f f f f f g g g g g h i i i i i i j j j h.z z r.k k k k k l l T z z z z z u.m m m n n n t.z z o p p p p p q q q q q q r r r r r r s n+z z z z z u u u u u H H H H H H 5.5.~@z z z z Y+U.U.U.U.-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+;@z z z 6@u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@", "{ { ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 G.z z z z Z 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a x z z z z z z z z z z z z z z z z z z z 4.e f f f f f f g g g g g h i i i i i i j j j j T z {.k k k k k l l l @z z z z z g+m m n n n n z z h+p p p p p q q q q q q r r r r r r s s K+z z z z C+u u u u H H H H H H 5.5.5.z z z z z A+U.U.U.-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+2@z z 2@u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@", "{ ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 z z z z z c.3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a v F z z z z z z z z z z z z z z z z z z z 4.f f f f f f g g g g g h i i i i i i j j j j v+z z ,+k k k k l l l l J z z z z z T m n n n n i+z z p+p p p p q q q q q q r r r r r r s s 7@z z z z z 3@u u u H H H H H H 5.5.5.A+z z z z z E+U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+z z z 5@u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@", "] ] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 _@z z z z <.3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a v F z z N N N N N N N N N N J.J.p.z z z z z e.f f f f f g g g g g h i i i i i i j j j j j h.z z M.k k k l l l l l l z z z z z z i+n n n n 0+z z r+p p p q q q q q q r r r r r r s s t 9@z z z z z 4@u u H H H H H H 5.5.5.A.B+z z z z z U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+}@z =@5@u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@", "] ] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 P.z z z z G.3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a C z z w b b b b b c c c c d d e K.z z z z z f f f f f g g g g g h i i i i i i j j j j j j {.z T k k k l l l l l l m t.z z z z z c+n n n n t.z z i+p p q q q q q q r r r r r r s s t t n+z z z z z u u H H H H H H 5.5.5.A.A.C+z z z z K+-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+0@0@u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@", "] ] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 ` z z z z P.3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 a a a C z z w b b b b b c c c c d d e e 4.z z z z z f f f f g g g g g h i i i i i i j j j j j j #+z z #+k k l l l l l l m m s.z z z z z h+n n n o K z K p p q q q q q q r r r r r r s s t t t K+z z z z ~@u H H H H H H 5.5.5.A.A.A.z z z z z D+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@", "] ] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 z z z z z ;.4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 a a a C z z w b b b b b c c c c d d e e e 4.z z z z F f f f g g g g g h i i i i i i j j j j j j k T z T k k l l l l l l m m m m z z z z z z f+n o p z z m+p q q q q q q r r r r r r s s t t t 7@z z z z z :@H H H H H H 5.5.5.A.A.U.U.z z z z z D+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@", "] ] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 Z z z z z z 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 0 0 0 a a a C z z w b b b b b c c c c d d e e e e J.z z z z ~.f f g g g g g h i i i i i i j j j j j j k #+z z M.k l l l l l l m m m m m t.z z z z z .o p r+z z r+q q q q q q r r r r r r s s t t t t 9@z z z z z #@H H H H H 5.5.5.A.A.U.U.b@z z z z z D+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+0@6@w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@", "] ^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 |.z z z z ` 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 0 0 0 a a a C z z w b b b b b c c c c d d e e e e e J.z z z z ~.f g g g g g h i i i i i i j j j j j j k k T z ,+k l l l l l l m m m m m m 0+z z z z z z i+p p+z z k+q q q q q r r r r r r s s t t t t u C+z z z z z H H H H H 5.5.A.A.A.U.U.U.A+z z z z z D+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+6@c@z c@w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@", "^ ^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 ` z z z z |.4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 9 9 9 0 0 0 a a v C z z w b b b b b c c c c d d e e e e e e z z z z z ~.g g g g g h i i i i i i j j j j j j k k &+z {.k l l l l l l m m m m m m n n z z z z z z p+p h+z z q q q q q r r r r r r s s t t t t u u z z z z z ~@H H H H 5.5.A.A.A.U.U.U.U.A+z z z z z D+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+6@=@z z z e@w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@", "^ ^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 c.z z z z z Z 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 9 9 9 0 0 0 a a I.F z z w b b b b b c c c c d d e e e e e e f z z z z z ~.g g g g h i i i i i i j j j j j j k k &+z z #+l l l l l l m m m m m m n n n .z z z z z z S+z z n+q q q q r r r r r r s s t t t t u u 4@z z z z z J+H H 5.5.5.A.A.A.U.U.U.U.U.A+z z z z z z ~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+f@z z z z z =@g@w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@", "^ ^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 Z z z z z z 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 9 h@C I I I w C F z z F x b b b b b c c c c d d e e e e e e f e.z z z z z ~.g g g h i i i i i q.].h.g.g.g.g.r.].{.z z r.l l l l l l m m m m m m n n n n f+z z z z z z K z z p+q q q r r r r r r s s t t t t u u u 3@z z z z z #@H 5.5.5.A.A.A.U.U.U.U.U.U.+@z z z z z z M+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+f@z z z z z z z c@x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@", "^ ^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 G.z z z z <.4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 9 /+z z z z z z z z z y A b b b b b c c c c d d e e e e e e f f 4.z z z z z ~.g g h i i i i i i ].z z z z z z z z z z ].l l l l l l m m m m m m n n n n n n h+z z z z z z z z r+q q r r r r r r s s t t t t u u u u ~@z z z z z @@5.5.5.A.A.A.U.U.U.U.U.U.-+i@z z z z z z Z+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+j@t+t+u+u+u+u+u+=@z z z z z z =@x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@", "^ ^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | H+%+%+%+%+%+Z Z Z Z Z z z z z z ` Z e+e+1.1.1.P+d.d.d.d.@+8 8 8 8 8 8 9 9 F z z z z z z z z 2.b b b b b b c c c c d d e e e e e e f f f ~.z z z z z z T.h i i i i i i g.z z z z z z z z z z ,+l l l l l l m m m m m m n n n n n n o k@z z z z z z z z .@q r r r r r r s s t t t t u u u u u z z z z z K+5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+z z z z z z L+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+/@=@}@t+u+u+u+u+u+u+e@z z z z z =@l@x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@", "^ / / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | %+z z z z z z z z z z z z z z z z z z z z z z z z z F Y.y.8 8 8 8 8 8 9 9 h@z z z z z z z y x b b b b b b c c c c d d e e e e e e f f f f ~.z z z z z z z z z z z z z z z z z z z z z z z z r.l l l l l l m m m m m m n n n n n n o p p K z z z z z z z q r r r r r r s s t t t t u u m@9@9@C+z z z z z K+$@$@A+A+b@U.U.U.U.U.U.-+-+-+-+L+z z z z z z R+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+j@c@z =@t+u+u+u+u+u+u+w+w+2@z z z n@l@x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@o@o@", "/ / / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | %+z z z z z z z z z z z z z z z z z z z z z z z d.Y.p@7 7 8 8 8 8 8 8 9 9 9 2.C C C C C I.v a b b b b b b c c c c d d e e e e e e f f f f f ~.z z z z z z z >+~.|+g.g.v+T z z z z z z z z ,+M.l l l l l l m m m m m m n n n n n n o p p p k@z z z z z z n+r r r r r r s s t t t t u 3@z z z z z z z z z z z z z z z z Y+U.U.U.U.-+-+-+-+-+Z+z z z z z z K+`+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+j@;@z z ;@t+u+u+u+u+u+u+w+w+w+g@=@z q@x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@o@o@o@", "/ / / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 %+%+%+%+%+Z Z Z Z Z Z Z Z Z Z Z Z e+e+1.[+6 6 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f l+~.~.!.).f.i i i i i i j v+|+].].].].].&+r.k k l l l l l l m m m m m m n n n n n n o p p p p p K z z z z z z o+r r r r s s t t t t u 3@C+C+C+C+C+C+C+C+C+C+C+C+C+C+C+D+b@U.U.U.U.-+-+-+-+-+-+M+z z z z z z z K+`+6+6+d+d+d+d+d+d+j+j+j+j+j+r@;@z z 2@/@t+u+u+u+u+u+u+w+w+w+w+w+e@s@x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@o@o@o@o@", "/ / / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q k+z z z z z z n+r r r s s t t t t u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+t@z z z z z z z K+-@d+d+d+d+d+d+j+j+j+,@u@L+z z =@(@t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@o@o@o@o@o@", "/ / ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q n+z z z z z z &@r s s t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+v@z z z z z z z z K+N+w@w@w@u@!@N+=@z z z =@(@t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@", "/ ( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q .@K z z z z z K x@s t t t u u u u u u H H H H H H z+5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+N+z z z z z z z z z z z z z z z z z 2@}@t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@", "( _ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q k+z z z z z z n+t t t u u u u u u H H H H H H z+C+5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+-@K+z z z z z z z z z z z z L+(@j@t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@", "_ _ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r &@z z z z z z 3@t u u u u u u H H H H H H 5.J+z A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+R+N+K+z z z z L+N+!@u@j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@", "_ _ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r p+z z z z z z 9@u u u u u H H H H H H 5.z+z z A+A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@", "_ _ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r s ^@z z z z z z 9@u u u H H H H H H 5.5.~@z z B+U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@", "_ _ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r s s t 9@K+z z z z z C+u H H H H H H 5.5.C+z z z T+U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@", "_ _ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q r r r r r r s s t t t 7@C+z z z z z K+Q+@@H H H 5.I+~@z z z z z U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@", "_ : : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q r r r r r r s s t t t t u u 4@~@z z z z z z ~@C+C+K+z z z z z Y+E+U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@", ": : : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q r r r r r r s s t t t t u u u u u m@Q+C+z z z z z z z z z T+B@E+U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@", ": : : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q r r r r r r s s t t t t u u u u u u H H H H H #@$@$@$@A+X+A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@", ": : : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@", ": : : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@", ": : < < < < < < [ [ [ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@", ": < < < < < < [ [ [ [ [ [ } } } } } } | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@", "< < < < < < [ [ [ [ [ [ } } } } } } | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@", "< < < < < [ [ [ [ [ [ } } } } } } | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@", "< < < < [ [ [ [ [ [ } } } } } } | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@", "< < < [ [ [ [ [ [ } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@", "< < [ [ [ [ [ [ } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@", "< [ [ [ [ [ [ } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@", "[ [ [ [ [ [ } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@", "[ [ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@", "[ [ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@", "[ [ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@", "[ } } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@", "} } } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@", "} } } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@", "} } } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@", "} } } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@", "} } | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@", "} | | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@", "| | | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@", "| | | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j k k k k k k l l l l l H@I@I@J@m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@", "| | | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i j j j j j j k k k k k k l l l l H@K@L@L@L@J@m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@", "| | | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i j j j j j j k k k k k k l l l l H@M@N@O@N@I@m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@", "| | 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i j j j j j j k k k k k k l l l l H@M@O@m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@", "| 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g P@Q@Q@R@S@i i j j j j j j k k k k k k l l l l H@M@L@T@m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@", "1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g P@M@L@L@L@L@M@i j j j j j j k k k k k k l l l l l K@L@M@m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@", "2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g V@M@W@i S@X@L@L@Y@j j j j j k k k k k k l l l l l l M@L@Z@m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t `@ #u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@", "2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g .#M@S@i i i +#L@M@@#j j j j k k k k k k l l l l l l T@L@L@I@m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t ##$#L@u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@", "2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g %#L@&#i i i i i R@j j j j j k k k k k k l l l l l l m *#L@L@m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t =#L@$#u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@-#", "2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f g g g g g X@L@i i i i i j j j j j j k k k k k k l l l l l l m m N@L@O@m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u ;#L@>#u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@-#,#", "2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f g g g g g '#L@L@i i i i j j j j j j k k k k k k l l l l l l m m m L@L@*#n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u #L@L@)#u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@-#,#,#", "3 3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f g g g g g h +#L@L@W@i i j j j j j j k k k k k k !#N@L@L@~#l m m m I@L@L@{#n n n n n o p p ]#^#L@L@/#q q q q r r r r (#^#L@=#t t t t u u )#L@L@u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U._#:#L@L@L@L@<#[#~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+}#|#:#L@L@L@L@L@1#t+t+t+u+u+2#3#L@L@L@L@4#3#5#w+x+x+x+6#4#7#y+y+y+y+8#9#0#V+V+V+a#b#c#d#'@'@'@'@]@]@]@e#f#L@L@g#|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@U@U@U@U@U@-#,#,#,#", "3 3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f g g g g g h i +#L@L@X@i j j j j j j k k k k k h#O@K@~#L@L@L@m m m m Z@L@L@n n n n n o p i#j#Z@k#L@L@L@q q q r r r l#^#^#;#L@L@m#t t #>#=#$#L@L@n#n#n#o#p#H 5.5.5.A.A.A.U.U.U.U.U.q#:#:#<#<#L@L@L@L@r#~+4+4+6+6+6+6+6+6+d+d+d+d+d+s#L@L@L@L@L@L@L@t#t+t+t+u+u#v#9#3#3#9#L@L@L@v#w+x+x+w#4#L@L@8#y+y+8#9#L@L@0#V+V+x#L@L@L@y#'@'@'@]@]@z#A#B#C#L@L@L@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#", "3 3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e f f f f f f g g g g g h i i i L@L@L@Q@@#j j j j k k k k k h#M@K@l l O@L@L@m m m m O@L@j#n n n n o p i#M@Z@p q j#L@L@q q r r r /#L@/#s l#L@L@##t u `@)#)#L@L@n#)#)#)#p#H 5.5.5.A.A.A.U.U.U.U.U._#L@<#-+-+-+-+<#L@:#~+4+4+6+6+6+6+6+6+d+d+d+d+D#9#|#D#j+j+s+1#|#E#t+t+t+u+2#9#9#u#u+w+w+F#L@L@5#x+w#4#4#9#L@L@G#G#f#f#L@L@L@V+b#9#d#c#L@L@H#'@'@]@]@z#c#B#]@|@A#L@L@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#", "3 3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e f f f f f f g g g g g h i i i i &#L@L@L@M@@#j j k k k k k h#M@M@l l l N@L@Z@m m m m L@L@*#n n n o p i#M@M@p q q ^#L@I#q r r r /#L@I#s s t m#J#t u u u u u L@L@)#H H H H 5.5.5.A.A.A.U.U.U.U.U.K#L@:#-+-+-+-+~+L@L@L#4+4+6+6+6+6+6+d+d+d+d+d+D#9#:#j+j+j+s+t+9#L@1#t+t+u+u#9#L@u#u+w+w+w+3#L@4#x+x+6#M#x+7#L@L@d#f#G#y+d#L@L@9#x#a#>@d#L@c#'@'@]@]@z#c#c#]@|@|@f#L@N#|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#", "3 3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e f f f f f f g g g g g h i i i i i i R@L@L@L@M@Y@k k k k k k K@L@O#l l ~#L@O@m m m m {#L@L@{#n n o p p Z@L@P#q q /#L@j#q r r r l#;#L@l#s t t t t u u u u u )#L@L@H H H H 5.5.5.A.A.A.U.U.U.U.U.U.;#L@K#-+-+-+~+Q#L@L@R#4+6+6+6+6+6+d+d+d+d+d+d+:#L@S#j+j+s+t+t#L@9#t+t+u+u+v#L@3#u+w+w+w+w+L@L@x#x+x+x+x+x+f#L@9#8#y+y+V+f#L@f#a#V+>@'@f#L@B#'@]@]@]@B#L@T#|@|@g#L@A#|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#", "3 4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e f f f f f f g g g g g h i i i i i i j j Y@L@L@L@L@V#k k k k H@L@L@l l ~#L@Z@m m m m n *#L@L@n n o p p i#L@L@q q /#L@I#q r r r r W#L@=#s t t t t u u u u u u o#L@$#H H H 5.5.5.A.A.A.U.U.U.U.U.U.K#L@;#-+-+-+~+~+[#L@X#4+6+6+6+6+6+d+d+d+d+d+d+}#L@L@j+j+s+t+t+|#L@|#t+u+u+u+L@L@2#w+w+w+w+Y#L@L@w#x+x+x+x+y+L@L@6#y+y+V+V+L@L@G#V+>@'@'@L@L@H#]@]@]@z#L@L@|@|@g#L@N#|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#", "4 4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d e e e e e e f f f f f f g g g g g h i i i i i i j j j j Y@L@L@L@N@k k k l O#L@O@H@O@M@T@m m m m n n j#L@j#n o p p p P#L@j#Z#j#;#`#q r r r r r ;#L@ $t t t t u u u u u u H n#L@n#H H 5.5.5.A.A.A.U.U.U.U.U.U.-+<#L@[#-+-+~+~+~+;#L@<#6+6+6+6+6+d+d+d+d+d+d+j+s#L@|#j+s+t+t+t+L@L@t#u+u+u+t#L@9#w+w+w+w+w+v#L@L@x+x+x+x+y+6#L@L@.$y+V+V+0#L@L@V+>@'@'@C#L@L@]@]@]@]@T#L@A#z#A#c#+$|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#", "4 4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j Y@L@L@L@k k l l N@L@M@M@Z@m m m m m n n n L@L@Z@o p p p p ^#L@;#;#I#q q r r r r r l#L@L@##t t t u u u u u u H H L@L@)#H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+L@L@K#-+~+~+~+~+L@L@@$6+6+6+6+d+d+d+d+d+d+j+j+9#L@S#s+t+t+t+2#L@L@2#u+u+u+3#L@3#w+w+w+w+w+7#L@7#x+x+x+y+y+x#L@f#y+V+V+V+x#L@d#>@'@'@'@B#L@A#]@]@]@]@f#L@c#c#N#|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#", "4 4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k M@L@L@k l l l L@L@N@J@m m m m m n n n #$L@L@$$p p p p p L@L@^#Z#q q r r r r r r $L@L@t t t u u u u u u H H `@L@L@`@5.5.5.A.A.A.U.U.U.U.U.U.-+-+K#L@L@%$~+~+~+4+&$L@L@*$6+6+6+d+d+d+d+d+d+j+j+}#L@L@=$t+t+t+1#|#L@L@u+u+u+u+L@L@-$w+w+w+w+x+L@L@8#x+x+y+y+y+f#L@x#V+V+V+V+f#L@b#'@'@'@'@c#L@T#]@]@]@]@L@L@f#z#|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#", "4 4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k ;$L@N@l l l !#L@L@I@m m m m m n I@I@n I@L@L@p p p i#Z@`#L@L@/#q q r r r r /#/#s >$L@L@t t u u u u u ,$H H H )#L@L@5.5.5.A.'$)$U.U.U.U.U.U.-+-+-+_#L@L@~+~+~+4+R#9#L@L@6+6+6+!$d+d+d+d+d+j+j+j+S#L@L@t+t+t+2#9#L@L@3#u+u+u+u#L@L@F#w+w+w+M#7#L@L@6#x+y+G#y+y+L@L@G#V+V+V+a#L@L@~$'@'@'@~$L@L@e#]@]@]@g#L@L@g#|@|@8@8@a@a@{${$d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#", "4 4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i W@W@j j j j j j k k k k ;$L@O#l l l ~#L@L@O@m m m m #$j#j#n n j#L@L@p p P#M@`#/#L@L@j#q r r r l#=#=#s s =#L@L@J#u u u u `@$#]$H H H n#L@L@^$5.)$;#/$U.U.U.U.U.U.-+-+-+-+<#L@L@~+~+($<#9#L@L@<#6+_$9#@$d+d+d+d+j+j+j+j+|#L@L@1#t+s#9#1#L@L@-$u+u+u+F#L@L@F#w+w+8#L@9#L@L@x+.$d#d#y+6#L@L@V+V+V+V+b#L@c#'@'@'@'@C#L@L@]@]@T#f#T#L@L@A#|@8@8@a@:$A#A#d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$", "4 5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i Q@Q@j j j j j k k k k k L@N@l l l l !#L@L@L@I@m J@*#L@*#n n n [$L@L@^#M@Z@q q `#L@L@L@/#r l#W#L@W#s s t =#L@L@=# #u )#$#;#`@H H H H n#L@L@L@;#;#}$U.U.U.U.U.U.-+-+-+-+-+<#L@L@:#<#L@|$6+L@L@L@:#:#D#d+d+d+d+j+j+j+j+j+|#L@L@4#4#|#t+t#L@L@t#u+u+w+F#L@L@9#3#9#4#M#7#L@L@f#9#6#y+y+d#L@d#V+V+V+V+d#L@d#'@'@'@]@A#L@L@f#c#N#|@+$L@L@L@1$8@:$2$L@2$d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$", "5 5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i S@L@L@@#j j j k k k k k 3$M@H@l l l l m M@L@L@L@L@L@N@{#n n n o ^#L@L@M@]#q q q q ;#L@L@L@L@L@^#(#s s t t W#L@L@L@L@L@;#,$H H H H H H o#L@L@L@4$5$U.U.U.U.U.U.-+-+-+-+-+~+[#L@L@L@:#*$6+@$L@L@9#@$d+d+d+d+d+j+j+j+j+j+s+s#L@L@L@t#t+u+-$L@L@u+u+w+w+Y#L@L@L@9#6#x+x+L@L@L@x#y+y+y+y+9#L@0#V+V+V+>@L@L@C#'@'@]@]@A#L@L@f#+$|@|@|@c#L@L@L@L@L@6$7$d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$", "5 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i R@L@L@M@@#j k k k k k 8$M@H@l l l l m m J@N@L@L@j#{#n n n n o p k#L@Z@i#q q q q q Z#^#L@L@=#(#r s s t t t t >#L@L@=#)#u H H H H H H 5.9$;#$#)$A.U.U.U.U.U.U.-+-+-+-+-+~+~+0$;#X#L#6+6+6+@$L@|$d+d+d+d+d+d+j+j+j+j+j+s+t+1#L@9#1#t+u+u+3#L@4#u+w+w+w+w+3#L@x#M#x+x+x+L@f#.$y+y+y+y+G#d#0#V+V+V+>@y#d#C#'@'@]@]@]@C#c#T#|@|@|@|@|@z#6$L@L@A#7$a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$", "6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j R@L@L@L@M@8$h#k k Y@N@N@H@l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+1#|#|#t+t+u+u+u+L@L@3#w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$", "6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j R@L@L@L@L@L@L@L@N@~#l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+1#9#E#t+t+u+u+u+2#L@L@F#w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$", "6 6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j @#8$;$;$;$Y@h#l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+2#9#t#t+t+u+u+u+u+t#L@L@5#w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$", "6 7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 0 a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t#L@t#t+t+u+u+u+u+u+3#L@4#w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$", "7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t#L@E#t+t+u+u+u+u+u+u+L@L@F#w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$", "7 7 7 7 7 8 8 8 8 8 8 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+1#L@L@t#t+u+u+u+u+u+u+3#L@3#w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$", "7 7 7 7 8 8 8 8 8 8 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+|#L@L@9#-$u#u+u+u+t#4#L@F#w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$", "7 7 7 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+s#L@L@L@L@L@L@L@L@L@4#5#w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$", "7 7 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+E#4#L@L@L@L@3#-$5#w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$", "7 8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$", "8 8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$", "8 8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f f f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$", "8 8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f b$V@c$c$b$g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$", "8 8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e d$X@L@L@L@c$g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u H `@o#n#n#H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$", "8 9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e P@X@e$P@P@c$d$g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u p#n#L@L@L@o#5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$", "9 9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e P@L@P@f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u )#;#n#)#o#n#5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "9 9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e b$L@X@f f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t u u u u u u )#L@o#H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+D#S#s#|#|#|#E#1#t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "9 0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f M@L@e$f f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t u u u u u u )#L@L@H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+f$:#9#|#|#9#L@L@L@9#1#t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "0 0 0 a a a a a a b b b b b b c c c c d d e e e e e e f e$L@L@d$f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s t t m#t u u u u u u H ;#L@n#H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+!$9#:#}#j+j+s+t+t#9#L@L@9#u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "0 0 a a a a a a b b b b b b c c c c d d e e e e e e f f M@L@X@f g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s t W#;#=#u u u u u u H )#L@L@)#H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+f$L@S#j+j+j+s+t+t+t+t#L@L@3#u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "0 a a a a a a b b b b b b c c c c d d e e e e e e f f d$L@L@V@g g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r s s t t L@L@,$u u u u u H H o#L@L@H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+|#L@S#j+j+j+s+t+t+t+t+t+9#3#u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "a a a a a a b b b b b b c c c c d d e e e e e e f f f e$L@L@%#g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r s s t t ##L@L@`@u u u u H H H ;#L@$#5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+|$L@f$j+j+j+s+t+t+t+t+t+t+v#u#u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "a a a a a b b b b b b c c c c d d e e e e e e f f f f c$L@L@g g g g h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r s s t t t W#L@L@u u u u H H H p#L@L@o#5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+@$L@:#j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "a a a a b b b b b b c c c c d d e e e e e e f f f f f L@L@Q@g g g h i i i S@R@L@j j 8$M@L@V#k k k k k V#O@L@L@N@H@l m m m m T@Z@L@n n n n {#[$j#p p p p /#^#L@q q q r r r r r s s t t t t =#L@=#u u u H H H H )#L@L@g$5.A.A.A._#;#$#U.U.U.-+-+-+-+-+r#:#L@L@Q#4+4+6+6+6+6+6+6+d+d+d+d+d+D#9#L@D#j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+w#7#L@L@L@L@f#d#.$y+y+y+V+0#f#d#V+V+>@'@y#c#C#'@]@]@z#T#c#A#|@|@|@|@|@8@8@7$6$L@L@{$d@d@d@d@d@o@o@o@o@o@o@y@y@h$i$c#j$A@A@A@k$l$L@C@C@C@C@m$n$L@o$D@D@E@E@F@F@F@p$q$L@q$r$G@G@G@G@U@s$t$q$U@-#,#,#u$v$L@w$U#U#U#U#U#U#x$v$y$<$<$<$a$a$z$A$B$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "a a a b b b b b b c c c c d d e e e e e e f f d$P@P@P@L@L@Q@P@P@C$W@i S@R@L@L@N@@#N@L@L@L@k k k k V#N@N@O@M@L@L@M@m m m J@Z@L@L@N@n n {#N@L@L@j#p p k#;#L@L@^#q r r r r r r s s t t ##=#=#;#L@;#=#=#n#]$H H H n#L@L@5.A.A.'$;#L@L@4$U.U.-+-+-+-+%$<#[#Q#L@L@L@4+6+6+6+6+6+6+d+d+d+d+d+d+s#L@|#j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+5#x#9#7#7#9#L@L@L@x#y+y+y+G#f#L@L@b#V+>@y#c#L@L@C#]@]@B#L@L@L@T#|@|@|@|@8@D$A#N#{$L@L@L@d@d@d@d@o@o@o@o@o@o@y@y@E$c#L@L@k$A@k$l$L@L@L@C@C@F$G$L@L@L@H$D@E@E@F@F@I$J$p$n$L@L@t$G@G@G@s$v$L@L@t$-#,#K$L$L@L@L@M$U#U#U#U#N$v$L@L@x$<$<$a$a$y$L@A$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "a a b b b b b b c c c c d d e e e e e e f f e$L@L@L@L@L@L@L@L@L@Q@S@R@L@L@L@L@M@M@N@Q@M@;$k k k 3$L@~#l l H@M@L@L@I@J@Z@M@N@L@L@Z@#$Z@M@M@L@L@k#]#^#^#^#L@L@I#r r r r r r s s t t t m#)#>#L@L@,$)#)#)#H H H H ;#L@n#A.}$;#$#$#L@L@K#U.-+-+-+-+%$;#[#~+~+<#L@L@6+6+6+6+6+6+d+d+d+d+d+d+D#L@L@}#j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+Y#9#9#M#x+x+x+6#L@L@.$y+G#f#f#9#L@L@G#O$f#f#L@L@L@]@T#c#A#c#L@L@+$|@|@|@8@D$c#N#a@a@P$L@L@d@d@d@o@o@o@o@o@o@y@E$c#Q$L@L@c#A@i$c#G$L@L@R$F$n$q$R$L@L@q$D@E@E@F@F@S$L@I$F@G@L@L@t$G@r$v$v$v$L@L@T$K$U$q$L$q$L@v$U#U#U#M$v$v$q$L@L@<$<$a$a$a$L@L@V$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "a b b b b b b c c c c d d e e e e e e f f f f f f g Q@L@L@g h i i W@&#i S@L@L@N@@#j j h#V#k k ;$L@~#l l l l K@L@L@I@T@T@m I@L@L@j#M@*#o k#L@L@M@^#`#q /#L@L@(#r r r r r s s t t t t u u )#L@L@u H H H H H H 9$L@L@4$$#$#q#U.K#L@L@U.-+-+-+-+%$;#;#~+~+~+:#L@|$6+6+6+6+6+d+d+d+d+d+d+j+s#L@L@j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+5#9#L@M#x+x+x+y+d#L@f#y+y+0#a#V+d#L@L@d#f#H#'@d#L@L@c#B#z#]@A#L@c#|@|@|@8@D$c#c#a@a@d@6$L@W$d@d@o@o@o@o@o@o@y@y@E$z@z@L@L@G$c#l$k$A@L@L@q$q$X$C@D@L@L@n$E@E@F@F@S$L@n$F@G@r$L@L@Y$G@Z$Z$U@`$L@L@U$q$U$,#,#q$L@ %U#U#U#.%+%<$L$L@v$<$a$a$a$x$L@L@B$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "b b b b b b c c c c d d e e e e e e f f f f f f g g M@L@Q@h i i i i i i Y@L@L@V#j j k k k k 8$L@O@l l l l l I@L@L@T@m m n *#L@L@Z@#$o p P#L@M@k#q q q P#L@;#r r r r r s s t t t t u u u =#L@=#H H H H H H 5.g$L@L@;#}$U.U.U.[#L@$#-+-+-+-+-+[#L@L#~+~+&$L@<#6+6+6+6+6+d+d+d+d+d+d+j+j+L@L@|#s+t+t+t+t+t+t#3#3#3#3#3#3#3#v#5#w+w+w+x#L@7#x+x+x+y+y+L@L@x#y+V+V+V+V+f#L@c#y#'@'@'@f#L@f#z#]@]@|@f#L@N#|@|@8@8@N#L@2$a@d@{$L@P$d@d@o@o@o@o@o@o@y@y@y@z@z@@%L@L@G$#%A@A@F$L@L@n$C@C@D@H$L@L@m$E@F@F@F@q$L@r$G@G@t$L@$%G@U@U@U@U@T$L@L@L$K$,#,#,#L@L@N$U#U#U#<$<$<$v$L@V$a$a$a$a$y$L@A$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "b b b b b c c c c d d e e e e e e f f f f f f g g d$L@L@&#i i i i i i j R@L@M@j j k k k k h#L@L@H@l l l l m I@L@L@m m n n j#L@j#n o p p j#L@I#q q q q j#L@I#r r r r s s t t t t u u u u ;#L@]$H H H H H 5.5.n#L@L@A.U.U.U.U.$#L@_#-+-+-+-+%$L@L@~+~+&$L@|$6+6+6+6+6+d+d+d+d+d+d+j+j+}#L@L@%%t+t+t+t+t+s#3#3#-$t#4#L@9#F#w+w+w+w+x+L@L@w#x+x+y+y+G#L@L@G#V+V+V+V+V+L@L@C#'@'@'@]@L@L@e#]@]@|@|@L@L@+$|@8@8@:$L@L@a@d@{$L@W$d@d@o@o@o@o@o@o@y@y@y@z@z@z@j$L@L@A@A@A@C@&%L@q$C@C@D@D@o$L@q$E@F@F@F@p$L@t$G@G@t$q$$%G@U@U@U@U@U@t$L@U$,#,#,#,#.%L@q$U#U#U#<$<$<$<$L@L@z$a$a$a$a$A$L@y$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "b b b b c c c c d d e e e e e e f f f f f f g g g P@L@L@W@i i i i i j j N@L@R@j k k k k k 3$L@N@l l l l m m Z@L@N@m n n n L@L@*#o p p p L@L@/#q q q q L@L@/#r r r s s t t t t u u u u u L@L@)#H H H H 5.5.5.;#L@4$U.U.U.U.*%L@L@%$-+-+-+-+L#L@<#0$<#X#_$6+6+6+6+6+d+d+d+d+d+d+j+j+j+f$L@L@t#t+t+t+t+t+u+u+u+u+u+L@L@3#w+w+w+w+x+6#L@9#x+x+y+y+y+x#L@L@V+V+V+V+V+0#L@L@~$'@'@]@C#L@L@]@]@|@|@g#L@L@|@8@8@a@2$L@A#=%P$c#7$d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@R$L@G$A@A@C@C@R$L@R$C@D@D@D@R$L@R$F@F@F@F@J$L@$%Y$q$t$r$G@U@U@U@U@U@-#L@L@w$,#,#,#U#L$L@U$U#U#<$<$<$<$x$L@L@a$a$a$a$a$L@L@z$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "b b b c c c c d d e e e e e e f f f f f f g g g g Q@L@M@i i i i i j j @#L@L@Y@k k k k k k M@L@K@l l l m m m N@L@I@n n n {#L@L@-%p p p ]#L@L@q q q q (#L@L@r r r s s t t t t u u u u u )#L@L@H H H H 5.5.5.5$L@L@K#U.U.U.U.K#L@;#-+-+-+-+~+:#L@;#X#;%6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+|#L@L@t#t+t+t+t+u+u+u+u+u+t#L@L@F#w+w+w+x+x+7#L@7#x+y+y+y+y+d#L@d#V+V+V+V+V+B#L@f#'@'@]@]@B#L@A#]@|@|@|@N#L@A#8@8@a@a@6$L@c#c#W$d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@c#L@i$A@C@C@C@q$L@&%D@D@D@D@q$L@S$F@F@F@r$L@L@J$q$$%G@G@U@U@U@U@U@-#u$L@L@,#,#,#U#U#q$L@.%U#<$<$<$<$<$L$L@>%a$a$a$a$x$L@L@a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "b b c c c c d d e e e e e e f f f f f f g g g g g X@L@Q@i i i i j j j 8$L@L@k k k k k k l L@L@~#l l m m m T@L@M@n n n n *#L@M@p p p p P#L@^#q q q r I#L@^#r r s s t t t t u u u u u u o#L@;#H H H 5.5.5.A.}$L@L@*%U.U.U.U.<#L@<#-+-+-+~+~+L@L@:#($6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+|#L@L@t#t+t+t+u+u+u+u+u+u+v#L@L@5#w+w+x+x+x+L@L@8#y+y+y+y+y+L@L@b#V+V+V+V+'@f#L@B#'@]@]@]@f#L@T#|@|@|@|@c#L@,%8@a@a@a@L@L@6$=%d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@k$L@L@#%C@C@C@F$L@L@H$D@D@D@m$L@L@r$F@F@F@S$L@L@'%G@G@G@U@U@U@U@U@-#,#U$L@v$,#,#U#U#M$L@L@U#<$<$<$<$<$<$q$L@x$a$a$a$a$y$L@A$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "b c c c c d d e e e e e e f f f f f f g g g g g h L@L@+#i i i j j j j Q@L@;$k k k k k l ~#L@L@~#l m m m m N@L@*#n n n n j#L@Z@p p p q ^#L@P#q q r r ^#L@I#r s s J#t t t u u u u u u H n#L@n#H H 5.9$o#A.A.4$L@$#U.U.U.U.-+;#L@K#-+-+0$Q#r#L@L@&$6+6+6+6+6+6+@$@$d+d+d+d+j+j+j+j+j+s+|#L@L@|#t+t+u+u+u+u+u+u+w+4#L@9#w+w+x+x+x+M#L@L@6#y+y+y+.$d#L@L@0#V+V+O$'@'@L@L@H#]@]@]@z#L@L@z#|@|@|@z#L@L@)%a@a@a@{$L@L@{$d@d@d@o@o@o@!%!%o@y@y@y@z@z@z@A@A@A@j$L@c#C@C@C@C@X$L@G$D@D@D@E@~%L@q$F@F@F@r$'%L@L@G@G@G@U@U@U@U@t$-#,#,#q$L@ %,#U#U#U# %L@v$<$<$<${%{%<$B$L@L@z$a$a$a$x$q$L@>%a$a$a$z$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "c c c c d d e e e e e e f f f f f f g g g g g h +#L@L@S@i i j j j j j L@L@8$k k k k l l ~#L@L@O#m m m m I@L@j#n n n n o L@L@k#p p q Z#L@L@`#q r r r L@L@/#s ]%^#m#t t u u u u u u H H L@L@;#H 5.]$;#}$A.A.;#L@[#U.U.U.-+%$L@L@K#%$[#;#r#Q#L@L@<#6+6+6+6+*$|#|#d+d+d+d+j+j+j+j+j+s+t+E#L@L@L@1#u+u+u+u+u+u+w+Y#L@L@3#w+x+x+x+x+6#L@L@6#y+y+8#L@9#L@L@V+a#d#d#'@C#L@L@]@]@]@]@T#L@c#|@|@|@|@g#L@L@a@a@2$6$^%L@L@P$d@d@o@o@/%P$P$o@y@y@y@z@z@z@A@A@A@A@R$L@R$C@C@C@C@G$L@n$D@D@E@E@t$L@t$F@r$n$t$t$L@L@$%G@U@U@U@s$q$w$,#,#u$L@L@u$U#U#U#U#L$L@v$<${%v$y$<$a$V$L@L@a$a$B$A$A$L@L@x$a$z$A$y$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "c c c d d e e e e e e f f f f f f g g g g g h i &#L@M@i i j j j j j Y@L@L@h#k k k l l l ~#L@L@M@J@m m I@L@Z@n n n n o k#L@L@p p q q /#L@L@q r r r /#L@L@;#^#^#J#t t u u u u u u H H H L@L@L@;#L@$#5$A.A.*%L@L@K#U.U.-+-+K#L@L@L@L@[#~+~+R#L@L@L@@$6+*$L#L@f$d+d+d+d+j+j+j+j+j+s+t+t+1#L@L@L@3#u+u+u+u+u+w+v#L@L@L@F#x+x+x+x+x+6#L@L@9#d#9#f#a#d#L@L@f#c#C#'@'@d#L@A#]@]@]@]@A#L@A#|@|@|@|@A#L@L@6$c#N#d@7$L@L@L@{$o@/%^%L@^%o@y@y@y@z@z@z@A@A@A@A@A@L@L@&%C@C@C@C@L@L@o$D@E@E@F@L@L@L@t$q$$%G@'%L@L@q$Z$U@s$t$q$u$,#,#,# %L@q$U#U#U#U#U#L@L@L@L@q${%<$a$a$>%L@L@y$y$q$x$x$L@L@q$A$q$z$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "c c d d e e e e e e f f f f f f g g g g g h i i Q@L@R@i j j j j j j ;$L@M@k k k l l l l l M@L@L@L@O@N@N@{#n n n n o p Z@L@j#p q q q j#L@j#r r r r /#L@L@;#W#t t t u u u u u u H H H H ;#L@L@L@]$A.A.A.U.K#L@;#U.U.-+-+-+K#L@L@:#0$~+~+4+4+9#L@L@L@L@L@:#!$d+d+d+d+j+j+j+j+j+s+t+t+t+t+t#L@L@L@9#-$t#t#3#9#-$v#L@L@M#x+x+x+x+x+G#L@L@L@9#6#V+V+L@L@L@B#'@'@'@'@c#L@C#]@]@]@]@L@L@g#|@|@|@8@A#L@L@6$7$d@d@d@c#L@L@L@L@L@6$(%o@y@y@y@z@z@z@A@A@A@A@A@#%L@L@C@C@C@C@o$L@L@D@E@E@F@F@L@L@L@n$r$G@G@Y$L@L@L@L@L@L@'%_%,#,#,#,#v$L@U$U#U#U#U#U#L@L@q$V$<$<$a$a$a$>%L@L@L@V$a$a$x$L@L@L@V$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "c d d e e e e e e f f f f f f g g g g g h i i i L@L@W@j j j j j j k N@8$h#k k l l l l l l J@N@L@L@O@{#n n n n n o p p j#P#i#q q q Z#^#P#l#r r r r l#;#>$J#t t t u u u u u u H H H H H )#L@o#9$A.A.A.U.U._#q#U.U.-+-+-+-+r#:#r#~+~+~+4+4+6+*$:#L@L@<#!$d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+2#3#L@L@L@4#v#Y#w+w+4#L@4#x+x+x+x+x+y+y+d#L@x#a#V+V+V+L@f#:%'@'@'@'@H#A#C#]@]@]@]@T#A#g#|@|@|@8@8@{$c#2$a@d@d@d@d@=%6$L@L@P$(%o@o@y@y@y@z@z@z@A@A@A@A@A@A@X$n$m$C@C@C@D@R$n$m$E@E@F@F@F@t$J$I$G@G@G@G@G@$%q$L@q$'%Z$-#,#,#,#,#,# %M$U#U#U#U#U#<$v$y$+%<$<$a$a$a$a$x$L@y$B$a$a$a$x$q$y$B$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "d d e e e e e e f f f f f f g g g g g h i i i W@L@M@j j j j j j k k k k k k l l l l l l m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+L@L@8#x+x+x+x+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "d e e e e e e f f f f f f g g g g g h i i i i &#L@8$j j j j j k k k k k k l l l l l l m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+F#L@L@M#x+x+x+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "e e e e e e f f f f f f g g g g g h i i i i i X@M@j j j j j k k k k k k l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+7#L@x#x+x+x+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "e e e e e f f f f f f g g g g g h i i i i i S@L@8$j j j j k k k k k k l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+L@9#M#x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "e e e e f f f f f f g g g g g h i i i i i i R@M@j j j j k k k k k k l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+8#9#M#x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "e e e f f f f f f g g g g g h i i i i i i Y@M@@#j j j k k k k k k l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+w#4#w#x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "e e f f f f f f g g g g g h i i i i i +#R@M@@#j j j k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+9#9#3#3#7#4#4#M#x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "e f f f f f f g g g g g h i i i i i i L@N@@#j j j k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+v#L@L@L@L@9#8#x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "f f f f f f g g g g g h i i i i i i j Y@j j j j k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+F#F#6#6#M#x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "f f f f f g g g g g h i i i i i i j j j j j j k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "f f f f g g g g g h i i i i i i j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "f f f g g g g g h i i i i i i j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "f f g g g g g h i i i i i i j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "f g g g g g h i i i i i i j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "g g g g g h i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "g g g g h i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "g g g h i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "g g h i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "h i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "i i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "i i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "i i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "i i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "i i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "i j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "j j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "j j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "j j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "j j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "j j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "j k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "k k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "k k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "k k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "k k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "k k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "k l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "l l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "l l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "l l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "l l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "l l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.A.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "l m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "m m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.5.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@y@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "m m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H H 5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "m m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@o@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "m m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$", "m m n n n n n n o p p p p p q q q q q q r r r r r r s s t t t t u u u u u u H H H H H 5.5.5.A.A.A.U.U.U.U.U.U.-+-+-+-+-+-+~+~+~+~+4+4+6+6+6+6+6+6+d+d+d+d+d+d+j+j+j+j+j+s+t+t+t+t+t+t+u+u+u+u+u+u+w+w+w+w+w+w+x+x+x+x+x+x+y+y+y+y+y+y+V+V+V+V+V+V+>@'@'@'@'@'@]@]@]@]@]@]@|@|@|@|@|@|@8@8@a@a@a@a@d@d@d@d@d@d@o@o@o@o@o@y@y@y@z@z@z@A@A@A@A@A@A@C@C@C@C@C@C@D@D@D@D@E@E@F@F@F@F@F@F@G@G@G@G@G@G@U@U@U@U@U@-#,#,#,#,#,#,#U#U#U#U#U#U#<$<$<$<$<$<$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$"}; gtkboard/sounds/000077500000000000000000000000001153150217100141625ustar00rootroot00000000000000gtkboard/sounds/Makefile.am000066400000000000000000000003331153150217100162150ustar00rootroot00000000000000gtkboard_SOUNDS = highscore.ogg illegal_move.ogg machine_move.ogg user_move.ogg won.ogg lost.ogg EXTRA_DIST = $(gtkboard_SOUNDS) gtkboardsoundsdir = $(datadir)/sounds/gtkboard gtkboardsounds_DATA = $(gtkboard_SOUNDS) gtkboard/sounds/Makefile.in000066400000000000000000000145671153150217100162440ustar00rootroot00000000000000# Makefile.in generated by automake 1.6.3 from Makefile.am. # @configure_input@ # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 # Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_HEADER = $(INSTALL_DATA) transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_alias = @host_alias@ host_triplet = @host@ EXEEXT = @EXEEXT@ OBJEXT = @OBJEXT@ PATH_SEPARATOR = @PATH_SEPARATOR@ AMTAR = @AMTAR@ AWK = @AWK@ CC = @CC@ DEPDIR = @DEPDIR@ GNOME_CFLAGS = @GNOME_CFLAGS@ GNOME_LIBS = @GNOME_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ PACKAGE = @PACKAGE@ PKG_CONFIG = @PKG_CONFIG@ STRIP = @STRIP@ VERSION = @VERSION@ am__include = @am__include@ am__quote = @am__quote@ install_sh = @install_sh@ gtkboard_SOUNDS = highscore.ogg illegal_move.ogg machine_move.ogg user_move.ogg won.ogg lost.ogg EXTRA_DIST = $(gtkboard_SOUNDS) gtkboardsoundsdir = $(datadir)/sounds/gtkboard gtkboardsounds_DATA = $(gtkboard_SOUNDS) subdir = sounds mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = DIST_SOURCES = DATA = $(gtkboardsounds_DATA) DIST_COMMON = Makefile.am Makefile.in all: all-am .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && \ $(AUTOMAKE) --gnu sounds/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) uninstall-info-am: gtkboardsoundsDATA_INSTALL = $(INSTALL_DATA) install-gtkboardsoundsDATA: $(gtkboardsounds_DATA) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(gtkboardsoundsdir) @list='$(gtkboardsounds_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " $(gtkboardsoundsDATA_INSTALL) $$d$$p $(DESTDIR)$(gtkboardsoundsdir)/$$f"; \ $(gtkboardsoundsDATA_INSTALL) $$d$$p $(DESTDIR)$(gtkboardsoundsdir)/$$f; \ done uninstall-gtkboardsoundsDATA: @$(NORMAL_UNINSTALL) @list='$(gtkboardsounds_DATA)'; for p in $$list; do \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " rm -f $(DESTDIR)$(gtkboardsoundsdir)/$$f"; \ rm -f $(DESTDIR)$(gtkboardsoundsdir)/$$f; \ done tags: TAGS TAGS: DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) top_distdir = .. distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) distdir: $(DISTFILES) @list='$(DISTFILES)'; for file in $$list; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkinstalldirs) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: $(mkinstalldirs) $(DESTDIR)$(gtkboardsoundsdir) install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: info: info-am info-am: install-data-am: install-gtkboardsoundsDATA install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic uninstall-am: uninstall-gtkboardsoundsDATA uninstall-info-am .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am info info-am install \ install-am install-data install-data-am install-exec \ install-exec-am install-gtkboardsoundsDATA install-info \ install-info-am install-man install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ uninstall uninstall-am uninstall-gtkboardsoundsDATA \ uninstall-info-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gtkboard/sounds/highscore.ogg000066400000000000000000001244661153150217100166500ustar00rootroot00000000000000OggStsqhÛÈ:vorbisD¬€8¸OggStsqh€„Î'-ÿÿÿÿÿÿÿÿÿÿÿÿnvorbisXiph.Org libVorbis I 20020717vorbis"BCV@$sZ2f©sØ{ïB’ãBÐ{ï™AL¢BÌkì!c’àBŠcªÐU@g½—Ú{˽÷Þ{F¹gÔ{i½÷Þ{Ƚ‡Ö{ʽ÷Þ{ï½÷Þ{ï½÷Þ{%±g’{H½÷Þ{ã°GŽ{¹÷Þ{e½W’{(µ÷Þ{í½·Ú{î½÷Þ{©G{¹÷Þ{Á¨'ŠzĬ÷Þ{µ7 {å°÷Þ{ª½—^{ê½÷Þ{†½‡˜{н÷Þ{$µW’{(½÷Þ{†½WÒ{h½÷Þ{ê½—Þ{ì½÷Þ{ 4d ¢(Š¢( ² È@QÅqÉ‘ɱ  Y HФXŽåXŽ%Y’%Y’%I’¥y¦ëº®ëº®ëº.² HPQÅp Yd HŠ¥hЧˆŠ©¨Ž „†¬€\CTLÇ•\Ë5]Õu]×u]UUUUUUUUUUUU Y@Ði†©ˆ0#™BCVÈ0Å€ÐU@€IN’(9)¥”à YL’J9)¥”G1yT“ŒA)¥”RJ)¥”RJ)¥” YŽ’J9)¥”Ä(YŒ’*5)¥”G9yR“Œ=)¥”RJ)¥”RJ)¥”)yÒ’®A)¥”ä(iÐ’M=)¥”(E‰’“íI)¥”RJ)¥”RJ)¥”Jù ”RJ)¥”«=¹Ö“RJ)¥”1J Ÿ”RJ)¥”RJ)¥”RJ)¥Œ 4dgr(:‰Îg(gš‚¤BiB÷&9Jž“ÜJËÍé&œsº9åœOÎ9' Y@!…RH!…RH!…bˆ!‡œr *¨ ’J*ª¨¢Ê*Ë,³Ì2Ë,³Ì2Ë,³Î:ꨳB()´ÐZ±Æ[íÍI[s”ÒI)¥”RJéœsÎ BCV BdQF!…bÊ)§œ‚J*©€ÐU €Q2ÓQÑÑÑñÏñ$Q-Ï5Ó3EÓ4]UveY—mÙvuY·uÙ·}[·mÛ×Ýøã8Žã8Žã8Žã8Žã8† 4d „BH!…RH)¦s:!” YPGqÉ‘$I²$ËÒ,MÓ4MóDOôLOõ\QmÑö\ÏmÏõTOõTQ5UÓ5]Õu]×U]UVe×¶mÛ¶mÛ¶mÛ¶mÛ¶m[BCV:’#)’")’ã8’#I@hÈ*@@Š¢(ŽãHŽ%Y’&‰’i©–«Éžîé¢.ê@hÈ*@†hˆ†èˆ–¨‰¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢èyžçyžçyž„†¬$t$Gr,ÅR$ER,Çr€ÐU€ €Ã1$Er,˲4Mó<ÏóDOEQ4MÕTÐU €E±Ë‘$Íñ$Ñ%Q-Q5QEQEQEQEQEQEQEQEQEQEQEQEQE Y !„¾÷–bj)÷Ð8Ä ÷Z)­÷Ô@bœ÷VIb˜÷VQBŒõža„BCVQ€1È1ÄrÎQê$EÎ9*¥Æ9G©£ÔQJ±¦X3J%¦k㜣ÔQê(¥ZK«¥Tcª±€€ ¡Ð@b R )…”RÎ)æRÊ1åRJ9¦œSÎ9„Ê1ƒ)¥œSÎ)ç„ÌA圃ÐA' À ÀB(4dE'àpÏ“4M%MEÏ]×Mו4Í45QTUÍMÕTM[MU–%M3MMôTSEUMSvMS•mÏ4mÙTU]UÕ–e[vW–…Û3MÛUÕÖMÕµ}W–ma–m[˜4Í45QTUMUÕTUÝ6UU·5Qt]QUeYTUYV]W·U×Õ}M]ÕSMÙUÕ•UWõmÕ•ußt]aW]Ù×U×õ}]×}_¶u¨ªºnºª¯«®« ³.ûº¬ÛŒIÓLSEWÕDQUMUµmSUm]EWUUv=SU]Õu}]U]ÙÖDÑuEU•eQUeYu]_w]W×EUvÕu…ßT]]—mÝfÙÖuÑuu[•]ßW]W×eÝÆÖmßøLS×M×õmSU}_÷}ã—u[8FUõuÕ•…a•e_×}ß8n_7†QU}ß”]ßW]×÷mßÚºnü®mcë>¶®# ?ºo UÛ6ººÌ˜uÛ¨û:c7†Ægšºnºª®›ª«ë²­ mÝŠªªëªë »éʾ.ëºqì¾p£«ú¾*˾¯Ê²±Ûºnô}¡ðʲq̶-³­Ãpß7~®.ÇlëÆ1û¶pìÂÏ p0¡ ²"ˆ`”‚P1¡R B(¡¥Jjc2ƤTŒA)¥´BI­b BƘ„Œ1)¡„–J)­…RZ+¥ÄJi­µVkk-ÖPJk¡”ÖJ)-¦Öjl­ÕZ1&!sLJƘ”RJk¥”Ö2ç¤tÎIÉœ“RJJ±”ÔbŘ”Ì1)sRJ*1•RZ+¥ÄVJi±”[K±ÕÖb­¡”C)­•’Zl-ÕÖZ¬µb BƘ”Œ9)¥”ÖJ)­UŒI霓’1'¥”ÒZ))ÅÌ9)™sR:礔RZ+©ÄJ‰­¤[(¥Å[­-µVK)-–’Z,¥´Öb«µµT[(¡µRJŒ¡”[Œ¹¶k ¥ÄXJi±”[l±æc®¡”ØJ)±•RZl±Õ[«µµ–kK­Ö[­µÕÖk­½§ÖjM-åØZ«9ÖÖc­¹÷PJk¡”ØB)1¶Öjm1ÖJ‰­¤[)¥Å[­­ÅšC)1–RZ,¥ÄØb¬9ÆVkj­Ö[®)µšk­½×Vco­ÕÜZ¬¹µTk­µ÷Z[o 8˜P Y DÆ(Å„¦œƒÐ£˜s*¦œƒPJ¥˜sJ霃PJJsJI)„PJJ­…PJI©µ lДX Ð•@*`ŒRÎA))ÖF!ç ”’R­ RÎA(%¥Z3ç ”’Rk9gÎA(%¥Öjî ”’Rk±õÞA(%¥ÖZ뽤’Rk1Æ|I)¥ÖZ‹1•Zk1ÆZkª¥Öb¬µÖ$l­=÷ÞƒNÙœsν!œ2<Á¨À†ÕNŠÆ Y dÆ dRÈ „RH)„”RL(…†¬¢c „B!„BH „B!„B!„B!„B!„B!tÎ9çœsÎ9çœsÎ9þþ6hJ,PhÈJ 0F!Æ “’R‹ SŒA(%¥klcB)­Åc圄”Z‹±Ö\+ç ¤ÔZ­5çÜAH%¶ZkÍ=çBJ­ÕškÎ5ˆRb«5×tî9¤Ôb­9瞃ªµZsí½ç|O-Öœsν჋1לsî½!d«5çœ{:ájí9øàƒBkîA„ðÁÀÝà‘`ã +Ig…£Á…†¬B„”bÌ9ç „B¤cŒ9ç„Bˆ”bŒ9眃BcŒ9ç „B(¡bŒ1眃B!dÎ9ç„B¥”Ì9眃B¥”Ò9!„B(¥”R:ç „B¥”RJ!„B¡”RJ !„B!”RJ)!„B(¡”RJ)%„B¥”RJ)¥„B(¥”RJ)¥”B)¥”RJ)¥”B)¡„RJ)¥”RB %”RJ)¥”RJFÐIF•EØhÂ… Ð•F5ÖÖZ+ƒRpˆB r­cÌið3ˆqÌCHiécÈ@i¹öRAB ̃„ÏAÐ m‚™! ÁáA%@DL‰ ¹Paq‘vq]¸ ‹»„„ ±8€pp O¼á 78A§¨ÔAÀÀqDD4‡‘¡±ÁÑáñ4ðpˆÍadhlptx|€„€OggS@^tsqh×äçÆ $$,,(«Œ„ˆƒ}‚„‚‡&%*+²¶½¿½½Á¹¡°µ¹¿ôΑ¢Rë'Nˆ Qº®¦÷¦·ý¿·ôÉeošyí{¿¦­ÍÑ žÍH ¥–-”i”5A³’z@ÈÒêÚŒ³D–±Ð_ QGQþí_Ž…”ò[$ìi&£Ç6?Ëæ^Ù4TÅ»n+iC±îé»êeÁTݯlÇ®u €ÎCä̧?î‰ožqß«]L3£ŠOë“q|U då×̳×+7P„@wÌé7Õ+ŸWô±Ù-•ܼkýhúÖPDºZ¾ŠKÒktUgkÅ9¨Ç¦:WZ€Æ±…Dˆªòº-Rk$–%Ÿñ‹¿=œ69í“Þ=)œ%–—¶{=³—ßÓíù»~eÆÑ¨õ‚!ÈCîž•Í,q:B¶íJ­~%YŸy¤I.Ùtæ ;ù‡ØÑšÈ®h%F§€á|1¿~zíµ2iÉàÈFû 'H·Ž$¶!À?h°€@ ~œþJkÄ-\:GûqÌÛt‹m¯CâuÜjÀÞEUÕØìrsQUïµfÿXÞð˜à‚^o×cÑ6¨'ÁTÅ#(WJ^l j‡x­û¹&£Ý!I]©kæ3uÚìǪ̈ Í­¢cë›Þ4Â|üg¦æy©Œ²K¦Ro•± ˜<^œ~³›"aUmi£^ÿË2¦Sâsþ\Å·ðj €@–ªªþ;LKŒW ¹š}¿ô´Ä¼P<šRJ\1JŠ 8‡PÍ`H^ÝïÀ†k[*CU ×’…ÂëŠ5.DmÞOI1X¥v$ð$Rº§gr:¼(Ð xX$`~¬~sœ"o¡×9RÇ9®ËŸ×cØ«PU•ž…â:¿ÚUøô¦qq7Y"’òÃßg|Ë–·¢¸µÐu¡V@žEEœT4•i¾ìª¼-áÒéŒ00׊ ÚW@Š>Ã’( °ht ]™: :¡Q,¥Ú—âMÀX<,€^¬þŽSÒ-t¢#&#N€›[©†kTU¥€´@:?î\ÊI§€û~r¨Z›kñSVn'‰[*P”âM:tDø€U‹+HÀÔ¹+øšŸ|¦'©hˆ:QA9Ø%9ÐDsØ¿²&r6 |&f"H&XÓ ˜@!4¾¼þ®säeèd[Úˆ×M§Iun ïEߌ’-ªª’šnäütØz碔 ƒ<%¶¾°q;-…ÃÅ©÷t!ÅtÑ‘©•€zM·ëy,U!ËW»FO8ü†ap©›ï–DGæ ð  ZJZ€¿’,è`:^¼þ2sx„^t¤‹s¼U¼LIBh¢ª*7HZœmIÝi,¸d[+*¡¼sâ± ÊM±Uǘ ¼Ôeß›(£‚‹(«»»úmrø¤w+ÖÒlK-ÏÄ™yê̬taiÁ6ÖÂ#$.ÑE€ 4@&[ +Ñ Ð0 ^¼~#¿Ä¼B§9Òq¼Ê¾ä1AcwAUUµðFnˆšEði±<¡Òd1}£‡ˆ-[ýXº“Ô6º8 ÏAýZrê]DØ nŒÃ L’Ów"Å3ò o•z%/Ž«åt´¦é:3t`‚v1¯Š € ÐÀ,@~¼~SžÂ%\¢#9Þ pKD àj`稪J ¾ê·®»Cg« $Ûˆ*]'€™±ò‰±ÒY¦Ò((éÐ[ae,%îJPMÚ¯”ÓwaîPïRéðJyrÔÞ»í'›íPU_¢k$˜A@ pÃ3áaz蔀†À4@6»~“œb.¡i£N€[égh°*QUU4‰%¥…óéiŽðÂtçxîW¼[&ŸmhÀxgù*Ñ?-݈ž‡¥£®ª¼þ¶ò¡‹ýL}ßíâ^âë-¦»¼Û« ìïÊhA^ÆÂ‰±6‚`z¨0Áx˜@¯n ~á™ó _è (`àdkøC—ûôw$£ñ¡ÉÒÄtñbãŒv+?*—³ëÍ„ïy«ª€özñ&K:ågÏómÝŠ%GüŽgÎz ŒíÔ]ltÄ Œ mÀؙŻ?Ùæñ ÒiÇcà3ùJüÐ*jÃ*„íK¶{ÿUFÃã¹M`Ð økèÛÑ[CrÓ– ǫ̂i%”}rz»>ð³ç.d?GÓ’BO '@çx äaïØ”0@Õ~‘À¹‚]Ïði@ykÉ’v# Ù4´Í¿sé%P:gì`|/ªcˆÈÉšD,o0Ôxƒ)@·l‡¸x¾•€wUN2%al Ê^¹èîÝáv/Ü »9ïpÈÐCÛ$’QÓUŸL.„À/‡ð;°ã 8EJm³€U&$>Ì>ËgÚ–2Ì¡'àæyß¿\3ܸdA‚`óPU)¿€Ò5 ì«¶ «™Åe1T(XmÉ09f¦t € ˆÂ}Œm¬ Øw[˜ò .…ȵÃP×BáÙ’Øh~~—ɱ.Ø4ÕÿÇÏ$䥽ïŬwISÛÈ¡Àî‚>Fo–AmE)S3UázÒŒáÜðc,ÖBõo 0eÞ ²u à°žÌîNóZ¦<ÃLxI‡vÜ¢žZž¸–ô0…Y¨»;•ÀT鞨M§Ö;¯/  ÑÔleI)ºÃÕWî½›³wDÄc8 €j½œq̨ÜCq<ùÔ À*¶Wªo JvÕ'cÞH'Ï)!‹s㎊Hs¼À9¨ð!æ´Æˆ(ivMÃLŽÄg;F+ïçÆþࣽß{‡Ž¼ÅJ  ÂÇQ¢x@Ñ ¤`~Ì>¹{×lvj'@ÇíQ“Ú“Û @twl£*—À9Ái—'‚.g®í̬ 83Ïk›tqP"(àáG•)ÍÜöÂ"ØiEØ0KËÎ¥—T ã»b®¥w7;(aõ¹—j̸Åw»×(rPòªŸÝ Wð€ƒQ—úÁHŠÓl¡ØÑªm4r-´õcľ’²·½@èÕ~p=. újD/:î®— êâZ”{m‘Û¬ ýO4П{„x^̾ÊSFáÙ¦m~­NØG\`\:†XÀP•ø   °€jDEpœÔªAiJ'àmâ4ÌH¶úø£*V¦<ŧúèpÀ¢e£âf£ì¼Éeú1ņv ª«Ïr rÖ NLØàçf£,•\êqn¥s(} ´ a"¨©I_qËXeýÝ’V%rϨ]B¤ @m¨nB ¥5\F¢+@Áež²­Rà``iømúŠlº,žÌîNóB4Ö6MÕêt€zÀ €Ïµc,`¨J<`o€ø×h; &àÐHÉ2`ïö®P(œo=ÅÇÔJ„¬eA;Æ™xéÒåaa,(pk4Ý1À Ï½Ü¥_Ôƒ«VQÒR®OŒœ£Ç½lô¶k%«•‡é4p F¾K.T ã²öØ…þôî´Ÿæ|Øø.S­BʇVxl)@QJ¿E™Ó*¸dWk ð@À4@^¼>¹ç@I‡uÌ„©L$à€‹àº6Á!6€¡*%  6é40XePàüš‚(º§s•†…æãµ"¹(\¡ÖD ùb§€þj“ kã ²R¹ØGÏÄ?¿ p£ãÄ"êy}qS-ôbÓr/¼pÿêuÍÜs‡½î‡¢ÉOü¬Öÿ0äÉÙãVEΟËÌ.ãµ²â h~(N£íÝl[Y@¥âµ6)§œ*„4ÍÔÊNÌ_Xèð€ž¬¾¤ç°RÉu¦AÅt€@VØK±Yç `T¥èà~ Ù•V‚†PÀ¢ÔAN†8 –Uì$ ¢œ˜tå}Ï$åR€Æ% ž¬váII(lõ¹Ðáåá[¾YÆk¾ìÚŽŠ‰I¤¨ƒª‰‘}pÔ†âE¨X.*·¥u-ìZ4M¥ûù”DJ@=Ä4$ÐB:àŸ¯!5 Á'JK¾ed JL€†àÁ^œ¾›k¬4$?~7L¸@ Ð÷ÀÞ@RABlCUZÀWÍmhe (¯‚{&^À“cA¡ €žYDx¥c¾=/µBf6ÕA( ¿Óú ˆvŒ Ÿ§%ˆoŒ@é<½+î}úòˆT™UYž±§¦ŽvE·qß—Ã. Žß›P¿) € þ›¾±[’5D?þMm#N€9žÕn˜ žÁŦ;O†fäB@•¸SË­˜a¹@T^KˆbÀC«Ù xð¤zWèÛ‘æ[ÚàÎÚN—'{`Zðv€Êz_ l¸‘‘‘8®šžiÞÄ ¼H}s½ñž¬ã-"å€Bº¦”¾BEèKR•@1®”=Ð |`œ 4 ,hŒ¾ÂGÌŒ)Ùò±ZW{û:ðŸžúø8àsa!À XùÂLˆ Õ¹ÓÐm9á<²kÿÛU‘Sb/fQºV‹ˆðU«ÐPt Q€dpŠÔû¨‚¦aí–5ì9ç#¤xò:æ¬äfžÙ6}¦yƒ.¾ùu˜L§-W¸Ò6˜Â‚+ÌgâÜInµ *å!-ڔО:€"|¬R@ ›ðNR³N @ÌIÍO@à<L¾ÈGòdúßb“Š[½þ1B5‰©Ã¦ô篔/Àî5é~ç3žÏóƒ¨^ôP@Ø ò) rª@UÝo›·…kQ ˜·ÿ;ª¾ã°áÂ6.ÝÛ Ãë_„ä•¢ñr.£ûNKú«$z? ¾§¿é¬iL½Êý5.Ù ™ÝØW¬U÷ðëŠ î‚â€:_‚8òºtU ›SØx PÞ‹Þè'fGý¾‘O*'€RíGJÐø,À&@$xHà Ïbs Ñ U©®n0Âå3M§¢ƒÃÒ‹ ŽN$¤ @( ZûàÎ׋€:8VGA:µsÓ˜òR_ñ(jù;1,3ƒ¶EG²|Y_PyÜnÔ£ózzËúJ³Ý‹R©1^—u±D¼.FÕww‘¿xÆÏ|Â^i"@»¦WìAÄûcü%Ý:W @ u˜ð$ $OggS€œtsqh—·ÆO±®®¯··%$&$&$%&,,)--+*,+/,*,,../,-&)((+)-&''.++&$(*-.-+.*&+*,''&.)-%/+-**+,+,'*,>Œ¾±GPÑXïm·á¤ôŸÐÙUü øi w%x4 RR×@ ¨Û†‰ÊšÅŠ~Êðâ’—u4l§´ ðj1ÑF €ô«åõ¸ç½ÓÜz‚ß#‚88•¨—º\Î?’wãï›>_ÎMóO‡ýb…Û, ü‰uBZ«ŽBjàáEUqù|Ö<(·q 5±ìîêú\™zk=0˜@B ÐX>Œ>™÷aŒ¢û3µ^ÿY'Þ²ªªA¾ÿ•o6øÉ†@|%x<` `¢ªŠöZ¥rHFPRóË h ßÅ*TÆ9›@Å­^>¥˜ÉöéozæóàN©»Lü°„}W`Õ!Ä蕬#ô¼þõ0L±ì†KLè eVúnôzÈ’2~ƒ[é ×øÊòºžNPLHͭ•î1 4XŒ¾²g°† þöiÿÁ ~Ó¿ðfð˜àH€­à˜ªJóL*‰ß[°h˜Â`|Ø+^3JjmŠD¬°ÉçÈu9°ï5°o7BPzÈÌ«VSñ_'Më×4/¬P ÇæFJÁ*x=âJ• 0åB?ôïúãvJ$^!všÁé}¾ÃV‚Õè@‡ º>ŒžõÛˆahâ÷TË °ù|KwÀ?hwŸÀ¤˜†Ö3£Ê|¿`M_“”&èDên‡:o°ôh"¨‚X•ü}€tK‰€TsÔÄØB>éN¯Ã?ÔùTnP¶^˜¨æÓmÄÍZ³#è¡©*­G0G‡+Ø€cœð&[ÄòE çemóú»n^ð1o¦ ìÂ< tð€Þ{èï„0Dþ ,›ð5€ÏÌ €`åÑ U©.%0g ,¢ ð§£R¥(°xÑF¬Â^e©8ÎZ"È Cu…z Úë¦tÄS§X ‹Ã‚ŸÞϸPÀLˆ5 ;¸DÛ@ëÒ2åå6‡,ÉXçgL.Ò"˜°k€2Ìø1e´Âù¢Æœ¡ãbï«C>§|ýìxç«<Ѐ&–zvÊïhªü;œ¯TÙ ps{coÀâ4À 0$àH&䣪£É"Ñ»&¡mÇVêΰÔå´ ¢T» Ô-´tþÀ\®¨¨ŠS9åˆrUé|)Ÿ[ó6#Š¡ÐlçÜêíÁØò´Îý ¢¹®ó„©S— EQ7üé½>tPž ³o‚`•Y¹Ï“vÍ]‘b‹ ¡Ðã{™Uà; #Qx@@lçMÇá¼Çi‘€ÚÖ# è[^&‡ &l°W£¿]–‰`<¯„ë÷÷®S/N& ÐS“`õ3ÖöTk‰©¦|¥ý0昄ëÃç©Û[/r€.mÙZÖ K,¾bâ›öÍýÉO–“©”驌ëÛãT ð@¥m«eCwÚÿ+‹IÚQ2ïˆ×™:Œëƒ»Ó?¼·x þÅS*{ÞúEq¶ ¤å¦s7èÇ"§©Œëƒ¹+ïÏ­"híô”k£`¦:Ü\?~|Hx<„ý8ž|ëÆ„òUýFp@ƒÚÄ\eõØi¼Dñ†àÈß¿^a§}‘|ãŽâ¾1%Ã"MŠÔx4‡Xš)ž2ä7öMŽðöÑûRÉ[„íßì¤7õK/dàô×+ÜÝErrwül€Du‘ùV”³}æó%"!´¤„éŸ^r÷ÐÖVÛTB"á!âsîúÇ®D£×ú Á{9y3u¶ÑÚ²|ëÃûl‚0ê T;Ã)ƒ’cTÓMÖ”U¯J[϶¡÷ðÐOÃ4¼”ë˧üx™Y`D$€ô k’&g;Z‰ûõ.…BûÞØgBUº¦¡I”éÓFøM<)„L9èmk2Æ™sŒÒó‡ЇòèóMpŸ.’sYBPVZ§ŒéßÜmîÕµÅÂÈNP@Ï›$7YŽ,êˆz*ØóÄ™÷HœGŠ»|çgœglo¾Ú"ò=ŸMmÃqŽ%ÆÆ!òwáªú :ý*ú$NJ|鯮¼ýüʬ ÔiKûÓÕâuœü/ŠÅÅ·}\ö˜™Ù=áÇ‹ã—Y=„듎¸«ö1Ã0òH ÿˆj$&õÀ·ø‚ÍLX¿þ‹ðŽi¼ýgá®L”ëÿžKõæ)Ù²¹rÐ#$©¨Õ´B²®¹QɪÖÿŒüƒLžVïýº™N2tígÖ£«ü9Ùè]ÎÃ|ßï›'=™ãÙsq*ßXÎêkÜíb&.f”ëËGúªLGƒ 4ýhûÿدŷ–Ónè%_GÓrD÷I¡ö<‘ÿTX,lígžMoü·Y ¸‹bÐQÙ´Þz Í~é°.Àd˜ã!Ö…Õ q›žÌDJlëgÑå}´ ¦S†G³m™F>ØÚZ/Áï5êáùy½WÂ…©çQ+„é¯,ùU¿Ë!e£p ä Ñ&×o/³Ç³^ˆ—çë×û£¬•Aêž2ScT Œí±,-÷x+$Üé°€¶vŒóP﵄™v€Ô:Ëý!kïIŠ÷Ct¶iŒëË/æä..ECàIV04 ÁoObGŽ·» sgï´&•ŽÛff}„Œí“:ò~úû.#@=Gä_*2÷sžWâ¡]Âh¿Ô3órïF‚ˆ»ŽJ„ëßlæî®Lq@€®Ö®ººÑ晦ÙÚJvŽÿÅ®Nc”op µÍŒí¯ìcîõ ð$D ‰«ù=¶Òté–^„‡wr’•fD°|é/\ÎÄ÷àë8­A°@ë¶Ün=Æ$6õ¤ÚSyÏû¹¡Óg¡¦|éÝ{™ ³hè²µ%žöóºœ`ˆVôÿz½b+„¿„|íÝ{å™`ê!°ø=o:Œ"+ño–a«Ý Ø>$‚ûBN9ŒéßtøM¹È°†ÀÚs?ÒÒC“+ö…Êœv¯öõŒŠ½üsú_ÉŒíƒxÓÿ@P IY›þ9ÎÕ½FwËËð+¯è¥²y”̵G¶Ioç§Ó6Íݱ]•ëµ½ eÉJŒg,¨Ð”ëv÷ª²\30ë1húÌ®µ¥Rv ¹†x†L½ßÇ¡K±kežµœí»Gä›ïiAb:o íãhäaJ]4!dÌÙMû¯›}¯Ò×ý| ›¦”¦„éS/mï—«àN@ƒju¦Mí—”~W‡{‡ÇÑïqZýÃç… N£|ëÝû66¬Z$PôÖÛ¼ ]ሣA,–pºâ]»hX¦tågÖ^þm=>ãqM†·D¥Bh’e&y;T) éŒëÓÖƒ«|K@& €z¥Ó»&ášÜÎЯÏEýGaϨ1HÓŒëK[x—>$q@€ÊŒÁq­öNíÿß©ûzØõÚoÎú¥åIb+]Zri„ëËÏf7ýÒh³gBÍIXãr¸õ§K“ªA#Zn0“~ƒ8m[Y*JŒë“Ïœ{à `Ð?&¡/ H4Q‡±sÛëÄà7ÚV¹3yP(„ç“ï#M»¾@ýæ¿ÄÛ°vɯá9ªIÊÍýŪzŽÝ)¶ŒéCgô½z”O7"Pìgv#´ª³4$¿Q «ênnê÷ƒFl寱Tl€Äu sÐ~@“¾pÄc2Þ xrlx•=òãkJúÙÆ-¸¬ŒéS#óî~Rk @E-áoúÊK~Û³ôërÒHefÉwûo_yvA™ÅÙ|ë¯ /o°ž–Z*JKT¹§¬€vRã°Gô1‘«¥úØ<±Rº4­u⥄í¯ìÌÝ.®5@¥ìï½Äõ‹u—mÌ:ŸÚÏÊjtë“—gnP'ÚA“,Ï~Ô!0ÖX‘”Ûš!¬¿±^ÝAßÞAŸYL„ë?¬vWåRî‚Z*òµùÕuoQǺju/Ëç¾Þ¥c*3ù$lçïÜ{¼åÍ€ˆ6À@M_\Z †´N»DPêkUòíþ"ÙrZë©Ð®|éŸy7õ[½6@¿ÿ°FWo)£_,ð BÖ¿÷Åÿ;HrÔ(„é“+ð½ýú‰'@kj÷Z 3™ñÂôÏ"OžÔ*Þ_=’žT[æÏ_„é/ á}waB k&©h/kcäï)TÔC7$šiƓׯ3‡–„éëo{soT±À- hŽ»ýÕ³ÇGZ§y´$$U/ýÃ3ûí,m¯Ë ;|ågT}¿Ù4 ÀÐŒ¦·¥ý%Êó—33×ÚÍГ¶ZL±Q€”q79e3|ëßÞætUß—êc\I­}ÊHÞžÓ˜Ø5HêY‡íùÑQï÷œlŸ^¬lå{?:â4FÐØãqØS]<¨{n0‹‚•ídO2˜ãC„ë“Ç˦z­‘‚ Ãì¸ëžÿ&·2Yž…òéñÿ«ú¾Ýð³*5|ç¯ò»Jì¶€¾tŸýE“Œ³Æmch ½†{èRÝÿ¤DäË÷@ŪFOggS@ätsqhWjý©1+-+./,+(*,-.,.-+.ÄÂÃÈÀºÈÆÃÌ&-**%$$(,(%&&(*+ÊÈ**ǵtë§ð^U½†6  Ñ®cûç!Vùç±ÎÌü?ø¯í×îêJä"™„ëÓwò{pÙτ΀æµIg÷TæX«wFÕµâñàf­¾tñk“p½„çÃ-¿‰){¹ˆ@}YŽxŽxÈÐ=f\I­Ní 'j¯; ¯–*ZÂÃïè|é“os?²Ñ ®v€Io˜ôpíˆS¿CÔÁŸ*¬òþimJåÍtç“NÓ³øYk}Z×Âv?§ô†Táß (Gà¬6ÏgÙåh¨ýÞ³=TôtåCv'²FaPóÅÞÛüüs{»¿WcÊàõufOëóÂïl« J|ëM+ð¦VlB #Yä?OMùoÝ[ß”šñìeþ‚ÿÝÊMàÑœÙ-|éUù¾»<•tÚÓ™h¦Z“ÖElÚ 5ùPž}õäéµRMlë'Ž© €VϸuÙ?éíþÁù®Èà2ß?øðˆ2G¦Ž0Ú„çßù]1½Ë"ë t©pÊ[CÜ÷9ÇÙÿ¢ùü“ØÎ‰³.òù|IˆlçXÂîóÑþ³°@ço"Ã,jBükJ¡„×Þ:ýço—i uu– |ë¯lï!¯;ü¡:ô'{œÈaO(MªÊ‹€ûH:SÒ¥IF껵hÕ¾õÈ1*ÒÛ «Qª>áù.0¡~ºö¢éWeÏ‚þ.ÅÇ/‰¢*Ô£~í÷J¬²bZ aµpEœÔWþ5Îuv…CäÊÍq]kâo°>ê±IÜ|úzú–h,ë3 ¹][“´4­f‹ˆáëô šp@ÑcôC´êSôœ¥³:o†œe›²$ „Ž.@ž[Žä3C4V-2âí[BúO”<Ô2a[r…€luèǰ/D @d¡&öÊËÕ=ΣDô)÷÷±ÚÐÐÕÀ¯âü9A—§¨wÀ]ðî€ßK]AèÝC*P§JbàŸq@|±ª%¸ d+rwÀñ©Ÿ­’íâåå=>ì#ßµqÏ@g>@«¿9_ß(š5kVvë“s6* •Ç f¾cýP‚á"„—¶¨V‡mªJw‹T""fkRv°ñéæ<ðžpcÁ£ÓKG$w¨xdU…Ø|ZD|Z3ÂÕÝ4|·8üd°s—¤Ö]‚g¬?&M[Æ¿ÜaÊŒ\^ÞFYÊåÎÔ¼0TI«†9í·/b°Ù¯ëp©ñSC0ÔP¾[Àï:ÛÈ U÷¸+ø®¡± žÀ|ž;Œ ÀËI3è€.$šHìbM#Ÿ‘ˆ‚^#õ«H hLàZB•§ª€šRK‹‰#€›¤Ïà!To|úS, hÔ_š8 ÷>x †ÚöÊqQýÁ¡€í¿ÞI ÀW» bjè!Ôq¸½«?Ù¤²BÛæëªuù›úì+xCû”P$>x•÷{™mÌ’ÂŒ’`ò®¥ëHVÕHžkîÑßh2 oü¨_¥}@»=½ +ø¸ <±ÓзÆÞ à±×ËZ koÓd©*#¥Ù!÷v×}Z¾>R€G*ØiÀC§–(pO/Ń´¢AÅ®tQ€¾ñPß/Âö¥ %Ÿíê¶UŽõB@Ð'ÉÆÑ´N! %i-ó]Æï¬›?9ýËô"y.¬Œõ4*”QHÐgã¼2¶“Y–fVìþ`×bû @ð·~[ÉŸŒ™QŸr›V£BÚ¿•ºjo €¯ûÑw `O¹HÕ&ßL,âªÂª&°šBÍLÙ€¬ žž1„¶­IÌËç¡àí¥  ã”åqÍð ò‡@7ý]¨?ÿ.µ(÷ïe€œ\#Ç&¸ÔPˆ¯¨a©àÍnì[èmÝê_ׄ¦ÑòC%ºÖL7î•KÕ×<ú¢éæcmîû-tø4½&:6KÎä¯ÛHC% §qÛ À³ÝY0ØI0'òŒ‘€) p40(¨š¯{‚½LNìŸ×x®A ·œH€£ý¸°Ø_ MoÚ\Jú™öö ¦Y%€åöD"àR /;ÏšuJJG,|É;¿lLÖ°n7`{ïš³:Ÿ3|ì%`ž6 `ùI8ÉD òO·ÍÜáó#BJšÏÊZåD6Pa¦’ô™á-ר2tl(EÊ@g™.,€P€ |éM—Þ»j9/@X@gH–¢­ÁL4íNzÅßõîïÖ«FX„ë“«_ý¶FÀpõ›{Zò^ë˜0¬Y=)v¯ÞØ÷ê=´Îù`7µ téÃ;á«2]Ã,Öj"бŒ¿÷%q;«·äù|ÑyøòŸfV¡ðíðX&|ë“oÇ^5Þ|J¨ €&«oÛÛ*ãé·K»0šßV¦àìUš VdéegÚ¦:ÈÍ×~ mIAc–OM±nò’QÀƒF|çgÚ®¸”‹€š¨xë"A6þ¿Í¸(QJ‚{%5µV|åMge—ï²€~Ëú,Ë™’òœAlÛ|ÎÅn®›%ƒíÓ|é÷Qöà‰X”AÐߟ˜(Œ1a‹µâT„t†þÓ§TóM[Á:ŒéëF}¯š!h|ÿü{1Ïãëó)SÅWÌÊN8¶Oôû!ž\Rþ|ç÷­íë‚ œ@Ï|lûZh-Μ>Šqñêà ù1}zºú¥ô%®0=„éCé*«ç" €þß9Ÿ? ëáiÕ+zÎAÞH¨Ã*Å¥tå•§©ÝOël$´ˆ K±ÁG©p†î9{ÅÅ®´:3\,U$|çM·tÓ÷cF‚ PYöêg…ÁçýiÈ"n5.«UM†}@ \åõ—š€Z^ ¹«¡§Nj@XцFŠSéÅerTùòƇЄ篜ܻñZ£€´˜@µçøDO‰Ü6U< "Ÿ1ÝM0¥„çÓ;ðžH™º½×|½Âÿˆ‘ÔÚ Uòû/;§ó¨K£UÞO˜ úNäçÐ,„î§Œ¢Èê`Ó-@¼Ø€ Žx ÆØyT•ϱ§ï° qõl­R­\5? ¸ItÈx¡à<œƒVE¹hþ#a9qˆ ½=/‚rŸðÝYŽ’/¾·}:ö5P­ß~: è*“.àHY’ IDý3Ô_æßhv»´:Ƽ~:Ð Ú|)ùnó»kËYõ´ƒmÍär»-?=a¦}Äÿ™ò«¶A~f%]9±¥h¦ ?( 5 6J†êÛ pñ L›¼ãF(àb!¦€Õ±&Õ^ìcröwÿj!„© ¿[¥Bp‘D‚{<tÄ©ò Õ{0‹"¢¤¤@ý¯.ëÝPìÔ ãæ¹Ì¡9qÊ,R+në*@Qµ¿Þ“j ÄíRŠÞ'ÒÄrµ eÓ¹ê£}.œ cn“²A§A¾ÁƯü:¿îØf2‚ÜS<“© *æ¨#£||Ýrã/¸[.( @Ÿ$<„러â=~”fD CÚP1µÄßϯíäçØã›‰%`IÒ‚lÌEÁtågÞ¡«ª¨iL` í{­³Hê*úuæsfx —}ÜžÖfhô:+º:Ü/ƒØ¡ñ*??þ„Ѹ1ÆÿVþú(trÍ= `N€‡yàdŽšœ@Ôuù—ôûvýÿ:ÿ 7󽯕° Š/*£Ÿ+¼ÈM F¿T€bÞØÞ-ºHP%)øK ”ÎÖ ‡§N}‡‡ér å„5Nkوϓ£$4”´^ CˆU˜þm&šÂ"æ5eƒ¿¶ªî¡Ðã‰:‹=$›¬ ¢É”ׂŠt£À[ìœ`€ ŽÜï8Ž^@Ûÿ._ÿQ¦/WðÏé»7\'¦  Hà–{pa.ìL°ªÙÏÒL”1RzòE™©Æªö(ÀzW¤–DƒW BO¼ A訑³ñ Tº÷ Pp ß`©ÿ)€ä U7±U™ÁUP(¨îÚ­ ‹/¿8-dûšX”kq[¦À©Q(”ŠÛ"“>©Le (›ÐÑÁ˜ h@OggS€/tsqh‚£³1ÄľÆËÅʼ¸Â½ÁÇ&$#$$%*)+%%#),-(%&#+-,%%%$)**%(-')(K®ü¯ikÔ§d8ê ÎÛ_›w¿Óÿ…-ý¼× @¸ˆÀðPß«>€'õ ‚8Q%®Jˆö~4sºì5ÊÊ¥o"Ô†*̉[¾;Õ¥u¨|›S¥p¢"Ÿ]øDtPNSÔƒ@ó*U¤@{ÕB|ÆPFZ`w~ä@//¥òß%ê\€> á]~h>arfIèƒw*£¢û¡üö%®€á€ÿÄè!Xk“ÞÔa¢kšÕH˜~KÉß;r¢>eM¤ Êëó„çci¶ö øXð K  $P&ÀC/À£àv¶ ÊKß-oòÆž‹JHä=o˜|›êS(®Ö*½š¿ÛŒ%kpnÖæ(ÊZ±C(WC°f‡í¡Íì2³ÚkdHÅ^>þ­=…b“£l$¤z TK]c6¾_8Ü`3ft´  +<H >KÑwÜ×_5Óñ©ºë„ÁoA¿‘•ž¯ × YàQ£k 9.ô À… bÕpÿAÙAå7+¢©1 PÕ…$µà¨3C P»ƒ‹@Tàx*@•*RÌ €ž_C @ýO À ¿càú²n‹ xÍ:wq± å9—mõý* ¹ÿr’§`B¥&µ0£Ó롟%¥#E!”3“þíBb 3¸‚8] ÜIw`»°@Lðh>K^¹÷¡É„þ‡5N©×ßû9sð[±Ÿr€gpÍE?á!è×°•Ô€>Ù€‡ç fˆLTmw×\Ik2jÝå¼úu®iГ|X-` ”à °ïê dgP"—×€R¯´ T݇P ªHP…ò;vÜÃR·èÑ"Ð̪EÔaP軲w—9íH~k‰u§þp‰—ÒRFDª‚›õeªxdù²+& öMŽ#W{ R­™úÄà•èt`˜Ð+Îüï „d°Ë_(}‘üÜ}U˜´ö^•|p`¾€ô˜<4€µ€·É ‘±õ_Ö’´ ßw9{tÑ—Vj!ŠÙ©äûá7PB‰º8 …›D%R¸wN·±Q_– 8µØ.@…¢†7pJ›«U¤W>‘ÏEW½¡®Œ®ò[Íþ9Ãh`ÿP¦‘W#àT𨠤3Q±=ðNi¥ÐP¤c³ÒE¢°ìPþ Ô©7@G{Ð`žêÍÁw2k $ìÕW§DœØ}+„ZO£.™ p{y3°ð @ˆ¥ j7£ß~.øËŒàWbõÁ£(-R‡V‰hФD @“û ^EÊ€:c]@$xPR~…ýÄ#ÔíqZEQm8Öíµ¢ùj±m²9=J¥ZæQ‡ .{ TWwðD'sÀU¤;2T4ãwl±É±CèK‚61éhàÞÊmÖW,ƠðåRÂËKQö7tÈè ¼ãÍPC¼0 ]'À ¬m­kÆ @T{hîKÒâ8Ï}hÕ(N†5Ò%³ ÜT€­(Jq)fK(€›E­NÊÏH@øñSN@ŒT ^”.(C°R”â‡xo7°Ëb·ãDŠÕw¦mQ1_hî"­y&àV.§³ JBε%ÅÂbH°f¡£ ~ÎÖÛ€ƒCœôìÑNÁÇ‚_d'úÔà¸ð0/Àºf HK¤j`À‹V€¾gf¾(ìÅ"wˆÂYõïW`"@ À‘´E€@÷(€òÖÞˆÒgpÐâ\¤rS”þÖ=›¤}¦"mï·~ÀÜñiÛpáù6ð©7^n]ufɃ|°G²r}ÿVîi)¿9÷9*t/bÀ•ȦBiŽK3]ÆÂ}³ Lp $ ð^*öá_ã8²(9Âü4îøøùBOCéf dÁwì}0à€‡k—° @šF¢º$M¾Þ’ž‚žQsX¦€ Rý*+lëp˜J]¸€}PB ðJàÚ‚±çïÚÞPþD¶ËÙh´Þ÷µ ´–ò…vN… žvv=unÙw·ñ ?¶× +æCë…5ú®&É€×b q“< ¸˜Ý›¥Q¯´«)ôõÖª?(‘Ñ|@u• IŠÑ •œ€vˆžpI®Ò›–€§ß_€B)(%û7'ðïë#Ä ¿ €; OÜ|”ŒUÃÅ/É+áß4ðN¯Á>NhðýÝÏ,¶B÷¹ÒñH”áF†è.j¶Mvà]Rø=.%,ƒ“Æ®Bst€)¦„« Ð@9]ý…Õ!hÌÁkHpk0C«v>лt8‚;Ô "àª_–‡‘n3 Pè»­µ=é‘+OïžSeî.µ)j¾·(‚iøØAc'´ø£èAÃC-ÿe:àÖ…¸%ÌíÁÛÔ|â‹\)çÊäœõ–lVÁ´ÜÚ(, |ðfm CßJT1ìáì­if%ŽÁèÀ|íÝç¢\Ðé.|d»RQ4–¤ñQgSІÞê½3çÖ=xÙtéMç¢ûó]4 €†Ó¯ÐÇÙy[+}…û¡Û¤îô²øt±„ëCçj;?ØtÊqàØ1®‰KÅÌÕ¼ [UUu¸õšdãGž«íý6@w@iÏ˶ÍÖ‰Ov!ùïtÛàÆgYù"yý7÷}ÔŒíkW}SKl„@“„ŸeÍ:½·?Ë{õe ‰÷ç]U8MNW8ÜŸƒ|ë?ÞÕûø˜kyj4GP’ÕN93숧¼BgpiG?/¬–C‹Ftégœ‹mþµ† h—T·ëY~ʾ×'ààSK4Œ¹éXpŽilãÍ—J¯.눠ÿyjò²6‘Ô¾´xd~$|R9š±Åk|å]—E7 €zn]‹ù#Ï ®¯ZÔ¿^ýܶˆ•dçgÞ}ûÃf ˜@¿ã1Žùî°˜öZ»¢]»Y颖D›ïƒâ¥|ï¯TàÀ:0C3¢½*=*/åÞñóãèM.®ç<³ ¯‚C¥pzúŽÝ?|íæû@•c 9ZŸ»—½_ß|3†q¿t÷éÛoŸ¶õB ¼Llé/g÷ÎGk…)à€æœ²–mîÕ^‚w^ui¥èã_¤XtçûS¶‹?L“@›Nqñ´e±2F£±µ¾íÅ9ÍÍFЬ|çÝ—u7ý˜ „ öõ0Œ÷c=¿›ôƒe÷¶™ÇÙÓæd?DX¦|çÝçz÷@“½žö¯Èƒ† p»‡8«pæüöQ– ädég®#¸w—65!PÇê¯Å -#òÂ?Gwë=sðôé_M82r™eýM&tïÃŽ?€ª@…&f©»-Òf˜<9ö°Cÿ$(¸ª”±?ÄíSösÇСŒéËîuîyE4ÈÅÆ@ ù¼·åÙúXrèÈ¡«–š×Îjã;ˆh¸áTéžGô €zª’î£c \­nN½wÑ|¼ËnkPöH&låÕ—U÷‹€¦ßÑm¯xÖ'ݵÔÁêDõ½>}ŽR (%lëÝ—ê P7ðËa§>$­*˜^õô1ªQ[Jƒáò¤‰?â-|é]—Þöx ËW5šé¬ìô V{yö¾Í¨JV)„íë[x/÷:$ЬºüÙìPØçë#Å]e¾ñ›q]ܳ`ñÿÔ wŠ„ïËë',~‚Ζ €ŽÕ9|^éºØ_Ç”Ð_–#ÊTþ?È_†ŸPÃϳItçŸ\{÷Ëd@_¥_ìCMÚïµV}äÒ8 ÷ãåpýfÌä4’|å“/«õâ~FзŠJ(v©ü¤ ˆ/ÎÂjzõ+\]t téßÌôÿXèîi:ÜŒ9áä.Öúâ„ù,Ϲ‡ööõaÊ]|íßÑ—ßG$Øíõ[÷ÌÇDƇæ>ÿÅÕ)2_¿ùæþ½TÅÃÃþdtéßÜ¡ûªž"Ðe'xôõ”§zÅ–‰SLùqªj•é72 ŒíŸŒâÝgH Ô¾u ¿kçä³ø×AZÆñÝ«¸úþÕM,‡Kš„ë?µÎŸd€49–,ý<*þó»«ðÞª‰VËvÈ—•ÔÁ’„¡$MOggS@~tsqhìïð*&+.*$&$$,+($#$#.,À¹»¹º½»½¼ÇÅÂÎ$%%'$%-*Å»®¸tçg\Nè¦ïê€:õFu’ΒŃ¥!äZþ‘Ãë\E$déïª Àj 4 à싪ÚÌv˜™ 9âþ˜‰ïJ?Wž‹((„íÓ¦²óˆ@=Ÿ!ªò«œÆ×uγï3²³7ò®xû7 R‹Cêb|í¯ž«ÞxP X"ÐïΖJ ióâ‹ËÊœœÖ…±s¼ð²CÀT|ç“ξ^\H G¼Ú{ XÂ#ãíÊÑö ÏJH¡¾@ŒÒlë]çb`@ >€‘çY‘pL4;¹ì`b´d!…Ý‘õ \çX캗S¬€>9f˜¦Æá§tÐדÚëjéz£|ëCçAmý_ ´%w©(*]š_†bkéã3—úµ¦§téËÏE?@ ЬÀZ%—"9ŽjìQF2ß½&ØÏÓŸÃ%È}£I(-¡ÌŒíËgçjS‚ ´û¢¡'ùÃÈŠ>ìû¥q>¶Î¢rœWö$‚Nâ>ö|Þl鯱Íg·‡Œ$ˆ@1ÇêkÚãâº/_‡¢`n­òJ‘+8d÷BK[tåßa½\=fDЪéݪQa|Æt¸Îºv96"z–¥?t寜m/AƒZšä~¥µo|ô¥ EÖ¯lW7µ!†÷Tëg1ÀΠ´eJ(Ö$+ã–û9 ðø:`²Ì‹Œë›Ïê^>&€ÀÕ?9}Ó;4ÙßWeÙÂV ÛíP B*lëÃÛQÿL SJ h QÉPï[_¿ÛŒ{Éÿßã‡Q¯ùË4™¤ÿK^&lë?QÊØ Õ ¨4×ÙF³äËŒ¢È•1/F÷vç‘¢ç'.<óò¢kšJNêï#•hš®a H®PÃÅbð°“5€ ª<ÛÇ„ÈÂë{Ï9Æ; †Ç(Sx1)¹¨;ꉽ)"U ­¢( î¢h„ I½ú7'Ö—MUi’‚ðÁ}K&w `Àã>€íåÏ€P“ï£R(ì_“‡šŠœ¹û*Ý  ÆÍÀÔF{•%d^Ï­Œ†L…|ÔÛþ¦/ u*mÞJv± 9¾õc\Ÿ–t&  °˜€þJîíï 5¬ðöƒ:qÞï.íßš> nÉËÐ f€Ç°¸èdk@í&‰ª†ÏU²%µ­E܆-¸b³Ô=· 3U h®Ôá *žK°"óØ©B»„¢”¤ó=ôª@_20‰ ²C~îïøQ;j'üM{ë±Ár¦îò%2=gnù ÆÿDÄ×;! ‘AÓÏò+ɰÓ±® ‡|C÷x ´7q´»ÚŽ×²Ž Ð0A¾:®ÁïxȆ…ןÝàvw=û̉¿áÏPC$‹†ð`ŒÀ$ŽŒ¨äÄ;£eæw]çÖßÐ`𠜋Q9‚—(|Cª¥X…J:M{(ÜiòG{ à'Ä®Dâä>Qýåµû­âò«ãvÛsjM®hWe¨NÞÝb3äÃ…f['†ì>ê3oæÏ?Û¼ «}©ÕðµKùñÁ8f- Nh&аþ.ùßQ7âŠfâíƒeHóÖ•ùØIÔø<. NJìÏDÕ§7Á¨uO¾u:ûƒ”rüy '‡]q…ã‹(Šï&ÐBßœ0;­?6ÄR\KßmmXX·ÿµ ä]…%i;Bïsô팟+WÉ͵ګ뺟z—a¹À–pyˆ—lÃN¯Ÿsƒ[¼•2/Œ0i×cÙ™Ô·†ãñ\1#˰Ïg? Æà¸;A‚4ÞÚÍÜOh0íÕ ÀN¸±˜ ÞR[ì€IóÄca€®ì• ò¨Ja!V:8Xñ<'”—½Ugt˜ŸŸ±/Š~(` ) 8ct¨`c¥1UÈk«räé,R|¬m¤w YÝ+‡â“qš°F4ÂëènêÞ~y”.ÁDoL ¿~žÑOpRãùtÙIáããÜ~ú¡Äâa5L<<`ô&À^ìHU9þžMeÞ1ê‹ó²de(÷»xû¬§•ZÏ'@%P¦J;.ü¦Z$R0»J/Ö1DÁKÀ}(Óx ¯þO¼Tà>TE/Þä,'>fÒ¹‹ )Ø}¯8ÈM¿½S™Ñ_ Ís^ªz“6úB8ö¤ymø ;:2Å–´1ŒÞBé§JtüC/Ð&^ÐïP BJfÕÏ}['þõ /¬Øä¡zJ‹ôG{•XH5 ‹?ñQ Ýüt§kO[PM!F*xV83P?ŒhЦþO`„_‚À]i›Áp0(ñÞWDI`VU ¨í`Ðãê£Y ™ÓƒÖ.¯r#Q¸öû¢ áFÂuWDX:rc¬IfñNás3VX;)?³'¾0,“mÐfLd¼„Ð¥ A:`¾*nêïQ!\9Øas' ¹–5 á`@6™‚D5/Ðt\4†dPmñ35ÂS¸Þݸ1â tMÒOn¿k&»Èޏ£°ÒÆþ*_À`>cϦCâ­_€T›öÏ€]ñÿz(5Â"¡4ý³Dg±¼Y#5˜Cqc8·V‰lDtâ¾u³(¸’pŒSH0Üe˜7÷)rnŸÁš ~ÜcX´etEzï  ^+ÈŸdá‚©Woþ”†)¥ |.Ñð .,`ï±DÕDʯ`5Yæx—}ÿÖx.CÜ»pW’ ¢Ÿ@ͨĘ665«ÁvØpêý0’@U™‡_ wo &øŠ‘×ác%¸#âàkú÷š¬û=ʶi×’ZÓê§œ1ÙÅé÷IÌ`'¾bNÛ$Nqm=GŸ¤äžÓø$=Ë¥ëõ¦FôÖ­“¹ ºs¶x_Z„€h0y€^;ùŸA1ˆ]3\®œ„i¸o74X4€‰ž;ÞÀ÷NjèuëÐf*¦<´2Ð%x€Ðö;@ŸMsP¥¸ €Ü”úÉP)P§Ä¡šâ X*yÁ|‚Jo8P«•tªo•"rkd[(= ËG¹s°cSÈ· pR}f p]zË>€–@Ï4øësŽÌÜüºì5²=Œ"``à*˜àr¥â‘в–—µ398ÆsbÒöË)b®(AåÙ€@¾Kžá×`8:Ñ‘»òö'-ü°(Ã?ÿOIà<ðºPƒe?ˆ»nÏ$#QU³.‹–j«‘,³gûM`ÎaÁ¯¬ü5˜ÀºÐÄ7øQàq«h²äl4\цP:gJ…DÀU> `;õlý ”xAÞ[ï[J„³w ôu_Ï¡[ùï.©D±“íóhPPã’o…Ì–ì„Vƒxj±2DÀ¾‹ë‹C°”܉‚ÑRѶLà<–:öÜ3i²dºqQHÓàLn3v°.èç €$QÖ7ptIÍ +Ýv ‚'Á)ÀgûpăûuÕ>?ÐXMÎþ›à4ñøÇIgkâ>¹ÒÏ…KþCê\¼¼ÂCe¡uœ¾àÌÞ°ÿNšþUW‘,~àâ€"ÄjR«=Gd{úc­l¿;<˃濘š²Ê¼'ž‰Èm\M;Ä–P²Õ‚«¥r”±±#œ9²ÙÃÂN½ªÑŸÂîahIžСX„é/tq§º¨- €–ôŽˆŠ¤ñÊÍf>çºS:C×óCÐdåGîoü]¥_@4øl7%æ¡*\æ´)|CÊž¬¢ ¤l té¯.MÎ{h1H@K’¸$å="¶y9ìùûÏÏz\L ^,Y.lå/¶­? h@àZ ¦ûDð”´AÛ¼uŸ?ûuÏ_WHÕ›-dçŽÌúß++ @o kTocšoå×Ó©žô ]û̽C|éCçb­òRØ ZKÒ±¤3Š­Œ·YŸâ°öyªß3‹œ½@¡tå/©ûÑr¶´ ÐAk·sw¯^­Û×C(JW‘ñE0g}}ôððŸÙe |鯎ynToRx ï?f0ûc9=yº¦ùNþ¾˜“¯Ë/¨(ššJvܧç+AȃB¦<¬wh0Øq5ITMKx$æ ]„XGˆÔÐ>¦¨žõú)Í$^¢n4ìÇš­«Ü^7>2‰Ñ²( ü-ýeOW\ÿ_(œò!ß÷¢KíúEªò!lCëàƒëûºŽø4N 55’œ6ìD)erµœUù1jž±'G{b’`GˆÛ£œ0s:zUÂ0ŸÑߺ?Ì6zgVµœô.‘­lˆ¿Š²–ch€§ (<þ[Þ‰ÇÀDÇÏ[È ©âuSï?®N‰-x¸ùO`!¾ì™3 ¸0@•cí«Á5#]WÕ+^P¿r /®'°X îjió66Pê€ ÐÀÏ{µÅqõX@) >+« Á‘Çaf(¤ù´,isáýÒ§êñÚ±¬ð¹>9ídP1çdº¤A­6Rr{ˆmO5ʦ‰¢‘ª·«™Æ§ÔÔX*° ÷ª.mÃú A”„ð:€ Ðð¾[ž¹÷° D7yÝÞ¾Õ&ބ}°ð Þ2Ç=H8_@vF”ˆ‘$ªÆ8Í”ûzÛµ» kþCe( è¢[îÌ¡ºepÃJ‰yÊ"ÙW;d¨£øÙj/@xHËÁ筊܉²nmº·iá5—/“Bš"&ñ±ð\%ùóƒKéiøKâùQÃv®ºM7¹JB˜"ŸÛ8²Pæ A@^[îÕïø0mC|Üþ­N|E–û±æøÂC­2P@œûgX%V$TÓWu*¦~Ž;ÿ^Óïµf±õ§©… €t).&³E©…h Àß*°q€‹Kâ=¸3«Ç.Nêã5¬SXý)ÔâÎ,'hM—=«Áô7<VÇs¹Î¥A¸ŒÂÊmèÇòÒ¬Qâ‹Æœ.;8."ˆÚ< OggSÀÔtsqh²Ài]!½ºÇ$#$$&.&ĸ¼%#$%.*»²¯±¶º·µ´ÁÁ¹¾¿¾k^ø¯„0 ›o?å÷Þ³ìÿ7¬CÇäª!À{‚°w”Ž$ªM}JôF?¿˜ÓñW§†*¦`§úŸÜâpÅ º@UQ}† eUñDÜÑÒ*Zp[‹È÷[ Ä**"T©ª:LnpÅØ Õµ¹økòû0‘T£¹¢uw>·¶Éºkô!†÷Ö}F§·¯o}ÿií¸¸ßÿ™û\zãËSå²ðÎØ¿šiÅk¡ÔyžX€P€NžkžÕ¯,!ôÆ9p`¸é ÔÉUA€LðÐÀÎX¨,Q¥rp*øÍg3´ 3k5ù øNzP¥@â„"€´@Z #¢µDšWäOÜæ¥'oÞ9âì|çjNŠ“h)D‹ÙÕÄXª!I¤IRZÜZ¦•ŒÚˆ¼’ÊÀ5LÉCZ*Á´¼¨„ªñÝ^ÈLL†Q¶+køŽñ FX‹¡£Ñ@G€À&–jŽáï uTe ½/p °4~ÆÀx¬%íRT3/r ¬‡¿ëÙêº,§Àt "_ þºâjÕUB¨ŽnXë¨öuôIôÛ÷º÷^¹%@˜¯o !QÛÂñO›¡w[äú-{âë1FHmŒluëü5¯"Œ›eÞ4)s”.›ò¿/4u†»D®Éä{ ÷7…Wëm_ë=Ò—=—ù†j­yŽ ¾w1ŠÊF×ÖwSéo)ˆï  0a\åÍÇâ»÷sj ÔöÏGÃ+|ERì+xûùà9œ(‡‘:|韜öÛ*÷k´üšhü¾±·e¨§;ê4ò«ço*Áj&”ë›öÛíõc@B@ :¯—AòäÃ9–ѵŠ&r÷å9k»Œé›ö‹ÝÇÇ´Ð €òÕ)Ô”ÖÎòÎkp,”¼Káô"˜Pž|çËÏÕ®úå$€zì¹”Áê•›ƒèðïpšãŸ¡uÍ»9|ëËfý0}oàO…ÄJ㜌î}×.J<æ\‹¯¼ù±‹Ñ,´­äóyÐ|ëË/«Ü§ghR ÐlÖ§ŽI%Ä/¼NLã°¶o{¨-Š[Þì×%¤á¡3ôzà @W ,$sHpl Ëqƒ@I ‰*¨ëì`fÒtfk­EE ðA%6FRŒÂ^Ü4ú8åf¬ ×jp1·g]d|ÆÓ*¡ˆ4|鯜·^§@Óâl¡z}ßü÷R ŽTÝ1îø„±"áYtéߎ3¾—%#¨üùjN¬}BûùÏׯÇG}·þêÕ«7Ö×CÀ_Zz³„ñ&|éŸîm¬LÔ–f€fýÂræåI*¿hm¯'¤¯_g¾¹8þåÀN ÚJnàm¦a\ ik œúçßÏÌÀ34ÕÐTNÏžèl­ÿ£E32³Çu @‰ ”Çm5p`YûÖ —¿²_.e‰Þˆ†W=°™”!ÞÜ€ïsôüâúa…£<  ú 94ø¾9Y@6´èU\Ä ?r¦-»¯™Hg¦UE\pó—W ¦˜¤[d‡84¶o%_7ƒ Ì'†YøxL˜à\>ÄwÒ0mC„Ôoxâe <hX€vv1`Duœu5½‘äX¥e ÞwwPnTà òoG`=±.©Q@üã›àz=ÙŠ GÔ.xÎu*‰U†ˆ.‹¨8 **v¡þ^v¤eýM(1BzâëƒÝ¦ó·"6¼ï‰÷™BpȳÕU§ÍW6öÂRUB7ø3Ãgêa¢31ì7ß±àu€ÀH¾[Þñ{ì0ÐÛ†yûS)Œ{%‰ÿ_[~Ág8àzÁ ,€‹1CÕFðÜjSs[M¨ª«î¬vA|¼‚VpJñ®(pß7N\¼è(àà@ÝBŸ úH<àøˆÜ2P¢t@™Ëje î¾ù¤D·ˤ°&U…8fî¤#““±ýaùÌ—¡Öò|~±æ …DÇ>¥+‘iš+)^71P 0 ¾K¾Âg2²jëõ!õŸÔ)œÀ7VCCÜ%˜A&€É$-$ª*¶2³‹ÊÄP€*E»à(p4‹·¬×ô´+egO“ !ò `E)?pÿ^ÔÖ eAâÃæ÷P-ß÷Ú W@;²[«âlc¯ÿGè0›ê‘T{Ä0®JÉ{[ÛöÀbj"DÌúæ ÛÐ8,D†U°t»(„y˜r&x}@@AÞK¾°W²0mÃ<¸éÙ­¬BâçÿÖzÑøÅµ… ÀKZ\,4º™1“”‘ªüÇŒáNˆÙû¦ù¼-Äs>`] ÞÏÒšXðÀÂЭàÊ®¼FºtèÐ×KlÇ@µJìñÃÀýœ{aŒÖ»e£/"×7«ïžþÒÞÂÝûP¤bÞ1c;Gý¬ ²­ü¡œ–$¯ðc0ÊÅ :H €~K¾€g27,:Cß3àaÌàY‚Ü–]Y2T¥¼`:D™¨‚è 8ÔjTà*\{âgkPÍÄ’&¡ÏÝôÃ1u¥ÄMý:EK!'-$L8 Û®Âe(uèuIż.òp¬"Dg(DÎZVçu$s~,+s¥²eJóÉÓ’–Û+† i©[e:¦²4òšËµL+ÆPšmv }ò Ð4€ÞK>ÄWä0ÐÓÐì¹Ò36œ?LjøýŸÇ“Ä>ÑýI !¶¸{’¨J>Ï?›ÙÏó h\[àf£u{fÁ&pUp@ˆ·_…áàMQ^ÅÀj¾ˆ¨ ¢·¿þ)(žÀˆªº´€eD¥6å8f¯Ú„±ÿzþ#.‘Æ`›Øõ¯É ýv[t–âÊ¥)à÷{±Q ¶CyÀ†‡ªè¯  &XÞK>ÄWì22½!í[=¦p»ž’J< à9 öÞ XP•%E»_þQ¢¦/À‚Íc‡ž@…ŠW;lÃÐTöu¬ƒØ}s€©7c€O›öW\že*€Ci„è×¢„„R ê…“Å»@ø„äo¹c®2GЇh….,Ei¿U*S6Ýo–éS­ƒvôxi¶NqÄÈ¥¼péŸÌÀ7˜à @žKÞð{Ò0lý»ºÄ¾]à LÜz¹3`‡Éˆª%­mbŠ•¡O•é õ·«L ¸ªàKx@ ,G†"»PpÇ€= !°gй¢ÀõÖ8® €£>ý»€ ¡PÊ|%Ƃᒋ©–%î}¬WFçi†HñÛRHtaâm~Ã+£ Ä^zMV¸,¿ÂX3m„DdðZ½2Ðtð@€þK¾Â÷Ž tABÚO¼CŒšªÙa2ÎpXþÚ¢H,>¾ôOc¢Ò@:x~;>À'¨:šñ Ó>èt˜!^Bã4À~°0æSUÎhcKUn¯!ÆK*@%\ ¸ÂŸtÀ˜t@)PKÖ&€yÈ&Bnv&ôÍ|“„6|‡ó½£¨ûCˆ\YèkÀU˳×åeé_gS¨uÊŸ{°ó°š»'ËêonÆÑ@øñz3êã2 Á×' éÐÅû¶âåÄÊF¤Fz6R­ ‚x° Ð~;>À'„eN‚œÜ~×À>—ö9f€¯ÔŸ”HFT©@?Çÿ6•jú]à\v W½pY˜ê^!6Ð áâV[ÒFݰ¸xÎZß•*üƒ¼Ÿ·8É‚3ušÏ ¨ƒ+…ò¦‰_@]·ý¢ãWØ..ïËRåÞÔeÀrúòå_Š24ïÅð¤XC2EZ%°XH8¢ÅÆèWºÎ“6B' LÀ¾;~ÀG¤VÃ'û`H,>0›4À3À$^ÀsƦ] ª´p É;ŸrƒÂ—‚£¬*)Ü^P  u*¥pAE©5Ê„ŒÔ˜!ܶ3øÍ7€ž®ösÂUÿnε ¸àóÚk_¦‚ ºoù×}v éÃÕ>mƒûÓ)lÊÉʈ¦ÂAPòÎGÞ’^}q×õ u;7Ô9×’<î×h¹ž¥zD ‹Ì–´†7\žD@ @ž;ÞØW(yo‚lµX¨“OÔêDÀL'¸ þ$€V,$UÖÀó ‘hn÷>¯ ”ߘ@¥ ¸€PpeZª”¹°^ („ˆ«(Á8w‰_»]?¨LF>špí~)@\Æ}Æ’HᥠbeÛDłޤOèÊhÖîC¡tmÃSýû¾’&O„óWªIÓ>7ÎýɳËãw¾:˜`UÇÄ2EúxÐð !°@OggSÀ,tsqh6ÀO»¾º·¶¾À¶¹¹¼¼¼¶À¯Á¶¼¸ºÀž+ÞÉ÷h0s(®òö£[`Ö±ÿ ·KØïxX%,4À/À%·èBQm´óˆPgk÷¥ü©$:Ÿà=R…úqЍoÄè ÔOÀ»%žLóú; ÊÞàisxÃæ…h  Â³'ܬ$8§W¦¤dªÔJœœºi0¸H"ælµ¿ÎuÑI,÷ èÁ EÂSªöØD£§‹Þ&3ì£ x !ÀVk Aê)RµhL³ðCì„°`ž;ÞÐwq4‚œôš<¤Û×.@b“º"cŠ*p{Õ’åø¤V)¸æàÀQX¼æPš¨Â­zc{ ÁÞ½zõß–Øò·V€ŸOм4šJ ÇžMvª ú ˆ[ @QØ ì» _ù£¦n4KâB8ˆ¾r´6¶ÈVŽv»…â³üB«,ÒäFÉîÄ å8’? àuñÊ<œ;â À¬ž;>ˆ× ä1q°6낇è- F€À@]r7€•$ªT/ ©ÎgWS Ðaié™8,YÀ-àK!‚Œª°¡ú§J!ü\}éû ïpç y]"•‡:È—8A¥ ª×›‚ÒÄîúNw‘$Æì½¼ŠÈ.üôàêö[,þ;ÈÉ^ñ˜ïÖ¬•d#¶LÁ*ðÇ}FÝåB*Ý·)S¨´Ë¼œ˜\ Ö˾+¾q÷Èpô–9 𩺓øþlªû KbƒF`aþà2è‡ caQå-œ)tsØu4…ÑeX‚B´U, S °L@ÍÕX<6 eaÌEMÅù?>õ‚jôôI®”0U…x§œÍ³>J®©Ñ ½C˜ží6ÍïK>œj5·²†e”•ŽØ’© ÏDkÖÏ}¹ß½NõÎ4 ø1šà[k­z ¤¾+¾¯Ð½a\峿w¨È­ûJ¼ÿˆkà«àáßP€¯Ý °‡F Ï´‰¨¡¯ô ²¨ýzIñ¹ùóPG"üE¥µO!”‚§ €)~b.j]‚Üã0À2OH PE˜m.µƒrÇv€Eå%{kO2ƒB±¶¾T)Óï4°™²cú³ÊÛ¨±šå˜NȯÌ4Éس†|‹ç–ÜÍô„aW)àžANiH¯ð‘ðG °4x€:ž+Þ‰ï°TÅH5¤ýØïð©Z±×~ÁDÒ 5@”`ÏØÀ¤ ÕåÆtm¶–§èX8Ð++Ü xuujqZôè `qä8¯¹À"PáAA>Mä·ÿ,ú¾lAyûP‘³‚+⣿AàÜth>B?ÜJ-T€yô[¼»hжù.†€W#j=mëžR,ÅFBkdwS=ûV ¡Òe0VdKŽrm•å¡ù«è­`–i$ÐaA~;ÞÀWhRÿˆQà_ë^ à0ԥŠÄÖ¬ ;FTy¹ºˆÞ¦ñ¯Ø+…uþfW˜?@¿èšà@5 1I±i—Ú òž50X‰@þFÁGA ’¬Ÿ’qZi@äS=ê”l8zv¸ðб†íÈ0IglU£˜Ž&á8«™&°“Ï38¶%ô=™. AØBý*ÙŠÉ¢5òˆÜVÌB$…ÖQhê0Ððž;ÞÁ'²”=ŒÉÔ½®G¤à;¨¡$x@ƒÐؽYR¢*éW_+¯\Yí%8ç àà@ð™ø¨°n2ˆ¢˜–&¯®…ðÀg .à*@³R(„÷´¦E¹ìSIž/,á*´»h2?™wh*ˆ‰–ä‹{˜4;=•ßV²6œ÷ÞvO=hÁUÃWšGËŒ²ë¯( ¨x¡ ¾+ÞÅ{ìbPÆ0¡’j}%¾ža<ð9é>и‰ îB°`$‰jƬd`Xó~˜'X·˜JN±†_@@Ô(˜¡x€êA@‡©²–¤ ¶Àeo JÙ´€Ò€»j‘–]«@A5 bÆu$T9ýr9ðÔ¥!$U 9I±§@!Ô×ò…q tÔHô;#N”q®ÞE,Žv BÙIíèØÚ(ˆ]@4 ¾ÞåWìpPÚ0 dô7QâÞs¹xà–¨s€ p°Én6‰jŒ‹í&±'æÄð1ø„} ú@D Í60Æ&Õ,“R¶j¿ÁD±k?M-àïÇ“ }Y nÚ ºÕ ‰ª€WqN°*ÄB+L§(@PHù°ÿr7ÁßO«•O/‡›j«¬_ÏB5Z¢"Œd_)Q‰oßÝîb•Ç€i”;–Kˆz4×µ)e@ó@†µÜ„|¡Àq):R!|f ‡QVœ7,@8ÁTQ:€‰þÚ=Èg ࣿ|%^½àû¶ÃŒÄ7(Ð §€42‰*·ïr†ÝžF¤í$í¬Àg¨•>€{º¸µC›Âèøò€Ë _Ö¬Ϙ)AÁi⌀»%w³ìÐ_0:5F»áM‹N{:´õ¸®N²°÷M‚qµy¥ñ`e|[‘;üôÙgÞ¸:Ôg¥(‚$XÅo§U¡)pL,4ðþÚ={R‚Œ\•±Ÿˆ?¼xà%œ<`#¸5€½@é&Ue¦¾ 1ÆY©ŸÅœO Ùc§ÂͰœÄ‚€2>?@qœàš %ª žŸ1‹H£€½®€5ÿ…ƒ*y²þŠ$©zJV!˜FØ{â©ÿµÑ—º»tY>B1ÕSÔ,l¼zÎ뇿Á>)VbM2LJó#È(B/…JÑÜ¿PyÀØ Å<´S›…õŸ+0/Y€gËÝÀ§§60Â*dx¨[b®;]x°¡†˜\€Å ·%–”¨šd‚úß*U¦ïzÀÄ ЋgP·.Ýp¼Ž'T e¥³«DžX ÀÆÖÀ;ÔþÍ•Dhɬ­Ÿ[ Q(½YP¥¿É6©ž säöƯèZÏÉë‘X˜Óßt¡•ÕÐW¦Áb}-«µ ëî…ÝPÎ]ä÷æ4 X$Þ ^À+S8° ABª2 î¢ôàKà3\€ÀÝò`ë@&fJAµÇSCZwä¡Kc›@høS˜‰€g\h{S ( À×a —#"Qm@EÜ›µ½Êëq¨4 ືF FÊ"Úµ¯}cà ¤#/$vÍøã+°nÔóˆdõÁ•hð*þ …¨Y„“e+´á”äXË-o)M ‰µ³±oFr4ø“E  û=Àmd ŒF€±WÛÀè“jß ½°9&;_b@ª} ¾me5È•m W€ü®|QÀ;uþ¤Òæe4µ, 0@9*0;ðßÜxäŒ%\q¨ýk(ÕRÇ\ã»8ëŒ+ã3)×k6õE… ÿ Úß.ôP+ä©Ôb Ågèb๊ûÚ™' aÂZr×¶¦7$oƒØu®dÂ0¢sq:Åÿét€$L^Ê]ø{’&‚¼þ3„çËi3nÿk, Á/Z ðà€àžVGRÔ«æ6©L÷û|b4]¤ ¨ö%  ¾*€rÇùXA‚@“¸ä €WT0∂ãåÜ?Ås`À"„u°qÉÇ$3.’=ËWPuƒitA"% K§£–BÁ‹—‡K_O: sæ œ<£¡>G+(À0'‘í×å"6J`ùA÷2•Õ¡¡< ~ºÝˆkŒ'ª2H!dî/êo[hßX PxØH€Î®Ò$Tm¼1Š÷|¬Í#*œŽË^¡0³¥`£¨ÂTï@ÿ;=#I‹ËÔÕćšH¡ÀNx~\©P | ûéqup¦Ã Ýô@éAI¼~Øâ¡f$gµ¤‘_÷‚œs@Èõã ÈlžâÝÌT3*àÍJY©™­TK ¹2êër*üe@a“³~0•~©3¬ @9@:~ª=Èsˆ¤tb#§äK?°09]VXìÕVtòÐ. o.`ቭ@"ªÌY±ÍÃ]OyIª|6¸7 ü¥(¸[ä³€°lüÊ  ¤@ `[¾58[õÁŸQP‡UH§Ò2ãójpBv"•ÚN§1T/¡·Žv(ºô*û˜‰ Ö艑bm» &°® )ÙÊf:œkË{©°Ê"ÃÑ` œ¤j¡„­J;8Üã¤J´<°OggSÀ€tsqh b¨hÅÇÂÍÊ¿½ÈſſÅÈÈÅ¿ÆÁ^ŠÐ5~$ˆƒ!¾Ì©,é·ûGÃk­+ÑÉC¨f·Ð8$Ÿ°@ €•oÕh$¬SùK’—8Ø Ÿž¢`»²‘Pc[˜‰@¾œ À©Qѽx•;ŽÛ .Ž*^t|¿Û¥éœ½ËíÞÝÉEÚfJÖ#(Š?Ô¡oå=Ÿõ¹]~‡;«*‚©OUûuÔ{~‰Ë«ÂY‡ŽxÚÔÕ‘áíâÕ§† /¤ HÍqψá_Z©gìÍÔ÷uP@þiø[ºUjäz|¥j5¼ýñ6÷#ömiJRÂ$,@³8NÉ+’„†ö“ØòÊg…»4hº$Á3ÐŒ2 .ÑÀù…Åóth@‹Ný+|©âpƒ@ k=ð­ðÕ(QTÐÚÙ— ð”íiÚ{µ»^÷ä*úµJN‘÷9ûU$*ìÕ–‰fÌÚFüém|mm¯r\Ç–ü#%Mðë^c~Ì~½¢’4 Ð6Âd11 `[¥è{a&à" (>z‰Kº«6ÉiøÒ¬ ¯Õ•9ü»¨“‡p° ©qJtp°Ja@Bó‘Jì=üøÞ¼=3˜À‘@.êð ,•FpND@ > îÀÃÚ( à[@/UlîØ4ÛÔ>¤EÄ“´‡©=@C¹«‘L]{{Åž(â*‡Ñ.åàöuƒׯo'6fI©Í‘> NüÏ̃#*.K®# "¥\Ñþ2÷¯Ÿ±[’¾Y]ù# Ç"VCù)n2piVÕV wf[ã<03ȹ;óèÒ…$½ÿ ~Åès*ÔÁ`¦‚ŸFSïKÀ+  àBÍTs”ð)=Jì€õÂA¼——úQp‰%pʽx{nØ£†8xˆž‹ÏW3œiØŸ¬ê³§Ú0ýÍçñAú‡•4yì14WasÇÙ Wž’ù³Ä®ˆædÖš„݉ EÏØ¼—ÇP¬G,„„ܪ`f邟 à·ÏÅ Hþ9Ý”#”¾°اOÒýØI/¸®ZPà<¬†à”`°€tÐã-£Ëß¿}€ç–l~>ð>ñåD¡–àÀÒH<¾7 ƒ(h´ÞãÀ—Ø €óg(gsÃjíDf¾}>Cu£¬mÛîã]p0mÿø-üJÓ>NÑÌ0Ð] ¿íé~ÚèJS˜WšŸÎ‰5ú^ZZ§aùû$8ÛP]™{Î@`Á·T@kfÐL@l³¥ûÿ^€!…_(€þy¹sÒrü½¶‰/ÏZÛ_Ó$:xH· ÈÔ86pk&ùŽ‘$Ýs›!ç¬O¢´CÁ.é/ó´@•’ûG¸¨À¾fýÇO`É í €}Š“Ãï~Xèvï‚·“p¶ á/ ,6‘)Ëíãb"VÚ$šÍÝй:Ã0œ„)§Ÿ†œÎýMÁS¦Ì.‚ECËöÕµ²ÈµH £+5(K,Ж81PC AæÃ… «GྙøKR(›\5!õÔ)ÜQa<ð 3Àœ ÑÉ1%6‰ê –¥ëŸ’ÂöÀ¡‚Û\V¢åª¦  ýÚp€#±.¶Kj Ì<9+]Öɇ`-x>ñjæäXYN'¶áU¿Šx<õKæmP0ç2ñ å„ÂYÎ3”eáJÇ!›·Dl™’:à–K\Á0­mÏXùm­ÀèÜ2ÓùBüþ@‚þ©À=i(@ÈØO¹Áý­×5€þ ‚ÆHtA8Æ’‘æýf¹_^b~g›@ÿÐîð)p#×Á!H ê ˆãVÑTpx€*·€<Üü„|`¿}ÈÞ­òâÂPЪõ…R¡ìs?½œVzP3ÑŠÚ!K“˜Èk=¯U×ìÂKÉ_ѼZÍ’ v© éE)eFÉN:´Å@·‹¤.¢“T% å`ç†2Q€R‚¥˜*àÁ^ŠÝáud#D4®Ð¤?<;ÍðÀKà€ 9$ Än¢iHÖÓÊþWJæ¬BöUÁ'€ PÀÙ*+M?]Y  Zh 8Í8ˆÇêÀqº:^P†j¾ÀL¬R+kv®kãµ¹z úÄÊ"üçŠ~Sø›šÕ•ÛSõëÒ¦ÝÌá [ÛšS ꇾ̌B²*ÿ9eõèŽùо" ̦ôIÁ‚ Œ&nÝ”s¡LZ‚žh>j]Ä5v;‘\ †=ÛÀ?î$à!<¡„øJpYÆHjço‡½3Ô‚‚F@zÅ‚:à  ‚a€°  w/o‹mràmYÑR;Ù†Ëa«o;+Rƒ ící 5“±®fen¿´ Sã:’‹EªwâiK)AæÊµ– 7èÕªDb³B¯Ð>+µ}{¡<”1‡Åë}ÑçGþ›5Y½+6vŒ@X ºcÃø¿9Ox&à^ ø#48ŒÆøØ;OÂå‰1k<¢%q‡Ü‘,H€(Ádwi’ÒËÖÙ›ªç>]¾æA£· 0þ<+øð¡i””ù 7R úýÿŠ“à‚¨‰»úþÈýì8F{œgïÛïäËÙÕ=tämàþ³¾·\r{"8÷ìH,ç¸%KÎãŒ.9Á)jpæ|ùdidûSG[µ`l›½`ðæ äÂ_Zp.Æ5"3»€ ° A|@O@¾øôÖ6 ‡ß©wù”-4TxúìËnðË8¥»d¯6Bà.øSÀÜZb‡b¥#‰~ÿB[pÿ¾Zý7°Dÿlsð–R&âM·@¹À\ÄVg™Ú ¹¸‰Û[’y[ªšU>æœ?Ê¡3‘Wl"‚opz?ùØ“k4ó­!GkpÁ:ŒlýR‰Òc9wÚD'½Y´C]Þ‹í¬Û&QÄ®T¦á<‡¡}q -~’Ë ¸nkÁ8À`±Ÿ ¦=† ù,¹=rÚ6}ªu¯uÛ-M>À4x ‹ Jvéâ8ALeœ!=Ð…T >ÍþâYí¬ßË’tcœƒ6ÒÖS¸KÍX“çZÜm[kT°¶æ¨r›Ëx¿ä•Îö'•fª'öY×&º¶$|0d*7•k©Œ~hŃð!üÝÆ°7YÌÊìT˜žMÖnc!L!õ‹ŒæÕn(i¹SÒp  Ç3¥‹Zañ·ÿ?ɺô1cìHm’뻪HèaÎÚ&•O+@9œUGB½pP)ƒz)0 ‚*!{¨RÿZ§¿¨3Üq['®«à]Ö))I-ÇåËàÍ÷ï_Ë¿ÖéM…d*QëVöh?à‹í+;GÓÕ¹)S (¤Û9=æ¹L¾h­Ö³’H›B†!JáUÖax`&q ™f>%mÕE¸³åyþWAÜ©±¬ sà TsZœˆD€c=¸Y"Ý"ü‚^¼‹”¥ö‘m˜©Nªm)¢ÀyîQØb޾ §h«æc]†{N€KvkÃÎAX×ÑlÙØC¨ ýNÎå v;ýâz>OWK7…×°C•XµRLŒÂ2¾SUSÍ3†\æoJª{,XÞø5y11JƒÜ5°…÷ìðó\§_‡Ä a@œɤWDÍNã÷1úmÒÚêM}€'"ðë3à)ÐB…A7¸#£þt"€¤v´­æ´ k@ $7G_劷{Õ{Ñ.yìrwÞ²Œé\À©},†i!6²&OÕçÅ”¥mò²¶DÕéFà¼ëeëÊéè2 Io€ ]ø)¢‹0xþìôŒåv]¦'öA–€‚,@±”BBDǽã°sñ¦¡ïØÐ7 øÈ]Ђ4J•Eñ-€wèÈ*RT­^Ž€h 8Ê?ƒ •‹™™,u.ÒüI5ÀýóÄqmÛ¬¨yw‰¥§ )¨þ&ï/þ4´È÷½šJ×Ù»¤i`5”¨ GJ‹qw|§áÇw‹d×A ɶÏÀÆí¨_Òeƒ0_¯P› G­Hº‹5ÉwHùܸ1R ‹0xúìp¯ß•î£?k Ì  °¸à°J)$QÍ[{jŰ.ð íÓ{iÁ €Õ²O¶BA*@8'ti=õmü @U@Qï'UqƒB„¢||9ÚJF“œê½U7:¾â§æ;öIÔîâC ìõÌáe†A¡#æì_¸”¥ù®Šæ•ß§—qü›t× àí‘Q2*罈Íû Úîr* 8-:˜,dÉp5/µç²´&¡šöž7‘~Mö‘^Îd8ðüòª:›bò¤KèIƒÄWraý1‘0Éw,$MǪ-œO*YâÌÀ¹ã—DWjP&ÒJPÜ~ó*Á)…3ÌŸ×À>ZÅ4lWà{©Gù©\S›!l¬«‚-Ã__AX0ƒIš;t¹¢[–ÕB­ 8aWØÀW¹íüÀÎh«u8éjtïWOxç+kNq$ŸžÐ` |é‘ KœÍàþ>7@ÅüZ€tãÈaX,)Á4ÂÌk¬ (Þø,¹-½‹€ÃÛ«5é“}Õª‚cmâ«äëpK0)‘%’HófÇUMß/ŸÀóª¨-Jh Ô”8xhj(P&€ÌgÉ j=÷³ ¹Lq4)–{ÃSñCÿÝ4-Vo;ëàŒ@ż:Àc®I4¨wŽk5 4k¢„ ÆGþ…GúóG®Ž×€pVmÓ Ü/TR@õƒÚó<.ü¨4qF:ÆÜÞvôY%åæ"–xÈúŒÀLžø¬Ê–ØŒU€€áõ±é÷¯Q=ÙJlgÉCš ·“ÂîRHh:S m®0³IC‡t~P† õ4ïP¿~€R(P½­*Û†*ÚÌ8±Ay+’jûßÐaf}xÙúsª'—žwi¥À^œõãxJØCÍõý)ƒZbKbOßÀ)˜è(i¯À–t› ÁL°{-fþÆöb®#Z†Á{x‘³~,maÌáwn®5Ø çÞpPø‰,À™ËOT[my“&`þøÉ5f1`xû „·7Ãexæ¢#d°Ú¸Õì<¡¥€¾í¹5v0h`ª9`zh²èeLYš$µ‡©2ó¬#¹g¾e¨‚ð(è¶CY@|: ûç ®‹X-€þzJoê£oYC å·ªivlJÈmDªÑ4B#[\Ì8»ßÔn˜ —`kpuOòÏ¡J¡ñ¾*òQd\óÿóæï‡œ"C+UCyzY("ÛÄJ˜+Sç(þÓZæ/s #$òÍF‰Ûë0îµzxž1»rÏ `¤ > ]à2òb$c0VžCÚ·ZÒÂ$€˜puìB’ŽàÞÑ×Ïô-‘m€Ä»¨Ðô”Ø®O™6šª )Ý,¹{gø‡±áòDIª* [U]Auq˜½ã·tÒÖØ!Õ™¡Í0ÌUÂÃ0¹fTé ·#Í·J7£Wj§‹One[!1í¶6¬LÓCì*ióž‚Mõòü©#¾4v­R¦Tâ‚Ê1|NáòI¡½q™¢ÝG@ Ìqˆ Ðùœé’l0+ c†›øúÚtàéD€-Ax,1扤q¹ßh×ÖÜHwaÎÐÁÿÖˆd †` €ïÃîA*}À`a߈n-¢ßV‹swpñ™ —Ï åR©ÿÉ‚Z_6›~Î[æÁôZ•Íî›~$Îõ dR£Y…î÷ª˜9Û"÷Pcw\!dWûjQʲ¨Ø}Ér°¬C¿…楞â )ˆÐKX§ÃYh¦žøù1f3‚†MˆCÈ4²NÔ;3à‚þÀX»c)¨&GK²ž 3øÒ"L?8Ô¾i¿@Î^ÂÕ2•€NpÛ7y-( T¾?)Br_¸Ö®’e–ª|wŸ9rR[­MrIݪ¥5’òÌîõ+ɃH‡KoE¢ôÓ½@MWŸâäsU½ý|FuLN懟hƒmÁ¸ ²!€hÖïÑ+ §èɪäÝC°±Ïï¤LpãʤÚç:q€ÛÐI*s»Ë¾Î÷žÞMÖ¹AAŠù‡ì¿Ê{Yxç§r)ñį 2ÀØ¥Y ‰¾Óï ÁÀOæ('u1`v†$å§â 0@ájµNŠ0ÁÄçi 6.%-บßÍ k\P>¡ññ»ôŠ$¯5Ó‰è¢æåMøg½‡Ú—o¸–?—¿v½vêË6s1˱*psŸ™U°ÕÉ›Îè°f†Eo}À˜Ì«ux,‘¨ô²€¥°;pSAÌkÜÃÇÛòÞAU—à<>øì­)l OÂ]Ñœ;ážÓšÆâ"‘`õ*‘$in‰V|W>Yÿ×#¬³L¼®¸‡a Ç:^m¶í&¨yYà•p^JÔ8”~€X¸ÕµzSSÛé!ÊÄ‹‰ŽÊ¥UN{’ïÚ-ÇίŒÒ7ø…4vͬ~z¾µ­ÆM–SS!욬٢¸î3~õÛ½äå6ƒ½÷™åN¢*¬!viÅ˯J¯4ƒÅ«ŸòÈBR×7€J2©ŽYz7jËmFbÄŒ»:L;Mþ÷¬!¢‰Ô«H žž ¿Ûôí¼£/9\ ƒ® ðd»”nÑáÒ[Íõüß4ïyá½¢î8‡Z[ èà(çŽÐ‚âŽÞ¶áw %IÅñEýùwKoˆˆ—Þ803DRQjæPÅvÑÆuêeµïͽù lk¼U“B|N»-ºˆÀS7!['ÕL×%¸Ô ¦ÔC´G­E(™«wþ3ÏÍä8ä*@_(Ù(hò–¹Öv—BBAº¿ä6Ú 4à>ø,¹)b1‚‚\Åðöæ”ÂÄ“~„+µmxà Ä2‰‘)I“Ù¥†x>ïlp\û3S…hà_^àPRµ$¢¢í«ã ÕóŒ[yúøÖýø”R}Óë%•møM$Ë$”¦~-‚onK,ÙK¿è?Ø=¡r¾Þc„0ðSjæäqŠaT–½½(–þ*õ,R´•ù‹Ý?í‘cûšŸ¶O—[jQ$ 5Ð때’˜Uíe™¯ ˆ…(Щ@=:¾øÁqä>L»%&#KSðü©% xà€P;Æn¡y¦÷òiÒ•ÿ5èMAv‡(T¾gàp„îAJƒK.¬àzµ¬aT(E)±‹ëÏt&$VD®3bùn¤Æå{Ÿ -„ÈKS!gµK›¹zôÄ=/BÓRÃF,$(¡œÇ™Á>öl¥íðÞyÐmãû‘d:û—ˆ‚VDœžË¯Öû_©–pQV)•BÈÆXØreºÔ d 0ei‹Çcžø‰)lÀ’Jw!=¶TÀCHp+@]KJ¢¶_­É>¸ÿé¡gÀ!.T¸Šh¤K€OîæéO! 00ÖYcC½ƒj'„"’Áwî-3a fÝÀ•,&«€Ånú±û‹^‰opxE£šuf‹ÙÜÙX¨´Æ¾b·f¡"ÕúU¦Ë×þ¨B5GP T€§›Ù‹„(¿æ¯×a)tƒ÷Î3CahéoP*Ÿ! ;Ð×Y¿—²’_¶Ã  ~ø¸),Bx i$×½ú5€‡Ù  0 ÐùΤ(!ÇÄTöü/ñôÎô@_º ”õ»ƒRÒ€_«\,‘&`Ïspا.«í´FL²Éi› W(<Ã僻¶Ÿ‹Áúú°m9Ž5½6d›Ç¹œxÙÙ“qñ#n5N ¤èß GÖ%ûàl ,ñ:ÍuB4ß#u¦KfLPÆRc†üe.q²ƒù=±‚Ä] Q’—®SÎBÖ ò$´;€žøœÁ[ BbÈðúž‹Xû3¾þ/x&3Æó1­JNÛ›!Û¦„ ñßAI¡”&â,‘)êÕçïß>pJ €b"þµ}~ÏÃñ'jþð£Úõ&”rZµy•ºJj¹¸jpyÀݹ%bÜ{ªb¸ÚY“ªb®úhY1ý‡8 Æ™€2§¬¦žã}Ȱ&9s!°kQ;r¾ª*È J“FчO@†še¢x¥fÈ@ð9 GéÂì$X=:¾øœÑ A+ ›BÚO<óê¸@ ‹•MQÎjh-IÊÛÙq úrX趣ͩ¡6 Ø8 û×0RŠç¸—'JZ縡7§zŸW—1†=”žæˆ·7"å0.ã^ëô’ÈÒã¹e8{ÂÑs î=ÖGìÕëWÁИ©b'(eFÍ4×-Pƒ…óhcǯÀ@h ¥¤ªÙ°|ËPŠ Ô1z¢BH>ÆÆ—;3¡7ð~øœÀ_ÌÊÀáõ›©ïž…Ðo‚€ä•XÐÙ± U¿Ç ê´ãè6€u{H)Ц"(MƒÀ\‚ õwwGå#ïÐøÏtEkP4—–8`ÃØŒS(]‰9Ñ*¡çõmà®;¶ n/š‚¾è/¥K@ªþ´mQ=[ò¯‡BTù£ 8ðI2P2ÀpðÄÝ£OºmØâ¯…(/qé ´No£›r>­ Ï•ºƒëä\!}ëú½Ë%4YÎhgE‚fÚÖîL±­‡#_]|ÁÃ{Ç‹ž'è·oCMæ§KÕ!ÙñÉ‹€Ï÷M‰¢„à¢Ù_êôñ̘@Ã(åã±½•€y°Z¨îìE«.á|Þ>(=à´( +œte®mtÁÃÐ  q5ó‘Då¤k2eàD(„áþS”¡@²‘* v†™VZ&ûnaøœÍV¥T—’ð²)—ý"iè¬ê3ZwÔµåm—¢4X¾ã í ]aPgµà÷ªHê•aZ>RJºMyЀ/¬ O^ÛzXNô6E qîÁŽYö›Â™Ex0H¾'}ÂéH‘$ôô*¯¯ª¡ÒâýG`Ð ºŒ¡Ê¿øo*úÔ»¸ž&ª×@µ…딈ø%ûjSí ¤3Ýpò/OEâVœ¼OO&¤é„ ¸Áó1ÓXc- ¯]„Á¯v'¤’uôÀk¨¶fîdÞîÞ2¤i¼g¾ øåü1üYÈ!çäâZÓ’ýsó´x¶{B¬\©„@áIGÔN9ÏWžŽH‚ëxÜ(P@¾'ýÖý• §‚²Üoï¥À¤>-°»;$ªøiN-Céá‡B'iÜp…ˆôD€Â¯`¨àO±i !o¤aFËŸø]Í\º¾µ¯>î1✛;À†}ì²]=›â)z¢b£•é•×£1 62U®¤Í¢Ý²íU=Pœ±f³ Ý²7ùÑT«·Á€¥Ñt6a…ì)Â:vPm„Øb‡&K´^Ãó€ð €'ývå˺Ñì¡F‹çÄûxN€ÇW°º$©Rç]dYÍ‘¶gŠ=GÐú„*ïr p¿-P!1¡p|È€Ô3é©Ï‘¤ôºM:>WMQ„[j$Þ€ºØnã…dÈ`UëšQ¾IÉ|]!¥ÌGÆ¿mB$‡Õè/7€áRÁLyœbèi €Ûà™]õ ºÞŒ€Ñ02–† K^'ý¿å/C€€¨ª /ûh@¼Ð€À‚N€ Á gtkboard/sounds/illegal_move.ogg000066400000000000000000000143551153150217100173270ustar00rootroot00000000000000OggSA¢•<[Lý«vorbisD¬€8¸OggSA¢•<zh¬-ÿÿÿÿÿÿÿÿÿÿÿÿnvorbisXiph.Org libVorbis I 20020717vorbis"BCV@$sZ2f©sØ{ïB’ãBÐ{ï™AL¢BÌkì!c’àBŠcªÐU@g½—Ú{˽÷Þ{F¹gÔ{i½÷Þ{Ƚ‡Ö{ʽ÷Þ{ï½÷Þ{ï½÷Þ{%±g’{H½÷Þ{ã°GŽ{¹÷Þ{e½W’{(µ÷Þ{í½·Ú{î½÷Þ{©G{¹÷Þ{Á¨'ŠzĬ÷Þ{µ7 {å°÷Þ{ª½—^{ê½÷Þ{†½‡˜{н÷Þ{$µW’{(½÷Þ{†½WÒ{h½÷Þ{ê½—Þ{ì½÷Þ{ 4d ¢(Š¢( ² È@QÅqÉ‘ɱ  Y HФXŽåXŽ%Y’%Y’%I’¥y¦ëº®ëº®ëº.² HPQÅp Yd HŠ¥hЧˆŠ©¨Ž „†¬€\CTLÇ•\Ë5]Õu]×u]UUUUUUUUUUUU Y@Ði†©ˆ0#™BCVÈ0Å€ÐU@€IN’(9)¥”à YL’J9)¥”G1yT“ŒA)¥”RJ)¥”RJ)¥” YŽ’J9)¥”Ä(YŒ’*5)¥”G9yR“Œ=)¥”RJ)¥”RJ)¥”)yÒ’®A)¥”ä(iÐ’M=)¥”(E‰’“íI)¥”RJ)¥”RJ)¥”Jù ”RJ)¥”«=¹Ö“RJ)¥”1J Ÿ”RJ)¥”RJ)¥”RJ)¥Œ 4dgr(:‰Îg(gš‚¤BiB÷&9Jž“ÜJËÍé&œsº9åœOÎ9' Y@!…RH!…RH!…bˆ!‡œr *¨ ’J*ª¨¢Ê*Ë,³Ì2Ë,³Ì2Ë,³Î:ꨳB()´ÐZ±Æ[íÍI[s”ÒI)¥”RJéœsÎ BCV BdQF!…bÊ)§œ‚J*©€ÐU €Q2ÓQÑÑÑñÏñ$Q-Ï5Ó3EÓ4]UveY—mÙvuY·uÙ·}[·mÛ×Ýøã8Žã8Žã8Žã8Žã8† 4d „BH!…RH)¦s:!” YPGqÉ‘$I²$ËÒ,MÓ4MóDOôLOõ\QmÑö\ÏmÏõTOõTQ5UÓ5]Õu]×U]UVe×¶mÛ¶mÛ¶mÛ¶mÛ¶m[BCV:’#)’")’ã8’#I@hÈ*@@Š¢(ŽãHŽ%Y’&‰’i©–«Éžîé¢.ê@hÈ*@†hˆ†èˆ–¨‰¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢èyžçyžçyž„†¬$t$Gr,ÅR$ER,Çr€ÐU€ €Ã1$Er,˲4Mó<ÏóDOEQ4MÕTÐU €E±Ë‘$Íñ$Ñ%Q-Q5QEQEQEQEQEQEQEQEQEQEQEQEQE Y !„¾÷–bj)÷Ð8Ä ÷Z)­÷Ô@bœ÷VIb˜÷VQBŒõža„BCVQ€1È1ÄrÎQê$EÎ9*¥Æ9G©£ÔQJ±¦X3J%¦k㜣ÔQê(¥ZK«¥Tcª±€€ ¡Ð@b R )…”RÎ)æRÊ1åRJ9¦œSÎ9„Ê1ƒ)¥œSÎ)ç„ÌA圃ÐA' À ÀB(4dE'àpÏ“4M%MEÏ]×Mו4Í45QTUÍMÕTM[MU–%M3MMôTSEUMSvMS•mÏ4mÙTU]UÕ–e[vW–…Û3MÛUÕÖMÕµ}W–ma–m[˜4Í45QTUMUÕTUÝ6UU·5Qt]QUeYTUYV]W·U×Õ}M]ÕSMÙUÕ•UWõmÕ•ußt]aW]Ù×U×õ}]×}_¶u¨ªºnºª¯«®« ³.ûº¬ÛŒIÓLSEWÕDQUMUµmSUm]EWUUv=SU]Õu}]U]ÙÖDÑuEU•eQUeYu]_w]W×EUvÕu…ßT]]—mÝfÙÖuÑuu[•]ßW]W×eÝÆÖmßøLS×M×õmSU}_÷}ã—u[8FUõuÕ•…a•e_×}ß8n_7†QU}ß”]ßW]×÷mßÚºnü®mcë>¶®# ?ºo UÛ6ººÌ˜uÛ¨û:c7†Ægšºnºª®›ª«ë²­ mÝŠªªëªë »éʾ.ëºqì¾p£«ú¾*˾¯Ê²±Ûºnô}¡ðʲq̶-³­Ãpß7~®.ÇlëÆ1û¶pìÂÏ p0¡ ²"ˆ`”‚P1¡R B(¡¥Jjc2ƤTŒA)¥´BI­b BƘ„Œ1)¡„–J)­…RZ+¥ÄJi­µVkk-ÖPJk¡”ÖJ)-¦Öjl­ÕZ1&!sLJƘ”RJk¥”Ö2ç¤tÎIÉœ“RJJ±”ÔbŘ”Ì1)sRJ*1•RZ+¥ÄVJi±”[K±ÕÖb­¡”C)­•’Zl-ÕÖZ¬µb BƘ”Œ9)¥”ÖJ)­UŒI霓’1'¥”ÒZ))ÅÌ9)™sR:礔RZ+©ÄJ‰­¤[(¥Å[­-µVK)-–’Z,¥´Öb«µµT[(¡µRJŒ¡”[Œ¹¶k ¥ÄXJi±”[l±æc®¡”ØJ)±•RZl±Õ[«µµ–kK­Ö[­µÕÖk­½§ÖjM-åØZ«9ÖÖc­¹÷PJk¡”ØB)1¶Öjm1ÖJ‰­¤[)¥Å[­­ÅšC)1–RZ,¥ÄØb¬9ÆVkj­Ö[®)µšk­½×Vco­ÕÜZ¬¹µTk­µ÷Z[o 8˜P Y DÆ(Å„¦œƒÐ£˜s*¦œƒPJ¥˜sJ霃PJJsJI)„PJJ­…PJI©µ lДX Ð•@*`ŒRÎA))ÖF!ç ”’R­ RÎA(%¥Z3ç ”’Rk9gÎA(%¥Öjî ”’Rk±õÞA(%¥ÖZ뽤’Rk1Æ|I)¥ÖZ‹1•Zk1ÆZkª¥Öb¬µÖ$l­=÷ÞƒNÙœsν!œ2<Á¨À†ÕNŠÆ Y dÆ dRÈ „RH)„”RL(…†¬¢c „B!„BH „B!„B!„B!„B!„B!tÎ9çœsÎ9çœsÎ9þþ6hJ,PhÈJ 0F!Æ “’R‹ SŒA(%¥klcB)­Åc圄”Z‹±Ö\+ç ¤ÔZ­5çÜAH%¶ZkÍ=çBJ­ÕškÎ5ˆRb«5×tî9¤Ôb­9瞃ªµZsí½ç|O-Öœsν჋1לsî½!d«5çœ{:ájí9øàƒBkîA„ðÁÀÝà‘`ã +Ig…£Á…†¬B„”bÌ9ç „B¤cŒ9ç„Bˆ”bŒ9眃BcŒ9ç „B(¡bŒ1眃B!dÎ9ç„B¥”Ì9眃B¥”Ò9!„B(¥”R:ç „B¥”RJ!„B¡”RJ !„B!”RJ)!„B(¡”RJ)%„B¥”RJ)¥„B(¥”RJ)¥”B)¥”RJ)¥”B)¡„RJ)¥”RB %”RJ)¥”RJFÐIF•EØhÂ… Ð•F5ÖÖZ+ƒRpˆB r­cÌið3ˆqÌCHiécÈ@i¹öRAB ̃„ÏAÐ m‚™! ÁáA%@DL‰ ¹Paq‘vq]¸ ‹»„„ ±8€pp O¼á 78A§¨ÔAÀÀqDD4‡‘¡±ÁÑáñ4ðpˆÍadhlptx|€„€OggSÏ0A¢•<§Mö¤64ìçàÞÛæâèßçí,+-,)/(2/4åØá˜Ù55s à° €/°§½ã™/õžÇ¾]Ûùá¸J§¤z×Ńä[ªV+ó4ã@ÐH³$s _(!0ºœwPG‚óL” lŸŸàrPái…£8»º™¬ÇÐ:Y&±“TÜ‹8ooØìûø£ó…¿˜ªþ´ß¯ØX»`$„à%¦ ƒ)ð ° 0 5ô Ðc¼Î·×ñoM“6MÓÏÄ¥)áŽie¬ÚRK œX-ÇjŽ?Ðâ=:#¤Gù\AƒiR€†ìôp. ô[å8±£D×ÞWi4ÚóÇkü•íFëá°OÅñøºÖÏLn[dÕÄ=¬ ‡ñÂâÏp§HGST–¤Ã»¶svæÒ3´pçР͵ôo9U761àpDrc³ªQ·§®oia ¶j«5^j…ÍaΤÅ(¼ÊE¡ìðÿ¬n%k;{ ’C!Ú€¦iÂl±HÊ g&;=4,89—ŒÏ9õiÊóÛ?Ë)‰Õ¾(&š JÝ´žTÍÔ]+§X?Ïop4€@Soøeººæ6Í/c4âSà;´/j c rRg<¶‘„Ä;ƒý¬Jòw@->ÅCŒJ<VøM ¸ŸÊOHã±I N£%N½{(¸ý°ïùO¹3f ÆŽs…X< Ç{°@»W¬€`-Q…Ûáý†š€_õ¡žZ•ƒ4[(—\~ýì‚øÿfæ—@öQØd0ŒŒP÷Ì!HJ&’Cp œÌ–h’‚ó6s¥_´äKìq¸Æh±EPpÊ)!¶=ñsÉ"ebáÞfƒ8õ ¹­Ö®±ßK.øGü0Äul PÔ • ªÿV}]Ón¼§ùn3q0E\pÔå#¾h²/§l½ƒ›.ûý]&GHƒ ,#c¾«o÷ÚËÆe±— €€;×-΋¾klA@éhùØV§Õ».ãgÚ‹È$Y¼ûGß•lûÃoÞZ•¥ƒS+iOaüz•.q_‹õ-të[è‚‚‚cW«Ô,``k&BR³ ·Û®Z¬ °k>vÝâöø_­¯Ú;„¿è¬p†ÂqeŠX­“àívõ(!Ý„+úYt‚SX—Skèhžö†:eèI÷ %@Àï¶Óâf`ã+’—xy,<‡ ÔŠ©g‹§y¶m: î”ÊÇ@´…l [©†m³Tšë¹X\âD¬•p¦@¤ûK؞ΟZGP ¸i«ïɘI2ã¾/²€¸ë)ŠG^Š…¥Çœ!ðÐÒ¯Ò2þ/G†é¶C‡>$­kk͆‚.à &“Ü] `àdµ•ÚWD5žÍóVcSjsþV/ªD¨(s¦ÓöTÛ+Ñ©ÂÁ;u¹žÎHLâj[↸,ˆAM@ÅVßäŽóÇ®>Å èÍ@Ø0Ô~w -ª…-&vý'µxüªôÿ5¼%jÈ kœ!¾tP¢›<íæ}êA0Q%¹nô7‘‡*/4ýïtL4‹,ŠV¥ töüï~Z¥£AžIzã×dÉ¡/Ö¶°X:!m€©#p€ž¹@ÂP“ w„¹5pXn@˜“:´Mô—™Jú#P–DiZõ&=˜2q¬3ú|a€À^¨;r]«„òÞƒ§4jeFï™Z\ù7W»ˆ(¾»ß’`SÈï,£'и‰' ¶vâ ä*"ôƒø»©Aß• RI3¦¥•ÔhKŸ@Q p´=‘|&@ ¥†®ç;ÒŽ=]˜P5çͲ<²o5,ÁÒ7ŽZÌ®¼ÎÓ‹¨Þ¥y€£á¡ žJ¥½CžCz*ퟑ=þ;Éë ØÂ-íµ^­>PsI€7p%  X AB€@„æd‰Æ õ[MsèOåÄ ÚRц@ ¿âQ½{m©$A¤B¡R­0JªÃzo¿g¶‹zÞÚ¼UPoV~æãèâíÏaôæ½\LÇf D»ÓIôT5XÇÍ?ÍŸÖT}Ën·× {­ÿ/Ö„I²$F¦w6Þ oY gCP\ À  ^ÆûÎü“WA 8€e€zÐg˜Ô(b\®òþ¢˜¿a~JÅ¥ÁžH_vùã57©†³þK¬Ï3Í3ÜJ;Ö4\f€:àÛL. i›+×ÉfÓ¯¶©æ÷ôy~šaÝoDn¯±Ý«èÛwÓpÇÁqÄFI$FÊ}Šºn\¥EäC;à2WßÇû9‚º!+-fû¾rü<ͼˆèœî5U,Šd!öB”…keø ן”òžze“#Aø!µ?^“JˆÿðÓA†/ºROƒ ±/°fº€#(ØGÀ2ƒ\íH@jöŒ‡É<$Ñ:‰]TøËŸ®ðE0Þ¡YªA4~6h®åîA:W$¨ô]f‘Ñtý(41!K²Fôr¡ì¥&Õƒ8j•í§HΟ”z°¸éÓ L!…ŽàtÉ#Œµ²ä»„ÝYÄî#jSòEp tƒ¬«×€¹‚güj²ùÁˆÏgËÓË#É)û+`íýãl¬S zq‹qà€‚‹ižJ¥Fž³’òÆß#{ü/¶M,ϤR_€!gÝ{ö¤I „¢€ €íå GºÈ•º5PÐH(p’ޤ\³ ãMŸé}*+&„·šp=–> ÆÖ¥Ô= ¶W¢ÌÅ©RGr™gÍHupA*z•©˜Õkû>ÏŽjo5ÄOiU¸Pý ¡bZ†h%`”Ø v°A ýïhZ‚›¢BÁ•]â ¿É5ö²£‡OĺP—ÏÂ]qhH0ÔªrÜx€ä÷#æ\/7„ž§Æ³ì5ЇµéÕ$˜z®Zt·mvIU’†ó¤4ëÃhÿ¼ænªAŽèH;ÀŠE­¡aK8€’ɰ«A®Íd€É'íñ{@bÏ£ÜÓàÒtɵ,J ´®Uâhõ˼¨JSöÇa¬k]M3ìD A Z7\Òû ƒÛþ1+»nø®ôôM¡]àˆÕhg£‚?k ß™ïV%ü Ò%m(·Y.®ù´ª%Å \ÇûÛNgÞ‡n›HBϽ‰„K­¡*=ájd•„e2'˜¨¢¡Wúòp~ r«I†k˜¹æýq:Lô\ö€ì¿$Ù¿Ó‘zŽ ‘ÀòfšÑ‚UmXÕ ö¥ÿ½õϺÿ&`äžÏ¿¤ŽO,ÙÛêL=S' À¡0Í[îМLo®Tõ2c¤QP{Æ.v!«+*Ä4ÙQùd4ÀÀ¡ptA8¡Ub±•±©õgüGð]xµËW¢ ·ë£æÀKÕ4ÙÛh5’Ö¿ªôši8ÅUïíK[ÿ:¸û–¸pDñÔX¤ë·X7XlDÙ‹5­æ§9ààܬÑcì£_úÑ~ÆÝI‹Ü%öšº0¥YeA¿ù$Óe`ö}ÚšÀ"I“4 <çžéWÑû²¾Xì³fïkzÈyv'ãJy4hζ’j)/;›ÌP7³ ´MO÷̆À³'§-±%GÖýöòå¬þ+|¤òóaÿ‹v¿¸ÿ&Ìgtkboard/sounds/lost.ogg000066400000000000000000000700031153150217100156410ustar00rootroot00000000000000OggS=Z”.ÃäÕvorbis®M©OggS=Z”.*J€-ÿÿÿÿÿÿÿÿÿÿÿÿÅvorbisXiph.Org libVorbis I 20020717vorbis"BCV@B*­cŽ:È!Œ¢ BÊ)ÇBÐ!£$Cˆ:Æ5ÇcG¹dŠBÉÐU@¤WPrI-çœs£WÌqè çœså gÌq %çœsŽ9ç’rŽ1çœs£Wr)-çœsGŠq§çœs¤GŠq¨çœsm1·’rÎ9çœsæ ‡Rr®5çœs¤gr %çœsÆ gÌqë çœsŒ5·ÔrÎ9çœsÎ9çœsÎ9çœsŒ1çœsÎ9çœsn1çs®9çœsÎ9çsÎ9çœs 4d ¡(Šâ(² È@qG‘K±ËÑ$  Y H†¤HŠ¥XŽfiž&z¢(š¢*«²iʲ,˲ëº.² HPQÅp Yd`(Š£8ŽäX’¥Yž„†¬€P G±Mñ$Ïò<Ïó<Ïó<Ïó<Ïó<Ïó<Ïó<  Y ‚(dBCV@!CR\ BCBÎC©¥ƒà)…%cÒS¬A!|ï=÷Þ{ïÐUa8ˆÇ$!„b'Dq¦ !„å$XÊyè$݃B¸œ{˹÷Þ{ 4dÀ „B!„B)¤”RH)¦˜bŠ)ÇsÌ1Ç ƒ 2è “N:ɤ’N:Ê$£ŽRk)µSL±åc­µÖœs¯A)cŒ1ÆcŒ1ÆcŒ1Æ# Y€dA!„RH)¦˜rÌ1ÇBCV€ER$Gr$G’$É’,I“<˳<˳=Z”.F•ñB!`[†~z†„‚ƒŠ‚€€†yxwtxs€y|w…‚‚~yŒD»èUã/ ½ZÀ 0<_)€Ú¯ãU¿‡*‘9ƒÖ\zN+˜[Zô9æå&¦W·D©³áì©©ÿŽ3:œiµR¡z= EÉu_ÄvtÙŸr¨÷À×¶W[jžÏý!æY 4A½xü `{`; ¬nµÈ×{?ôB?Öë.ÎÅÝã«s®Æ T²ynÁ +œùïHçpÔ½÷c÷Ð$ZoD‹ML ¥¥Š—P/™°šÞ_ò-…*× [«Qzk¼¯û~Ç9zwR9ˆå û·„€‡€W€D uìŒ5½Uq÷Ùâ¥Ò.;¨§š9è'F%8ÔêE¶K@ó!(ÓhÕœ½DþvNŒLPG¶‚¶Ý >vV«•XrH’‰ ¬²ÝLW [;7/ò'ñŠAëÄø˜Óc)µþŠÜÙã딯g%eªåÀ‰ lcp‘GYT¢õæœïp Ý^Æ¿$€Xêºw´àüÑ ÐEHÈþν!%"ÜÞUœØ\Ø€¶<à}èþ0!—Ÿ3 ÃÈ·Ð^—®²…žgf)õŒã•O=­n6É<(õMð·¿r §qÕõþš{ǃ—kþîY\¥ÿùùg/€íLÒ•ÎeQaSùx¬p¢J#Aa^7çÛ{íË Ü²i-q4Ç€êÇèÇtçÝ¢¸h*àùgÙ©rs†JöÙ/daúb’q|qUÃïw]öoÔ·Ò=jætEëxÞºêcoêÆäÜ«xÚ;Ù ´óCµ Ç¢”:µ›Æ˜Þ«W*ÑŸ“—§©p“+O4dxUQ2 3C2[}6 r†Ú{BúÆ™8ðŘËz'ÏÅÃÈþ‹Vg­^·ºõÒúÊK+|¢›ªÆ-ž–ÙCàh³J7wH@5¶Uoy þÞê]W»‹ÖŠQ¢l·ÌËåÓþÖgk—?û|bQ&7Lã‹"r'Xž¿W¦‚¡éäµ:â¯58Õ.;|ˆÎ:>8QrˆãÁÀ³^}÷éI¥2R½›%QΦ?ž¦ibæ7Mìk_=»þ*›±{;! fŒÂï ÞJmS`¢%û.Ü´à%h[?:KØqÅ­ÿ^p‹;ÇGÏ+ü˜±x6§ðFF–™µ§O¼ »¸ÁÌú``Ù¯b—ó"ð¡ ªãçaXÎv¥¾§ ¾†‹9ÓI¢‰MŒ§0l48§ÕˆŒ•㫃°Rë3O:¯/ì;'¼(ôH©r½ mÆVp…ôµIœ5ðVfÈêÜÖ¨£Éj S¥Ä8Q:qº^!«Ût1órþj]¯øírÞÉ‹©öƒÑ ŠeY月{rÚÔ Ö¬uÛÝ3v§86¤(±4tº»lªïICI&ÐUɵÓÌÖx×òA¬8Û$+¶æ“¯…4“HëèG™Ü¡V½ø}¹ëƒ4ÒÎúsÍQïC½Ø3¨\¯ïé)“ÌÐd1 þZ-s::Ýλ–~麮 Cë#;UœiyzÉúg¿îÕhû÷nÂãÿTl½™UJ-­(š2-È£Ï³Ö å8Ÿj‘k˜q¼­Õ bÓ?Wg•kíu¡»•ÐFE\Úþ,ðöo8yw‡É—“…ypØ: ¸¨î鯷èK›z&@xyÛìŠó~ë”r_·mS³†Àb˜­³ Ų===ý̸í}‘në~2ØÝÏ~Lš§BÎiçÖ3 ‰ÿ'8‚œæŒ,Wn!çöåBß§WØ€ûJö`gVßTj床¾æús›fÑ•óÎmñ0¹û½–+™?ÔVuE᪴,òþªtþø;ä݃¥ßBþ°Ø¡ ð° < èà ÁÕ—®Ýà'ýEÿñ¬O~¸œ†@u-àÓÀjñºÄ[/S xèÅ£ÏNÖ _‡:„±Ã‡å\µ qœ_}31¡û_8䃮‘k <'Þ•+œWÿ*oÞŠL§ÇïþáûÿïAo_?Û¬/?€Œ²µt¬1*ý·ÍöËÇ„‡Ä/&\ŸK(PM02bœN V×uëz×ö>U3òî+Nr1ª`óø<âÉzήP$x>:U‘Çf*«¡È¦ìûŽŸOwîÚàÛ)\‚l”–qYD›,'ǯå}u»û>½Þîºw€Q»Ь¯weÉŠ>Ž£-|6µIý?êÍ3„“î41zxX<—r£‡ñ@0q‚V ÑC~=¾}(,AÆ»“ÙÃÞ/`Z3f¡T“%f"ã=Úä·“ ÒËLp²ÊóU^¥Xg8]Ñ+âÑ›žª¸Ï‹ eߺ/LîÀç€Á³À6`µÍJ¶&ÅÇ*žÜ-WÅn°ßÔ¨Z·l¨3S ªß¬ï·„@ž®op}yÝ…%€ô8Ë—¡ëåm™Ëã[¹g^Šñ’Yêö —ö"œ¹;>†>á»ÑdÌn•Re Šd¾ ÛþZ ¶?Í&úÛà¹ðš@ài` õ|ªe”±úëO÷Fv.>ˆ(ýê$À%Pr°ÇAÀ–eMhv]X ½õ£‘öIbÅ*Ë ð‹ÀÓÙ°ú;DPWMn0CmÛì]µ7ZËgzeƒÞxþZ4º?ŦûÇà‰ ±Ÿ€O#h Xú²vÅÚCñ&=hûHõÍç‘hš*w@@ ÀUR_¾ •ƒø¬™RÎ:ç8)‡Úò\<¡ÁÒÑÑÛðUšÁ6ŒÕ#jòr;^˜Ò[1Þjd´¯^ærþ÷Ÿüö€©x4ÖPè.pù¤iƒgauSØù+ Àå7 Z€¯Œ«‚R=®@ þIÆ âᆠP¡óë@Ã{øνŽäl;¾H}ÔüÊ>ldìÆÅµ*åM,Ò¿¼×¬þjt¶_u½¼ï^‹g/Ð$Þ XÃ`=žgû ª£íXILâ« Àã¿pëPøç€·Ðä¿hpÚdQpV±ºù`,h¨¯JCä¹ÄitÔg«¶¿g]ty« Þ¾³õ6¡G¤`ÇJÐ Þztº_t=ƒGÅIÞ|‚À“ k(¬\€Ð¶¹o%ßïLi^'›ªH«¸î@mF`ØY¯Ô@@œáËÇ3øÔÛwîb”cPýóôô’à‹ál¨4j!§|û…b&ÕéïtÅ4ºn‹4¤Ÿn&[÷üxð(u¾žŠd¢¿½¨² Nm®o/ÐdzÀàÀ#n‘@(ÇÎf©éa©)À“€Ë <(u3TßIW)“gÜ  ÿ„VÆ ¢<¥ºvèÀô‘ZªKSPü>?xüèж1pöÓ-(ÝmžË4ÞzTÐ?jšm\qÃeÝ€@âi7Ø<ì õ°–)B NÇ+¯+ÎV(ÈLï)‡ @Ý_* v €£ùݤQ0Χ®jP[ëp*VìùØ›)ƒv^ÐtÍ^\=¼UÚQ:>™ØQzòߦžÚ.GxÔþzT¬šŠjåÖÏ­æ%s{ ì‚*–‡@"䥊ŠÛ¾là#™¯v2@}hÀ‡— ÷ x–øï¥ >YÑšC÷å•X,?1<=«cX®ynW¯”å]·À=;êá\Ê©×{ÜRÎÍËô$æ=v®lvmBþšT¢?M©Û2x°ñüdöäB7¨ì$¨ìÀÅ=®|̇rKx9¨‰|h€£· ¼5@Àô‹Æ"D(ûQÑL¿Xà< €¯Ø)—ZŒbÆ‹°ê4ÙW³ûh4ذ§Fí Ԁ̯ÿQ2\T¸e ¬xþª4ªÌnòqçÇÆS7w Px6Áà€ ¬JÝH‰¢ÛÅçoA{ó Ñ—j{?pžž¦V@T`û=ª°][u&[ÞhÓ#:nqMòn9Áþ1+²©Þƒ=oöÌ5<.NÖ£eÌGú6a®ÃÝÁŠÉ^Ú$¤¿“›ü4ØcÓ©™» ì‚M `Ø@ pé‹8«öˆñcê*âžy9.B¢”úzõÀ§À01à}ˆNyvrP«³gOï~‚×\ô úæF2½D!Øtn@;ü\¾N ²zq(ûÜÁ™¾¶U>ÞªT¸?]ÌuÜ·~nÀuw`ðl `ƒÃ`+u‘ÂI·/óMOt¤—ÝPJ¨A'âO™Mº ¿N ?] "à>Hެ¶Uv´Çк¤æáäÈE š€;ó­3]‰4ï¡òBÈccßW‘5»mÜJÝÏRp—eÞ5þ:Eºþ\ÏÿÝ?üÜnCøp(°pè`ÉŒðD+Ôl}ñß¾Ðã /œ{ÉFƒÛ÷(Á´¦iŒH6c\ÐFE$NJi•â/«¶C 9Ü6ÝKã‰Ïç~\ÐoŸË8º©¨çô¥Ð ÌçgDñd×nuÏv§åòyìEWƒ…Í+è7Ÿ4«É# OggS€|=Z”.þŒê"†‚…blk‘†††||‹Jh`ˆ…zyyvvvt|wyz{†þŠuõéÆˆ~îdƒ3Z?úPh&JÛ®D+oš“=·Î,ƒ®ƒu3þ}’ƒ>.–f>«L—†TR «ëû4"­ªÔü‹Ø… ‹“ZæÑ@´ºÔ«uïY¢²fbñáÍÁËVeÔ¦Gæöº¢®™U߯p'Œ– >ïþó{mÕþÐŵŸ&¸×¶~t‹^Õ^ïlƒÚÛ‚KI•túdݺæß?ûßéŒöE),a}ˆÐ…ð‰‘ÓÁÅV¦Û›ÚbÒoEC[³‚o}={ÇØÈ.q €™¦ñÙÝ2;XÁòíÓøu‚„ûå~“¯w…žáøóçÀÛåÍ„4€Z~º{ÍoLã¹…̻£Z1íÒ–‘¿^|FÃ[/µÌ³`M2bAMæaˆè›ˆBYÔ¸”[ÐùÊÛ05Á} cg©öæç¤»„ï'hÙtý}åçȬ¶C„xò¯ö—9Y oÿX§BC0ЉîcˆF¦P'— 0oqéÑ(}͸9V‹<j¦±ûj¾–þ¯ð =€ Û£{0°~v‘Í~É·=¿ù¬ÿšž”z Ü,ÈPùâ]x›%•¿C"RÖ̥ ¦Á¯­ªŸêžzˆé»/C×Q#yJï?ì¾:&daê¼^Þqò’g €ö„ ¾/ÑO’º[ «ëøò  ¬ò<Ǹâ/Øm 6BÓÑ'-¼«ùE_6®ÑÃqTim‚›Ï3ª ¥2þSí:§Qæ³÷‹Æ‚f0 %ìèB¸P¶éJµÍˆ— !%çúøüM8L™—gG¢DDEÍË¿@÷ ,8ß<€[Œ)’¹ù@AÖuÞh²¹“Ït:Xêµ`áGS·–ùÂrufsë²h B!™ŽÉv»£ý¥äq˼ÿ~‰Ò„5cË+ƨMTˆ¹¹ ôjv©3^4’± \º –*4Éb¨VCÚÙº×T`^›Ø šW† XôhQjÈ>Ô.ÿ³¬ÊN>%€ylîH´Ìwª]¦î®1ÐM”"¾I“´ÀUYhþººßwæöÏà‰¿zߨe…CèÇ‹jOàÖDÿ9mZAóøå‹mËa©cBô• ôÿ&ƨ@ÎSŠ-û@a4ŒLR¯yãskf¡Ã×ù )„)Äè˜Õ ½vLg}0ǤûIÜï>Pkš÷Ю׹˜€ÆÕ±ä)õs >»ä¨Ï´ã1xîgÒ?Þ < ì6pWc–ò¸³%éξ§-"AŒ„½€à²ý¨EÀƒ„I‡*°89ù« €þ~(B_T®úoAàÙRn@*e.=×g?#>,¬L¬Jí¿UŠðüp1Þ];äväG%¹Ð§K=0þjÅà]\Ïí?¯ks…_ªífmMËF0’ü;öôÖÍŸÉáæÙõ˜ºMr—hmb¢EkN‚ë&`©¬` †°9‘äP߯À¹|/žôýâõMO¾w^[ë’p¾†×ÓÅE5Æ'n’†“TÏ/í¼Ûy¦{:ØUAøyzÙvÃWÖ_ôëL *ÃÜNƒ?(]Ûf't<»È£èQ»%üpùÒáø~«/|¸ýŸXo›š/ÿ‡n—ZÙ{‡±™ç{PeBÂdQîìÑõ2ä3™šRÿ/®4‡ÉÝ«}©<ÕèêÔàg§À‰ ÌÃØ6ͦ7ò Üõ­¨žèŒª/´~uª þjÜçz˜éÜɵ8.†ïà 4³™P©ÖH ƃå uÇ­Ý—ëëv ‚Â45º£Þðjr¦ìu…³½YµÎÏñÏÅaÇÄ›àÆOn{ïÅì$TÚRØ+Ц…e.äpW÷Зÿ¸”oü5n.ëNmÿâê/>ÏéV;ÜÇÅTv_é[Ã÷,€öhƒŠ™` uíì$¾<Þ‘×%\|÷„;.ê’,h'‹ót%W ŒÇáÅÝK"BDOQA'&ññVŠN5Àè•ö±‚·•®HOUà”9¿˜K,ØÙ#C¿=Iƪ©!õJƒD]Éz%W=½Öûµ¦ H•“âD¹×û<Ë*LÄo Ón$¨þöAÕ^n*1ˆéd(¦ÍÂì½úìÔQ×ùì‡|¸ JSs˜hFbž6_>e²:r.š °ï™m4ǹ#õûÀûü´b+qhÝ]4„r£H8žl‹•Ü}‡süo1¡‚ÁÅ“$æŸîÛÆV[«q9ñï”P&œ[k¦ñ¨ ¬ß·¼U£Ž0?ÄNóñVqœÀvľ­;ºùëÖÑDEéÎ1C; àSºœAOÐd3ð˜Û÷njj¸sí ½#%L»¾ìh$½™œxìv©š}wàQjjªHIÉù/dÀø.Ÿðø^;ïÌØ¡)(#™ÒN*YBš{\O?ýö›ý¨ú;´ã>ší%ÐL2^²ukÒ‡ý^,­Ç„Vû“­îQ=è÷M“þ»(-|›~2@óµ.<üÿãá_ûŒ1@üå¿þ’ _­øµº FP½{cíÉÙ×xŸóvÏîÇQ%áPö5~Å.U:^ff»çÞŠtÕñ~úŸÅûJuì+@{¶S¬ÏŒWÕÍÕš8–’Í:KZºí“4€Ô‡Ñòš¸xtþ—ÁÔ3å~ˆüÅöàâO\: M¶ÔÚ‘c¿bpOsYÍÐ…ožß‚LkâïÀéö«¶žŽ7ýˆÚëtŽrΙ¸'=^(XÙ·¹þJt²ß\‚çüï¼×®©ðåx`´IÈã–82j®»Üž›­NònKIªÙúcÔ€×íM™ø16#£«†„<ŽÎï34NŽùÊ2~^ µß¿Ïi¼³0dù¢Ä›™ÆÆ€^Z“šEŠ{aõ,ÒÔþå¾L’qBìùp$°™çÇçÔ [ ¼¾×½ÖÈ_úp MÕLp[í½g5íGóÁÍ·À4ô«Ç"^´þì™ §O9¤¹‘ŸÒ¼ãøË"¬ö^ËåÛÀ~+ÿ¬*“@àªöeL˜Û-¯p)6:z‹%y»m£˜ÎÚÙ’·¼:ç7Yñx­e þ*Ü Þ9½;‰ðAZ[½  5«êcË!ñåIí·»ßÿ6ãfT%¾âQ ;¹jG耳óF÷³Ùß±É ‘¡óË_·^Ï-K¦«÷ÏÏWŽ} (ìœ}nK66S`$Æ6— Ë Åèýý"ª³:ÖÛ<#eßÜçQe.1;Ü‘þæí’ÜÁ¸Ü|(<€jÊln«=¤_­Ý„|xwëv?¯‚ ¿ˆ”KÁXO¿Fœ ùÏ€a““¿"X±oþädÈ'vAÚ;LþïOhJÔÑ&es òäVr§ø‹”žêg…—1¿OS:P)£R"¼ Z˜—7yØþ:ܳ>~› ňÌ(U3Qou®eTbó$u^¬ï—ÿ¬Ù_Þ¨ "áæš„pq¡è¬óN(6Úìc`_- ÛI¯k„?’©*;ª &sÅö´˜lQ ½.ˆÍÚ¬S^ÇÃúò„DÅOõVE°P«âòAŸþ:ÜC__ÀJ58J•¤šÌŽÕP£Wý¸ëà ù×?;æ¡ý·Ñ}¤ºË3?R®/1}×ÒoŠ(¹KËÖŠHï›aXÏY‡ý 2N–ÍÝIÛ!²ÙzaVîN $'TLýp¼6EkåâY»Q´1þ:ÜAkœ€>á €¶©‚ÛZšðjÂñ:é7Ð}#{K¯ßÊ´4à€¶96l§-qX˜;^²ƒ9°Øwİ7¤Yƒ´xÛû0ôÞ-¯ªmíÔ+¢{«ofd®Ì¢ŽVËpjˆÄ«kQÄ©¥ƒ¯^%EéÙ;+Ü£¾e鑆Á @Å‹\=w®=T~˜§óæïý.s^EHOu/>‚ÿm;®ÆE¯l«­i3E{ßÒo*9šl°I=h-8ÛûŒ]Œ™K')aŸ;}’R¯ü8ésÎ,r@FÃÎöv°¯C{;q-ó(þ:Ü¡Þ2hè]ƒ9ÁC‘d„•±–¡ÞëÇ1ã³ïÁî´ý¤ ~véa]õ‘‚]½¯­›ûugVÂâæ¼eÛ:„}œt3Œ™_v.Æ¿vÒxž ×fž´îöSµתOÝgîRÝù[ÅöœZ Ÿ*+ܳ>íô–†ñ À$©NÒ¶Û D—Ïò°Ïú¾$ï«bëÿèÎhÇ^nŸW>e)û}ÒpÔâÙ~?jmßéäÌçÚšÁ¶Àx »_ëp}I"‹©Ý*>¼€bÁ·2LËQa­0väòþê2ú.L5±„½D@›0þ*L]ÚoÑ8¨K]·¹[•ªÎW«n­ÙÛ:ëËk¹¨ëºÖ½³5vey˜QG[ýYð£¸v>ðÀÄTY”o•ªê®¬ÌT‹Ú´Û·==;šº½=DÏ3qmXáëN#ImÝõ=ò»€1Ñäã€fBÞÊœ'íu=w¯â@tÉ,6,]m­¼ őמþ|2Z+¡œ©A T„)yZmQ@vÊP´Á¹W—§¯§+Ë:Ç>lUø#Þüù³Ct±u³jåmH³o œ¯/·iš3r²·ÎŒÉI«q¿Ñ\õ ´hhm†è½œ–≿gÔOggS€»=Z”.t´5(!ƒ‚†€……‰€ƒz|€~…‚|„z…zƒ^cj’ƒ‚Žˆþú\z®Íí¾×MÌýò†”·•uÕЋ;×Ü[-‰×ùÍpÁzá$KPûeJñ¯ ÄÀÅèžC-øo$;aÉ‹¡Dòb@;'_Uã6ŽÈØmžr·Ý"t…˜~“bLÁ‘ÇšD)ˆ»|SíÕ–ÃqðZKè‘FïK¸ä~ÔMËëÞI‹í¹g o€–âX pÊz»(6扖ÜÓA¤>ŸxÛ…è"¾=}ù±ª~u¥^J1úˆn;eå¬*à“>Q­=ž•Ç•á4DöXVѬaå‡ÿ謘écé“6žÉ|§i‰%Cëõñ”×wR,º(t7þ rï ž³`1{ÕA·‹+íóç÷Ð:?‡Ï溂¬L¶Ô}«î&Þêù ó5VË<µ¤-1¾Ûýáfï¯ù{|ðֲ݉™G×.ÂRí%Ï¢§‡÷_RîHj6²¯y«T+ãMÍ\Ò —Ä¥N‡è nNO"ÞÚ,‹® Ø·G“æˆ:°¡ wÖV<ò0eñ±Ù¬.¤xI%—€Œ?Q€ïÎ[u÷Ï»ë4-ñ;ÖÖY­«CF‹9Dt /¼ÇöŽÉ*p®ÍÉ—n}6&[×yÓw Ï`¢tãíõÜZ刨 ºzÙã×? ¾Ú,c'*ÑÇÖj'Ú‡æ€Ç0ôí¬*» _þÞ?kžšÃ/_:ô¡Á5ήȰ½†kÀiÒªEç)^  ®‚LIeGaåVÝV˜çþÊû‘'ÓiÿÖ'ÝÁq¢Sn*qÄAZ<«éc'½èÆÊ¶N ÷ à3§-«þêŠNHÝß÷D«”Šù Á½ÛU‚¯†šIç.ßÞ±ûØvÿqï~‰™E à12p2ºDö¦=I¦Q;m¨#â«´ˆì®ú¬éÐ:Ö=_…z($ŒêEžÕƒZ¨+{÷cõNžá±ÒaÁ5µò)d èôpñz‚-ß}ãt–>»rû”æqÙ"%î€E"*€Ç@¬*{ÂcÓ§ÓÍ4;[ûsu_—L«AC˜¥[\ƒk#À/§E¨ž€jìPs8š·Û Îüæ‘¿/ó82nû‚"ôÒ ¯w\x‡¤Æ’œf×¶6åùVÈé>P¨lñþúbkôµ`lQ^ÊN0Ûlº=—6új¸(å>,—x”ƒ5ÅÚC…nÝÆØ¿)6M¾;9ýØN€›¬ô·$k/k§MEÄc™ï@¯g¨Sfk7BPwãuÄç´E¡†p5¿ÀûìEªõõf*2lX]ü¶5dy¡‡KăpðqWÊ÷ÝÆCp£(ÞºLl=4—²ûŠøžœã tpÀã ­ñ^2Æ6{ÖŽ}—O ŒZ0Ò[‹P¿DCõRñI›NwÔ·Á,§…Y5Ý×8Ãb««€ŸìÄÊ©3ÍÊ >ËLd{øx)[¯OmÑÒxpD·Ve¯ ѬIì %…Ïül¥™¡•!A˜ó"a²YE#¢€ÿv *®Y<×[ºÈ})>ÌœOOQ€·}{dF£Ê&õ”gÛÃ]÷&ÿ¾n$vX±Í±t-ª‹Psg a‰ñ!Ä2(ëL}¿9Íí¾íKi+>,åÓ;èP¦ ›²N ºô8ÐÃïƒÇiø¶neoh@œ†³óón¨9ÂÐ- ýäñ!X×E”>Oq땵º›±£H/ŒÏkQ`Ê4ÔWº¥¸€˜›{µ’VåÚIÚ”&G@+ž÷–„@«Luû$b}b”µœ; 1a;h‚1 ðEÒ:[,z­â,>šˆœLVt³Ô°*ƒ½EÓN)-Žd*çÝv“‡7¶ŽpM¸¼œ>>ª& KH ë¿[ê›Õ&*$ð{ôïBê³…ž¸³ôtP£ê(Ú+škü~Ú£¹«Ld{Mó}ºIoÍ•4BýLÁŠyË Ýe[ñvƒæ¥½Ð”BÞ¥Á@ë4 F:"ý¦û÷Œ\Ûê!3 3–¹°ÔXH‡riÈ Gv°…·RfÃû Ƀ®64yõçè¡îå¡Þd—8LõtôÐ{+>]CÖÀ»LmßÉÔÜ·›UÒvÝ„5¦Ðƒ€Ê4)+ñI¯¦]ëSS ߃+×¹¼ ¸šL­°¬hù&€ÉEÈý/° Ç(:¢Æ¡éjˆ£Gå,Ð ²ã\6––á<¿6d!''|•©¬.ãž&ÙlHA]Uiˆ`éãeÝÕí >›L}¯J\ç•ÉÞš»!%À†„b%­ˆ­ EsñÙ³­¶Ëk:on^R­†!U5mp’,Nl÷¨²håð}¢Ž¯‡1‘uU1Kéfñª¾d K-+×bß9Ë8êÎNCo]žÔ›;ÄÔ¼î@éEdãró½> ƒE£«|c8É·ÈþŠT´Ï1\ÚHzxÏÞªiΞ£ÞP¹Ý¨Ÿ„•Чå‡'6†ì®jMp@¡o‰þhÕÏ$˜Mr€»‰zA} ÈöÏCGa™5.f²¾z©¿,j `*ÝÜ–0ýÖqáçZu^išßÕD?‚X}Ú7Ÿ‹š@ý¼wm†Ö–TþŠt¾ÏÜT;“cŽþöëã`”í¬ÙPk|MH˜m~‡'k-}ë_©ã0¨Ctá,¹_…)•)ÇÁr.V» ~ö0žîïÚÚµö}t®ºËN½îÚøQà(uêœYP¥üøߨʻ½½AÐ'É 6õÒ¶Š¡þZTº_ýåÛy;šÏ·õa7h2€öv*r­{^?Þ'\ÜøRk=S‹…ø1Å b“…R +€ê{Ap^'à{Â}¨H(X)QtPr™æ;’1"ÚÅ(lq·k3) ‰…úr:Äé—)í3coO‡Xïõ»^_Ù—^ê½·ì²#éKT²¯þå׊Ë6mÿlè8 ³Àq[¬3„ÞÒ{b⥮püéÖ,f D] %Jå‹TÔlf,q(hÞäª+&Ý«/êm4_ ÖGè~h§PÌÚ'ÖkonùLÊÖÒ®ãvkÂÛ­ .uTÃær‰¦[;,"ø>[t¼?ññ]Î>!,–öþ4¸` ¨wl­Eô^ü¥«í_ïºlèBKÀÏ h…Ò®€ðè_ blº ¼ª$VASDNuN-œÁ¡—ë|j¹r[øR¦åbã~9ÚXL¡–§€o(€6£Îtz¾2ÿ°^i…&þ:,¡O~|·ñm§[ðè4(CÔ×ÛZ¶èÒÎA]¤Þì6ù?Ë @~o³‹€ç?wäÚ?' "0ø| ǘfJpÒ4nV(+À8£Ôd6ì4¤!‡Ä,¸=‰aÈi”ö5ß¹X\xi`äÕªÞD‰,“^:–v+èûåfâν8,5ް£ÿÜœØ_8ÀZ_K€>©H”ÂÃÏgO‹â´‰Ùˆ¯û}þÌœŽ8 ¸Ê ›ÇÖÎkGÇž­©puB@ #!û¶f! z›8j~G„Žy>´ Sóó’J”ý¶½9_f̳ z‹ÜMšG4­_|Ô)Ûº– Рž¤mõ¨,6d}ÞÇÿf\tíÒöÁRÔÛÆó)ù`º77“bzhJœ Ó—ÌLLZ8wô…àâ‡LÞR³½ñëµíVH¬…ml„¬”¯›µ…(@Ôä5œâõê4ÍŒ¬›¯Þæ2 @‰3þÊìêãOÃűQâXÙ/ë°¿ð€ð€¬ÌGêâùu\ÉYÜ3æIæm&ܨ€^Þ?Ôjð=ŸV¨çI1€]Ð9ÕÖa7[ç_§J±ÒÛ¯B4¡7fz”(íþ˜{œåÝئÊ.@3h*…Œyf¤°ö™ßiU/äÄF¶˜Ï;À³ ??¿UüS@  ‚–üþ"1¨~-x(ë±@Ä îòw [kÁ[ƒMI?'Ùmû=ë ›qñxJô‚SH6þÊÜœ?n%=xN½ÈÝ?àAЄ`ÀsL‘‡ƒxqcIsX(°õà’ °èüM€æqLXÜ©@T2ÀâEÄË‚fApÛ¸qL¾r®0Öq’Úü˜‹jÔ_3ÛpŒD“‹èÊ*€šýþÊÜlŸ?®W%<º.4wÀk¤‡  Àæ0âÊ~¥óŒ…t¯k`Ka£À1œœE‚·d8lH•–RW9 .U©œ‚þoqˆê ÀüHKÊ”–›ÑC…èL3ú”ÙÖnº…‚úq‹Öö²‹)†.þÚ\o÷}3ZRÁsÞ…Þ°MÒ @XH0ÓX̸"«—3ŒBıŽ øB€Ç ŒÊ%²€Z-à(Íä(RåP p ¿À¯ ÒnlþµÜNƒ‘mw¤Ù.=k^çÖ£]«Ž–#°Ò XÞ,Ýlúº¥²w'Ïršò`Á4<|€é¨EO¶ñêݘ'¾Ö€‹7 ® û)€à¡'À» €>PÞ³‹›€ç ¶$°d³!£wÔE‹¦r%®÷“ÝGõ`÷¨g§!| PN4­v@ÊêðþêÜþºÙí‚g¿Ä0MÏ˰,ð¨Ô§ñXf5ªI] Î$} P° TóO*à}€w«€(ÔO' ¯ àüxüаø„9‰ŠßÝ~ý÷"ä¿B¬Þî F[±©+—uÎ&Ä{ø#åþ Ý~¹Ùu ÁíÓ w€¦ àyxà @€ =ƒ9‘YÌ—N 箵 €Ê©(>œÀ÷¨@€(‡öxn-ï.¬!Þxœ;¸eEøûŒÎ£[}‡i?±ôß7¹yl·4Ú sN•åó5ûÜúRÂÿn ? ë˜&€ß.± Ö×[Ç<‘Øô«nƒãàœ 4ê …z,PƒøýV¶€½PATNô²ÕpKÀ_X‘ê½–ÍqL6c1ØŸ•aè8KÇ­ÙšBŠ[¥È8F½ëÜœ_×£’AÏYëðÕ„q€ZÀb °ÑµèÉp:{ ; jŸí Á€ˆ;/,&>lRàUT‰8þGÐ@PL W£ ×¹W'¯U¡<»¿˜‚'¤ßRäMo4ÖÇvÄ´>Y%ɰ'ÁjÕÞêÜœ ¼þ“ }à«7š@¢<07€ÖHI'ö—JB‡éIÁ(–øþ Ð|€@°Úл!¼Æ Dµüfá%€À›àxC‰Û-²RÑþ ƒ‚#èS°`矋 ªåÐ…»6g`—@qß êœ@7O× ûÜoŸ?XýÝ1òœ¥ÓwÀm¤‡/  퀠f?QôÈk5 §2ªè§ K€×6S ØI€Á5Rø· Y‚_ ÒÌ44\K­¬¸—3 Ÿß3Ø%E¸x_hæékü4Äß‘¬”ärõæ6¯~`Ë«þêÜlü-ã?)󜧩ïMÒ @XHPX6(< ÄH!®_5BNãºør¾(ÐSétº®™tðl¼eî|}ƃf`»€íÀx€Àx,HÇ«Ü>ÿ’ú—lóÜqgÜÓ”€´ ÐÀh/0vÀ £Ä“£ÝfQ§-&-u`ÙE¯@¾(â_€èXXÀa…¨lí » ÀßE È4=J ûgÁÁ[hñÞªv ÄóèÒîÂô0’lGîÌ#«¨VWþÚÜmŸ¿Xü$cž[ïä;`›ðp4ãh70v@tæsÀ#®ä^Qñêq!òæLB?Ÿü®o@7ÿÌoð›qb€ ŽÇÀ׊ œô™ J¡þ]¡p è {n´šþ;I€øìa@ø*"ÈèIËEÚ»Ü>?ÝÔ§©éÛwü\@“Ý\ 6€Q°ÄD}ÑÇjj´\·9D‡´¥P²Øž ¤fuà¿$P‡P˜:€øËÖH&êÁ‹Zà®…ÿx„T×€ —UÀ¿º?ÉÅ"èwþ\%´ÅmýÐÁí ãþ Ýÿ¾˜¢7µS“Üš(v€o£›õv‚ˆ+y¤^^¯¸š¹2/ö$ àeÞtP̬@|¿Ð€é„û‰«k# à’Iüâ?wiª•íg¥Qƒ&AîI’¢Ööõð(Õ³Ö.†C 3×_Ÿ+gø3®pÝá÷{>+=mŸŸ_L} ©Ýù,0Ÿ5€åÁ5ƒk»yhëJ<ÄÖöt] ìÞÁSh`ûkÎá]íàÿ| žâÍ—ö àÃ÷i5ƒÔÛG¤€ÈürLB÷ÿÈwbœ—Q¬“¿ ¡[Í€.?Ë¿².:X€|`´ý”Ä¿O8;KÝmŸ?·žnïÒůÔž;À6ò|h1¢CÂÕ4æ~þŽû™2œ_N*uP¥4ÔÖ’Ó4€æÎÕÜÍ×õöèöÇEÐFÙpÿåó%3€Óë0‰ S3È Þtˆy?á­Ñ)rüG‘DZ†áVðŒûì–þZüøóð"ä¿ý±ïô_ÜÆ JÒÀ£âZÆ\w¼Ô]ŸVÏÚçPó>“mÖùáj@ÈÜy Øyeϳv–ѬÚø™hàªêy³Ë_…^÷ÀBïÔ^†·tÏ*\ßMµ†òä¶*_ÔãæEÂ…ÕÚ\P:Àÿ5&SM}±<}ë*I›¥ŠopÕOggS€8=Z”.<IË"|Žfa…‚”}€†}…ƒEff††‰†{{…q~y~vvt›ªc¦¿ß÷!ò1 oõ} `ÖxYFgB~öéÃgícç÷Û;7Íq:1JöåSÀǾ Žó•ÓÙRnf êX1o^ß°°Ì•ê%s>«œêŒªHå9ŠcŸó–N½äJ³aG Š¡öŒ§8Ì!¿=«/¬ì ŒºdŽ–“ÁÍ÷;þZ­Íƒ‚ó,Ûý¾d[‘+5Û48Ç–³û·ƒÏݱfwòIø…yü¼ÔÄû¸'§fdSÎCh`~v•ÈR†f8Ón!¹¿ÆÜb¶VàÚ mááñI6¦íá‰ÃO„…\MACf3àÑp꙳†Z‹Ê*Šñ ß·h›€C#>Û ¸«7*Ïþ¨tß.õ44mw™­ó oþX'$ÌzöùE2m¬1¬ƒD`N•V¤¡2úÄ®RÞn±Å8yì×ÙQA†œòåB¢'ô2Ô~²ÓèÁ£\M>[û9ÞÏP¶B=.âE5ù/\ˆ{OíF¬úWf3·öè‹ZB0:…Ûv«ÜùžÉ¨\ñ >Ò™,¹Vf ª[ÚsÙº>ùNÑñ‹Î½´¦%Æ 5·ô6í—n…5š‚Ôø‡í5É<6øm¦·‹ˆ•‰ôØ:ˆŒ¹å§ÅÞ uFv† áÒæ£õ=D#€gj5cŠmT÷SãZÙÝVhkq üP’a¦`ŒT¶7!Lñã Bã¬Õ6§HÐŽX6ƒÚ)‹‰X%Å›„Æ®ôëGÃ9 ]v¬ùù BÎÞy4Íeü½&¼`q6] Åã€úä6Å™O/”€$ôOn]ÜêøBÇàÖéZÍQ€£‘q3«»nGGeqƒìóWKd{Íäv"+I»l8Ö¹—"Ÿ=³zË}ü:¹ü“Ç[rþô=Àðt`+ Pe•±ne)Ô&¾x³7OÈÎñùÞñ0PÍâï½__Ê ÝyéÜËÙz0 ¬þgEŠJJÂÏeW.ƒÁ@:Ö¤m¸ÿÛ˲¾ct? ñaªP}#fÆ¡E\Ç1ke‹»P;ƒ_ÜNêÛþšl[Ǿ}ÜëÊ~Ø/ocv'ö[Ôô˜¦«E+¤±d¹5Ö"Þÿõ¸YQŒàkÚÇ?‰¶?ŸÔÛArŒESúÀ˜ýi§öÐHçw#P"rè#~Ëhm!—§ÅÆêð=ôìE³YnÑAŸÌö{¹ZÚˆqŽyÎyÀÚ¼Ôx­ ¤k\¦ÇS*ãIö§~ÐìjÐy,×P`fµ¬@¨µd@ ´"ÔŸ‹ÍÐÞŸ?Lƒõ³‰’§F>›”\Yj_Q1èëÔ4äð¡wOÍ>*¿o À/]s˜ÿåEŽ ¡½õÆ)FQù)=›  /ªÓ®Ý€Î>EKÅcèZ±rD´÷`¸UŠ«\¯¯Ó”ýï‰Ô?FŸÜ'(šÀ,Fð|ø˜†¾\i@L¯Ü(°(~ßÔÄv|Àæÿ–@€Þnq@ñØPRlÖ«Jƒ÷hnb7z3·GjFU<ÆvÓ³ïªxz ÝÃ>5ž “ÇÞ'ûþºÜ­¯«”¿“<ðéê; #€ÅÃá) ”[«SòXU½Ç"y=· À Ï/´`»- øoð‘}€‡Àì’ö§¯¬¹"}‹yÍ䣃绾À¡D8ÿÅõE­–¢ÉsükES¡`_I±‡Þ —‡Ÿ6þªÜl›Yþ’ u÷Øz áuž‡O°‹=Àdš.®¤mܵRÚ#»ê·,@]NæII(8yÓuÚ˜Ú¿ ÿ¬B\8‡MîMó+£WB7‹,oÄ”kCXk±µíÇeµzÆÛW¹Ïu‚a¸»Ò:Lo oÎþêÜLŽÏpQׯ{‡ßR¯¬w€Ó Œ€:2«ª.®À„Z¯é¨‘/ÿ¾r¬(Ôg»¡ Ý}¡âîç‡Z ðì»Lš§_GHÇì<ÇqhH^Y’ìt®lO£Þ46AŒh]å>ÿ¯­üœ&²–%æ”Ú ÓÈÝø_ÁÑë:>%òøg7úöaѽïlã+H¬Š‡D᪺Î1|­å¿ö–4ñåÏz~û7ŒÈý$ ôÒül†’ööËX9pK¢ˆÔ[™2Ë÷'2‡E¤°¦g!ZîY£±ÔûfECÓÕ72û +€,æ{Éž¨¨»™¤¥+S•ïn5"êJ_>‹•¤?õÓQ~…Álô¡ ZóÒ`¨ÕiÌ–¿Ÿœ…ïN>$Å“„Ù_Þ«<.‰D×\¡Ì~w¿9VRx–7½q]/GR½öNSR Ž «zߟ1zô0>)xýæ¸ÞÑxq§sá¿[(urY²n ÖM@Ò2Ò—oÿ(n3hF¥þJµª?õ¿È£}I-ž+úƒúÔ`pI-çør½]Ý<\ÜýÌC‡áûû§Op*̉ëìËëEj<ïEÞt÷õðA<—ï…£Þ›‘3’eâ”vÈ‚ì ÚóJ¤7 Çè> M¬“×SÕÔç»-Òm"Óuƒ¨ª%Ä6Ø:²š‚ËV›\h{ˆZ,÷(Ú®¨cªi}‚qþéè~§H\N_îƒÃûÐîøþA†ùðëeÆ0-F¶œ¤Ãö ½=\û ³pkê˹·áùô*‹çú1z £Ã¨Ažà^G ¤¬mž« ÉFaȰk³Ë¾¸M{„9Ô¯ƒÙäêx=›XÊÿ\áJ0Ì©œÇ²QS-_É›ô2°‘–eœmqÎNó õ@”B†šÓŸIX]ë®ÒœBÀäX\9ƒê>¼^ÂTþº¦ÇoS‰úß1oƒýà»>Ðyð °(À7Âãp(zØÙ–EQ¬ÜÒ{ ,6œÛ2 €EK€å€èZÖ»àñÉþaªÕ0üìÉd@Pœíÿ¦u¢û“ÕÝñX¶w˜/·xùìK¶¤,×»Þœ•«`®Ó´„8ïÓçis¾ÊëãÁÕßwqûJêì @gP€  f`FjúámLÓë÷ð8¸Éa°€úc|·úÇ%üg]€£]h^NVP(hV× U) ¶¾0z…>€>§°Ýõ þ+° Äù_´A7te.»ï2±^‰æ¯Þº\êãE3==·rý&sæ7`xÐ (À‚¹ °`ˆhá‚·*x"Âï{]!"À–SÑýÔþÀ,@N Ž#¥¨ã·€CþžµŇ!Ð,Ø ˜à‡gµÎïìß5XØýkeâ Ær¯båh·%¾š{Ç=½ïDmÅô@Ü  .¡P#t˜k€‹ÜMšÈôܤÍìSÞð7@»€P,û#\b.è%5Ù­‚5c{Rà^ØÀÛD€Jév—$ÀðƒS+ˆpv‘ ¢(T!ßà”—R‡“q ð b€#»=Ü2ü«À-öë@B˜Ùœ’þŠÜ¬ë€ú«­Jˆ€Nþ´–rj¸È>ëAu`YÛ[8=jÐ,—Öï a4Bè Þz\¯̨¿Û‘ÚŒt4wÀÿI`ñP@;°Àéœé@¡ÞìëÍóªËUó!è°¸ÀkÀ`½€­,€(€Ç€ëðdD×*2-p:†Îz¿Â^ Ì]ì¯5»F¨×§sP–ÌÄ|œ˜j»Ü­/šQÿ·›´ÚwÀwè»<®|`ú';´ÝwÀwX<,  ÒC‚@”ÔpÔi·e$ ¾g@\¸j@ð¤$úR`€×5À<dPŠW`–ºˆf..¸†Ü†ºœXÀ"S[®˜YƒΆçT þšÜ­/>¨z'cmF¯ïø¿<,   ÁB`ä¸2Øyë^ƒäêð}ªv€ù3€F@ ’íxì˜P€áy€ú$œ A÷÷ƒ)=z N$lÛ“l¹ìüâhŠ]›ÁÔÇØº"ÞªÜl/ºúKÛ í’; ¡ÏÃ&0P€æœ#òD 6¼; Hq-ÀÏüµ€í‹˜@¾( €"@ Ž=&^ó@ûÀ‚}RbI°oÐEô¯EZlBÿ ­A?æ »ÔKÕ«OggS–w=Z”.ÖŽè ‚‡†ˆ„ƒ{u€{…z†„‚t}‡|‰€~wsu{kpxlުܬ/š„é“Lh[ä$sü74Aá0‚‚€™JÔè”O”ÅÓc ;Jì¯À¼l[7&/ xðÁÁ¨Å¿ë2`fÀò§_i“6̲xô8ØNvuS_Ü  sH»#c£4î'g>>,1JûÜäÞï.ÏíA[ÁšøÌ`x°°´¡À6€É‹ŽÔÈå¸Ö £èZ=(Ê—aVg\Þ )ÀE/Ôb¢€ï¼øØÀf]8:€ŠöŸÞ¢€ý‡+2Þ‹‹øøuË,˜f‘–}xôÔø-y°yü,ž\ é\‚mk®¯àþºcß— öçNãmÃw¶i€€D+8J ±Àìmʸ'òœ›ÊÎc—Hë« @d•ÛÂÀñ¤R€A"[ûŒ¶ÀöÏ?丸Á ¬ Ç!´Ø½ÒCù=Çj ê‹ê¨À<^çí""@tßµSç™=yˆ½'üYt þúd¿Ã\Ôº½©zgrð€Ç€€œ ¹ŠJnû¸v”áàË‘¢q·Ö €À¨xð)¹ŒG€zºÿŽ¢pò^ ¥·ß™(€+ÎVâþä¾èýó›×aõ™þ߻黢k–ñKQ9JÇðúÏ.)«êžrýVðþª ´Ÿn®eß}SW©I}€vx$h1X>@Èx.º–w†6÷MHƒ‡!¥lý€ök®M€:»¼¶7*Eh_®O‹xèŽ iзc²z+Þh02ÿB_Zßíæ‘üzýÄëþ¢ `"€è¥L)cËj}Ѱð ›êZ¢¹þ5´”ÓÅÿ·ßå ¸Œ½ *žvƒh¦SÕ)‘²[~R²ÆNÆç®ßY¿/4ã›Ä,ªÍÓÝQßú¯û®qL¦cŸž à¿¢7ƒ$€´2.~¼Ý°Š¯HgF]äÞñc5Ú~-å ;¿Õb^çi¦çˆ^‘2Âj}Zk¾µ:ëlEÛ0ï²oµY×þ à ÐY,Àˆ⣯Íl<=ylûL“8*?ÑØß>ð”o¤·M­NBi¨@s\“΀»Þ?aIÀ ‹«o¡WO˺omÅòhâxJˆç· zlÈADââÓ†cþºLŠþîvëVÒÈÖç€ã=X`±€€»²/‡ˆË¾=ñP†+“£4ˆ§Ô• ( ‰ fà ¼Ñû'Ã|’>À·Ð\·giòÓÓ3=„–/…ªo¬£a†„Ktôòû¡ÔÅ´€‹‘Ã% þê ¼ÚÛËz’úùùXN0Ž'A z,8Ù®=¤£?Ï?\|døü¹Šƒû*õäî T¾ÿúúÂc’ è™Ý­ÆΠ~{”‹?V ¯@"¸”#Ðu¯–“Ï‹ªX$e¼Œ+ˆ‘ÃCfIžxÌkÐï´MŠ9 -u²áï;ë<ó¹«ZàiHMÉ.ÛCóл^ÙSèÕn©2«Ðà—ÀëÓø%`;ñ@å'Vøüð!\^ý¼®Õðz¡åþ{w/Öûæ¶F3žRW¤}w­ {j·ËóK^æXZ¯‡%Æ£zMþ uÏì.á¼Çª¿"z¶ y,°3à @ŽàQ+Ç”AmÊËwÈn¿ïƒã(!òƒ €·*@¼u`§€š€¹-a‚ àÇI y)}Çó1 Èù“;ÃâY”ж<å:ßf÷–+ý,ød^^« À”5°GuÀœ¾uË\Šž#˜ës§Ñþ‰¯\w`ú€àÑl€0¢ƒÙŒ1Õ&ôÙ]…`8Y¥d¨PÉm0|_xò&øÇÀ· @KúajŽÀÁÁÒX!ñz’úò;QÏiu÷\%@¢Ÿ^“Ös×û}?wïÆôÌ yÐnp;Fl€Y€^T¨;æôŽaóB”™b¿|—šç§ÁÎù@ áäåpPY ýß pðvÞ‘½zaòÊ I•ô·|ÇØD?ß6€ud'`‡Gýh­r  MPõöbã¿oØ×P§wà(ް,$檺µøà^DmÒy‰ .Ú0H >}m`ke1ž¨àƒ€Ëç_W`@}åSW- ŽÒë«4"k%t· QŒä‹t©?Øß^Òé1,`R4¼ñúîÂW‡DHí\¢È‡óÙÎãÞMe¿4¯ë—ÌËÒÖå$ž ‰™ó¸Æ 4}Á:0ùy²¤R…4v"@=]5ðAÂ]ãáðÁ˜‰ƒ6ßñd%@“€‡?ªÀ`ÓôpZ½ hÚ÷#ûD;Ù-taÏ8%¡¼Ÿÿ‡ÍÒbúªìÿ/þ£¾7ÈûLtÿØMƒtÈÒ¯OÀñ:ŠEFÛUûÚæ&W´†q|ë$ø‡n4³þ°$>ø|r  ðÁÛ,Jã|=ò©*4úiU ¼3(ͧµ{ãgRç{©BÿYåÚyÕ8¯–”@éŒb–Ç4Ì?u>ëŠþ»º1¹îdëˈ^Ã"2—È}m)ÏšTúáDø}PWSÀËü¶ <0møõO €ó÷ÜoÇìˆP!ˆ@öqD´ó1 b Ó+ü•2îí] =÷'j=†·S ®sÛLy¿Õ드;É:=Þ œÚĪ¡³ì«›Ùœ£3 Í >MW.j†[(ˆº÷Òg!p…Ë´äô›À†€»‰!€á³«-«Ž­ •e5“fgØçsë¾îÒuæú-Ù‹ÓüN÷zþú ´¬a¿dî>{€‚§%ØËÐ °¦E«éž8ÝJ# ¯>2ß¾¼¿lR(¨à| ·þo)ùö/jéà˶ÄPi ªÝ²VÀÕv£”µ‚àküÐé÷“8ä÷p{ŽMhÞî_™¤kY*©»·ÅǨ‰õ â"þ -}?K“î¾s³­žfOÀ  „(gÙ 5TøúíZòðÙ¬Be“û*ô¬ ['ÀtK˜Nê”þÏ 8ÚTå»÷Sðacu ")!3H†\d‚åWº/¿ÇmCþ=À* Ú—m“ð_ ´?ÜfÿݹËAèÈ;pð,ð€€Ä\-&-Øþ&C<çõ:7U@²‚Ø“gÝ•ß¢Žºþíˆ í¼;-mŸÓïËÉäÜßIjà ¼ôÒ¶‹nÕÂ|á©eÒ44¯þ¦ßYóY"¹î\òßøeÈ€<>V_DŒ~ÿ˜6_==ÈfûƒÍP:–Ó}Í›¡Hha'Ù‚rÖ×l­~ÛÊ ˜Œ›øÍl9ëZ“ÚþR p›,uß„qßsÛZ„zè |‹i­Hb)¡öP“Óö­Ú~þá7ò4䞢ïJD6Sr=®Dd›(¬\é‡G|ºÁöHFÐ?OŒÙKX÷7W0z”%rGÀ"¾ã1½Rf§YíüÜ“¾¶Dtw f>U’¦Ô"4'vL Í>L97Ü„Æ^@\È®û…»wÎ:v Ý€ÈÉÄ£ Úµ3B]ùÃL žòÆö Ý=õ\«>ŠàqÕ)bD}›nUVG2)õ‡ì­e†¤ãÚ_¥Ø|k>;<¢Þ¶}¤Ã êE.¬Ì­µhh5àpiÒ»‰ëlgíÝÉv€xÀ°Íö8]A=ä0»;‰¨§zxŸ¢Ñߥ7z¨! î¹¹BÁ€:2†š¥[çÕæ qZ§·“†oË­%ÔL¿ØJ‡ÒäÚ þ:Ü‘¾¾(Ì|Pô àêIʵBïçt»-áæd¬æ¦(4ö•Ln);- ±bc’Kw¯ ŽÈó&œà„vKEÈI&äð¾)øD.±¢…­t {5*ÞƒP_AŠêéîRÿØŠÓÒØ[‘a]âuÞi;íþJ+\ßóãâÄíϰ¨¥J˜Ìu&0ŸYÏý=µšXZÃàÁé80‚çVÜ¥M›ÞòT-Û+#S[Y=lS-tü;P¦Z;ïWeê½×æ¯HpcÝ=Ó£D¿v}tèz3(G{ÙÙ£ƒ†‹›£ãÅPáXo5>;;Aßu:NSwÙÚ €ÁÙNÎ]JOOOÓ™8ºwttïÞÑç)&,ÌË¿5\ÎóÜuVdŽç©È/>ÎÅóTG ˜äõ¤J xy!Âz ¼šŸµ1…Wë³æä4žZ`@Á|1áåEK ~gtkboard/sounds/machine_move.ogg000066400000000000000000000140071153150217100173140ustar00rootroot00000000000000OggS!P¼yû&ˆ6vorbisD¬€8¸OggS!P¼y´yí-ÿÿÿÿÿÿÿÿÿÿÿÿnvorbisXiph.Org libVorbis I 20020717vorbis"BCV@$sZ2f©sØ{ïB’ãBÐ{ï™AL¢BÌkì!c’àBŠcªÐU@g½—Ú{˽÷Þ{F¹gÔ{i½÷Þ{Ƚ‡Ö{ʽ÷Þ{ï½÷Þ{ï½÷Þ{%±g’{H½÷Þ{ã°GŽ{¹÷Þ{e½W’{(µ÷Þ{í½·Ú{î½÷Þ{©G{¹÷Þ{Á¨'ŠzĬ÷Þ{µ7 {å°÷Þ{ª½—^{ê½÷Þ{†½‡˜{н÷Þ{$µW’{(½÷Þ{†½WÒ{h½÷Þ{ê½—Þ{ì½÷Þ{ 4d ¢(Š¢( ² È@QÅqÉ‘ɱ  Y HФXŽåXŽ%Y’%Y’%I’¥y¦ëº®ëº®ëº.² HPQÅp Yd HŠ¥hЧˆŠ©¨Ž „†¬€\CTLÇ•\Ë5]Õu]×u]UUUUUUUUUUUU Y@Ði†©ˆ0#™BCVÈ0Å€ÐU@€IN’(9)¥”à YL’J9)¥”G1yT“ŒA)¥”RJ)¥”RJ)¥” YŽ’J9)¥”Ä(YŒ’*5)¥”G9yR“Œ=)¥”RJ)¥”RJ)¥”)yÒ’®A)¥”ä(iÐ’M=)¥”(E‰’“íI)¥”RJ)¥”RJ)¥”Jù ”RJ)¥”«=¹Ö“RJ)¥”1J Ÿ”RJ)¥”RJ)¥”RJ)¥Œ 4dgr(:‰Îg(gš‚¤BiB÷&9Jž“ÜJËÍé&œsº9åœOÎ9' Y@!…RH!…RH!…bˆ!‡œr *¨ ’J*ª¨¢Ê*Ë,³Ì2Ë,³Ì2Ë,³Î:ꨳB()´ÐZ±Æ[íÍI[s”ÒI)¥”RJéœsÎ BCV BdQF!…bÊ)§œ‚J*©€ÐU €Q2ÓQÑÑÑñÏñ$Q-Ï5Ó3EÓ4]UveY—mÙvuY·uÙ·}[·mÛ×Ýøã8Žã8Žã8Žã8Žã8† 4d „BH!…RH)¦s:!” YPGqÉ‘$I²$ËÒ,MÓ4MóDOôLOõ\QmÑö\ÏmÏõTOõTQ5UÓ5]Õu]×U]UVe×¶mÛ¶mÛ¶mÛ¶mÛ¶m[BCV:’#)’")’ã8’#I@hÈ*@@Š¢(ŽãHŽ%Y’&‰’i©–«Éžîé¢.ê@hÈ*@†hˆ†èˆ–¨‰¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢èyžçyžçyž„†¬$t$Gr,ÅR$ER,Çr€ÐU€ €Ã1$Er,˲4Mó<ÏóDOEQ4MÕTÐU €E±Ë‘$Íñ$Ñ%Q-Q5QEQEQEQEQEQEQEQEQEQEQEQEQE Y !„¾÷–bj)÷Ð8Ä ÷Z)­÷Ô@bœ÷VIb˜÷VQBŒõža„BCVQ€1È1ÄrÎQê$EÎ9*¥Æ9G©£ÔQJ±¦X3J%¦k㜣ÔQê(¥ZK«¥Tcª±€€ ¡Ð@b R )…”RÎ)æRÊ1åRJ9¦œSÎ9„Ê1ƒ)¥œSÎ)ç„ÌA圃ÐA' À ÀB(4dE'àpÏ“4M%MEÏ]×Mו4Í45QTUÍMÕTM[MU–%M3MMôTSEUMSvMS•mÏ4mÙTU]UÕ–e[vW–…Û3MÛUÕÖMÕµ}W–ma–m[˜4Í45QTUMUÕTUÝ6UU·5Qt]QUeYTUYV]W·U×Õ}M]ÕSMÙUÕ•UWõmÕ•ußt]aW]Ù×U×õ}]×}_¶u¨ªºnºª¯«®« ³.ûº¬ÛŒIÓLSEWÕDQUMUµmSUm]EWUUv=SU]Õu}]U]ÙÖDÑuEU•eQUeYu]_w]W×EUvÕu…ßT]]—mÝfÙÖuÑuu[•]ßW]W×eÝÆÖmßøLS×M×õmSU}_÷}ã—u[8FUõuÕ•…a•e_×}ß8n_7†QU}ß”]ßW]×÷mßÚºnü®mcë>¶®# ?ºo UÛ6ººÌ˜uÛ¨û:c7†Ægšºnºª®›ª«ë²­ mÝŠªªëªë »éʾ.ëºqì¾p£«ú¾*˾¯Ê²±Ûºnô}¡ðʲq̶-³­Ãpß7~®.ÇlëÆ1û¶pìÂÏ p0¡ ²"ˆ`”‚P1¡R B(¡¥Jjc2ƤTŒA)¥´BI­b BƘ„Œ1)¡„–J)­…RZ+¥ÄJi­µVkk-ÖPJk¡”ÖJ)-¦Öjl­ÕZ1&!sLJƘ”RJk¥”Ö2ç¤tÎIÉœ“RJJ±”ÔbŘ”Ì1)sRJ*1•RZ+¥ÄVJi±”[K±ÕÖb­¡”C)­•’Zl-ÕÖZ¬µb BƘ”Œ9)¥”ÖJ)­UŒI霓’1'¥”ÒZ))ÅÌ9)™sR:礔RZ+©ÄJ‰­¤[(¥Å[­-µVK)-–’Z,¥´Öb«µµT[(¡µRJŒ¡”[Œ¹¶k ¥ÄXJi±”[l±æc®¡”ØJ)±•RZl±Õ[«µµ–kK­Ö[­µÕÖk­½§ÖjM-åØZ«9ÖÖc­¹÷PJk¡”ØB)1¶Öjm1ÖJ‰­¤[)¥Å[­­ÅšC)1–RZ,¥ÄØb¬9ÆVkj­Ö[®)µšk­½×Vco­ÕÜZ¬¹µTk­µ÷Z[o 8˜P Y DÆ(Å„¦œƒÐ£˜s*¦œƒPJ¥˜sJ霃PJJsJI)„PJJ­…PJI©µ lДX Ð•@*`ŒRÎA))ÖF!ç ”’R­ RÎA(%¥Z3ç ”’Rk9gÎA(%¥Öjî ”’Rk±õÞA(%¥ÖZ뽤’Rk1Æ|I)¥ÖZ‹1•Zk1ÆZkª¥Öb¬µÖ$l­=÷ÞƒNÙœsν!œ2<Á¨À†ÕNŠÆ Y dÆ dRÈ „RH)„”RL(…†¬¢c „B!„BH „B!„B!„B!„B!„B!tÎ9çœsÎ9çœsÎ9þþ6hJ,PhÈJ 0F!Æ “’R‹ SŒA(%¥klcB)­Åc圄”Z‹±Ö\+ç ¤ÔZ­5çÜAH%¶ZkÍ=çBJ­ÕškÎ5ˆRb«5×tî9¤Ôb­9瞃ªµZsí½ç|O-Öœsν჋1לsî½!d«5çœ{:ájí9øàƒBkîA„ðÁÀÝà‘`ã +Ig…£Á…†¬B„”bÌ9ç „B¤cŒ9ç„Bˆ”bŒ9眃BcŒ9ç „B(¡bŒ1眃B!dÎ9ç„B¥”Ì9眃B¥”Ò9!„B(¥”R:ç „B¥”RJ!„B¡”RJ !„B!”RJ)!„B(¡”RJ)%„B¥”RJ)¥„B(¥”RJ)¥”B)¥”RJ)¥”B)¡„RJ)¥”RB %”RJ)¥”RJFÐIF•EØhÂ… Ð•F5ÖÖZ+ƒRpˆB r­cÌið3ˆqÌCHiécÈ@i¹öRAB ̃„ÏAÐ m‚™! ÁáA%@DL‰ ¹Paq‘vq]¸ ‹»„„ ±8€pp O¼á 78A§¨ÔAÀÀqDD4‡‘¡±ÁÑáñ4ðpˆÍadhlptx|€„€OggSi,!P¼y¹.‡ 1/023-,*),/,/0ÐÇÚ%&&&%%$.0·ÂÁÅȸÜZøèŒL| 쪘çÁÎ3 ‹çtt–cÕê]³Cík‡¢ðÏøî7o± èu ì`ß]£¿ùâ|6è[¬‘€Žô0¢Z¼M½–f[èA’>Žvžø°(¾CÙ­ôÜÚÁM&>v«è‘ Ÿ[ì‰tJZãfšðKð’zL›ëêfÁëòßM”îâì`ø¨@ý¦»çN° .d*¿ÈgTrsé ´9Ž3è`Û¬˜½»O\œ‚SfQ/ÜÖá-A?ÿªŒ‘ Ÿ 8fzbô“`–[€CôÈ2´±–ž®Í c8õáÕY½ì`ß]'€æ› –@€17,Äœ€Ž˜CÒTJ±sâÐý4‹¦ ˆ• ØÜØQ–(оò]½™™À. ÝíæiK-]y|Û8{ýãÔõq·"XºÜÚ£¿²â<3ÜYR•þs/+[`Jw[‚*„pº&äžÏ«BÜØQ7(‚þé.91h€ö0ó'Šú¯E$˜Ž§djx3ÞOÏRHÜÜ»L)¼{X¯@òtAWQ¢ÐL©C[CŒÑSÌH¿þ"à_T4ÜÜ[*Šþá»"3#AŸ0,ÄEʺ¶ÃØòâ¦A)®9 ÅÅ QTÔ- ÛäÜáMO?oé:…¬:å>-¨nHBåüë ^‘ü³*Y½½ÙÁÚ# Û›ëZÂp ¿VšÆgæüõáሃƒƒX]¦Íü~į}§ZDבh÷~úÞzÀp¨…ýQúô´CŸ\þ¢¿—GÚ‘*;¾[~1ëâŲšÈmÅåf‹u:ä ÄUà‚°¸ Á .4 °6ðc  &;œ]¯6øFÕZk£µ&~ü§16ðE€Y®·ÓS  @,~ ˆy¥ÁT»üô’ ƒ÷= Ëá¡8º_ËØ@ìèª7Ø] cðïÝ€ÓTp8þÞ€‹E€ß @c³ÒÖ¡V®ÿ4@€€ÒKÿ0@•+ÐeS¡ûâPSx]AŒ™jXž *ÙÂuÈ!¤σQ¡é{?t` \ÐàB ûh€ &Ù$<¸&Á¸`^€¤ PÓJ ô‚G± 3n2~ù!@ 3»@¶²–8¨ €ZcØ*@[* ö À¯6ü‹ÄjŸ\Ÿð€•¡` üU&0d#(Àê•8[é1†Z¡Ô€½l$F(s*.^ÄfP.Àò(öÈŠÚN[,[PC·›QÒ ÀÞ€ 6@ã\P‚…u!~, ž˜\ ˆpúg@ö©0—$„àa ¡iê@€Rî!@ÿ€ã À¼P‰îm:Àn@¶Tv÷¡@- @ô @œúó•=hÏÌwo+í9&F„˜ €¹pÙƒa*pŸ ÈÇ8M üX;ïPøçHy €ø‘ͱ-°ðR(PjS U¶elà>uÅŸ wàTiÃŽR8( ÀÒ7’TYùÄ¢=Ÿ¿€ô{ûVI;&Z#ËêÐH6ÿHR.½V]ù\Yx2ü·×ïw@ó:ñþž“˜ö¡ã mÊzàŠu¼ü«Ô_+:TY [¥ãÛ#€jÃZ®ÞOj–Oô}·8[ôßYeï?O?Om\Y)¦ôëê)„ Gè *îå4²ÿ†fòÔëE¿}¶c‹LYÈsõ@ ßž `*' a“Ø;>rû“Ôj=ܤlM\Yù”{z}é5€v-Jƒu¶ûë’«åÒŠ%g.û/Y=ŸXLYyFOËׄ ¾§»‡©§/²÷M®pÆš“¢ôõ’è-2\Õâ2mçñ0'€ƒH®sý4¬¯‡9}´[7*‚­½O¥?=\wäâ°ÝbAäÜ{*ž>ðý’qж'ýÒ4Iþ½‚¶©øÎjíKa>Ÿä›mù¯`ê,º¸åóY>¼M˜ó)Ó ô!ž9ñŸQ¼¾×'[vB^] œ‹,À‚a8@KÈÜ» œ‹ ¨iËa©3¬IýògkÎYÉ¡1&æoó—­¶*¸›t4)«@úðö‚ÆcòJWz€÷X€ß ˜í‚…üR¡c•@ÀÖJå h‡@²„Ki/½ÚÂí î¨ñá à ¬°ý&—²+”TÒ ?'¸J³a‹Þ˜¥Å[ìÀÔ<—zÑLó\¾:WûÉ ô3aä¬Éd/ÂMC|CÞ²˜ŸZíîG‚8ë/‘æõ+àQ€ªü‰ú¯^5íì(ºÚ5Çžz)½È»µPÀ €¥^´YÿþŸ=K|o  c¡Ïk-ŽSmœ~WnÃ(ÜSÞ­‹€¨=ÁA ÂÓN¾Ü !ƒÂ•¿5nœ}#Î?• rñTòd'%ÏH¸Üᯠ 9áxmXTÒKËø¤ÓÉì:Ò`B—BÓ.X`Æ€ÄÀ…H¸yì þ à:( P¦Àü-€¸‰wð5”*´PÛ€ ÞÀ­>šñG°?<à×sa€Â&€Mê_âµSþSêM®0à9¹ E~ î+¨ÀsðJaÃW ÊÁ§0¨€?0Dá€;p†- –Ar*>,5 ÉBy°¤.RF9HÓö :ñ °`°7ÈîpVØ&øR‚>À‡<`6®€Å,€ àÍáÒI´~i$(X(À_+@XL€øpEÈwìþ  À{lJL€àø€]\P À§à¤æ+(À_€€8°-¼¶P«Ð¶ùA þn  ì¼Ûü–CÄ•n@ ­Xø°lR˜É‚:ì0]ÐÅå#a:À4.HÐ0k AÚ;˜`ƒI6 +øô€<˜Ñ Œ| àŸ˜ €³*CgLõ*ÉrÐû6PСX_ €²Å¿ À#€¿®³kêO @=+Ö#8¿ÀwÔ%—(€­‚OF§PK@þojÈÉHÜÑ•í?¼ôÀG˜xÔ»­©€†œŠÑ” À9ükpA£þG­ÝV3 ‚8Ö æÀ~Ùèû“{Nç9=€îî‚Pè’áÌmÌôOÝwIÍáI¬†Òêû& vN„éíi+ó‡0§¨2_k¿îå³MÏÓQÿ{šÏw„ê/¨¹=_…ÉbQûµÂ<¯™$ê/ÿ±=Ÿ×.è&`¾éÎýH<ðwTÓ>Tùsd@š‘ðÊ?ú °ÉqÚ„LeÜ/P`ÉAÁ-Ø*Ö Ê0·¡Ægtkboard/sounds/user_move.ogg000066400000000000000000000102051153150217100166620ustar00rootroot00000000000000OggSdê­,ÆÒvorbis"Vk©OggSdêÌhÇyœ>ßî}K–+ .q €†¦7ߣbí Brq[:„ ;†îÌ ­~uv™§ž¼µüƼÿdù¤È›íç¿\Þ{ûþSß|úô$ùøòå–Í.Ž6HÒ¾¿•û¾µüž3|÷K땹±ÓLN7ëÔv8¿J´¶šžØŠ&º~sÎc©D[nVÏó¾·'7³39HÒdÜqâîsCiÒ´ÁÌó̘IdJ‰êÃ]iÍw]4¨¸txwoŸ›†º”I+írÄç‘®]2µí=sGÐYD³½ çd@L§'ÛO£‹YH ¾ÆØ‹ŸÏçËø|>ï½ÿa“ƒ‘iŠuèò!ûJ}ac#@ÇWÇã«£ÙT±ž?%lÒrŸ¡¦Ô_;Öõo”ñÌú¸"µúN åä ͉î´v!:_]x›öòÜ´—+õòâ£`ÖF¸Lø;ùš¤®9Ód‡­ žŒe|ÝŒŽñÍß®˜RÃËnµe>tÜÈ*¿ýåÂ0xÁÁ˜º-@³Í7‚H<ðvx:”xuTJYGx"6¥k6ˆÍíè ”‚„ïX[Ü4‹ËkÚáû­QÞYj€éÀ¿¾¶Ñ¸²ÞÒ€„¯í’ÎÐï}<…f¢ŸПd¥?$À‚Æêh‹¿´óx÷Ù]7¶OúL—C!q`çb£Yni×HÆqß.t«‹>’n»’³Â™îhW±>Üÿ_Rò×iWÖGû›ÁYl§¿½™@ ;;ˆ^¬Ï¬ /{b Ü8§\úÙ«­pÿ1Zl@.iìsœ‹:¤ï½÷šw1Œ1eXZMªù{æîÓP•}ŽHýJ RYZ5¹§ ÃŒkᆳð’|½@“Ø(ÞHœOôŠÛÉÎÂ^ã`Ty­hnhêõ^eÑ)Áeûµ AÒ²௰xÙÁ@j6?ÑÑt(ü’î@9|±“io‹©ƒj€Ô ó8_¸Ì«Õ—'åÊóš°dÃ+:XGÁ}X¢;aƒ Lp =@h|­–ÆÎ.{:› Ñ aÏ·?ºmˆÅS7W—¶l„«‹õ"Šü% : ²³là^šƒ«"zkv„©³:[«Cñ°G‚ƒžW;žN''—¯st“ü›²'áÁåMóªËrPßkýy1ETÇB ¥Ð ~Ø]ö¬¦lJ%FM_, —®{V]þ¯›ÌEt'¥äOݰZ«¿¢€Àx¿Þ®Ú–xhŒ&+=ͧÉÓ±¯Qûfr¯—hîïdÊ…o¤l¯A}«3  ó9ôÒÃæElÂ]7ôÞ‹ìÝöuÚŸU’Ñü™Â MHÙú‚‚’EQ'ÌäyôW°[yóØä‚ÂÊËÛ0OŒ©.O [йÄ@CÛ ¬vÍ–IÞäë+ù½sc.&ûÝI¬³…Ç!hTY d=0ÿWÒååómMxѦ‹Sæå%Ï6ÌÏœ­ilݵáÁÁP¦•î÷¿Ò ýã¶M”:|½Y‡õa’®~[l˜ÂÜEèë‡FÝsx`ú8Ûüó¥Šÿ/1³h°€Ž³ÇùqÖÑ ‡d-¡‡œ¯^çNK…nyÃ@Í´’OÿKlqz 1ýÕ˜Öú¾ã~©éÊ·IE“wú5Rƒ§B¦ø Áћ¡G+ÃVß·»>Ê6ýFM¡ǵTßl[ð]µ$Mœ'.Å›³uÀf‹Ú~˜vîIö‘ë5½±È—£Mïq\¢YµAxᚦ6xPë—¾´¡OïŸüÆ™þ院ƒÏ¤HHVJŒ-qÚÏaŒW,Ÿ›ºrÀïþjíA]5á»{Oë­³?Ÿ¬´ ˜À]A ñ™ÎRzŒõ°°JÏ¢š¤&½À§»x¦õþ;¿®¥syÌŒ!/ï…” ¤«nOÌ¢‘8œ˜Øhô‡ÇK›Á’v\'Í!MHw(Ñ͇\€€´pú,ìMÉ"áµAEkÙjó÷”¯NóÏÀ”iÛµ|õÔ}Ø`™Æ©k›u5[\²Õ&N×3Ø:Îÿ“Í^œ¯^çÎ.ÍcцڞØ~°Ø^Uxš`M8±f›i»ükÏe[¦˜b¡Jyåy9Ü÷¨…N _‚d]x_kIñy Kä%‘2¬bÁtN,p” ¥¹!éBµCêÏhRÙ¾%:‘æÍäßo´¯îhs£÷:À5>EGìV„:>-àdM1xÝ—M{T›„¨%#"T-(pô®§e"D¤”}}ˆ(Ê[Ï>=’ˆ‚‚¤©y„çS :ŸÃ@€2mÇïîxñ;ø‹Í™ÁÕÃÜf´¾°ãâ4¾žH°uŽÞ·˜ÎM7KÌŠšª¸#Š;¾ms|EÏ›…#žƒ#ž%›8[œé.µJ2t”­iüÈ|ÜÑÈ®S´H ÐºXo<øZÿ¯*Šˆig+)0™Èû¨!4Uhts¨€-å8¦Öï¦MgXf xêâwƒÆr•ªµœ§i€ß'V‡N Ïl¿?˜¿<ô&Žšœø° Bý) á6[j HùF{Qd(¬ú t:Œ«6é3A`YU^‹éìõïŸoLõêRÕ<–ùtr¿îëJßs=˜ÿ³Jÿ-q«U²XëÑpé‹jö#) £­}šTwÇÓ1)‹cnžjŒŒ«_s±uÐkÃk¢= ÿ¿i_µ7âÍMÇîéòýù«•Ú–º« ßS`Ao€4_J,&Ò£|óÒ²\¢­ iœ©~5ÑÞ¾÷LªÒì4mm÷,ß¹?–ø‡TžÆæÿƒhÉXvø^Ô®FUÝ ÍÝ}œû|¾<ŸÏñù7þÿ?G8Œ´1tT¹Mû1«Ü”«il›Î%ÇÆ:Бh¢Í‹ÛVÿ\yØòÔª¹oìïü}Êu(f`Ó[gIWÎ÷iÉ.^¶€«ÙT§df@‰@YuŠöÓENÑ ª**€ú‹bŠˆœ‡sÒ®}Fàk*Àm ]èñ`HL˜Ðû Þ¬BÔÅQÃóûöi–ù°Æñ¥ú¾Rw?’ˆÿ"Å¥ÄÜv`ðfà,úmÞàHtò …(×M P^Šæ ^¾KãX¥òTÏ/B¹ŸÜU·¿ÅPˆGày0(G«^±œ…º¥1/Xïþ[€Ét¿Ì ×„æ ,&à_v°¤€ç;àÿq˜ßhªIðôþkÈ1íȾ^ºaˆ³˜Û S€BçA«òr3v¹>¤ŸÕ[ñNÔ_Í*@ïÈz˜M'È òÉ&&€Î>ŠàYP v¼2N=ô>ºWUyà¶ày­°@—$\OÇ=oêýi}EÁÿ2ï%7Ëñ\äÏ¢w¨«]!ÞíhcŒ h›@™g`ÿøñIjp°hè,"”‡Õh8„­nçŸíø@âà¬ÛcÿHLj„t¸ Vv)u®{ùÇ–ÅÅJ£ÅǵS#”¬ÌOìá Òþ—1ÓŸšú”µc~L´Ói'Ú¶V”¯~äŸ X H”¡ßµµñ…ª^„Řñ›ˆMÐñ½—¯†[Â`ƒ×èâ…0äÎàò§Ná™õýÕÝuöÇžçÏ”øÜoùé*äýDËŠ«HßÄœ©Y¿Ï®ñØ’NÑJη·]¾«:n‰TÙ°yryÑ/ç°h’¿`‡/Cß¡ê™2pEPÀñ¤¯Y¿Ïƒ¾xRÂ@ß¾õÉî\‹¡f¨¶èPk<ÊMb©&²°xPÅÀX˜AºZƒ±é…ðÅ O×ní›þký”tË:!ÑrŠž÷Ϻ·§ê³ø {œ5 æBz÷U`¤­…‹ή }£{E …Öß‘žHÚV°_é>û²Rk’o;*€J†Å$¦ª¤çXM±±ª;rz<Ê_æÏF [Ò¼€”­Y€œö¶-€IË4Ê>ÖÜýÿöžÓ½3Ûe…þö¯ú+«ÊR¹8—†¥×p8•ß|—EÞ¼2)[àâÒ<»ié¾ Ï€ÖÄl ž¶íhøõ\{·püÿãÒñîjêÕ§…só[ü(õº ¸ ´Óu@4 , ˜¿)æXWJ?/•iD”ÞKu„sÎÎ9ÍZß÷}a¶møz!dmÛXáHB¾¼Rˆ~´JÒzZ›m¨ôp<è¶c_Ú“ÜF¹#˜ëv\þ s¤“ÀÿRo;¨ºÃ @çgL(r]1ëñ¹a²Ôcɵ»ãÄÕ$‚P૱¥„¢øJmÞÕykÁµ´YºLÉ%‡qŒ½W¡‡ÛýëžœR¤é`‚ôž]jŸ»OàAyÔËf{Âæg#7_¬~ïZ,ÞSPÔ’b”¦µPÒÔ\À^îÈëÂÌ»7ˆäŸ™”¯/3áôoé…t:‚õDnŽìRä§‹÷6ψüòm®—xwþ›©)LTäÈ[šÌU¶þ>þ`8Æ(tÞÖ­›Û?[ÑKçžÛéWaÞÁ?ÒY/@)äÑVûƒÂ¿¥ñ_!ü‘îÜ+…ÐŽÁxJnµo’éuK8f[¢Z¯[÷=×a‰Fl·Î*ÚžœJ*T¡¶£éJ.²}>×K¤ã@—m[pήË>Ùÿ`ØÂö‹O–o¤(¬€ÿàø˜ð&p¡Åh\Pì;ÀßÉû-«¯ã<$k)_òœ=GïhÏ÷ü+™RÞì9Ýe'ÜJRÊÝÎá^t,ŠùR¢ÓÁš@‘l ü[;7Ÿ¯Šåɪãî*YIgî¶•2Z£6™Q¸»i¾mò…% fB¦än@~®Á +º¡C­-šj±S‰·h{sˆçBq× OggS€Œ¶ßOv-k©)PE1PVmpqsonkrlpojtwkqtnidVGigcikiieheijhlŒ«ÞæŸ]<Ø\ýÀAÿjÞºœK3’Ð/x“&krpS ^O ú?2Â|RÍ9;œ|ÊSSÔá?GØWqg™•ìm¬7=äBœ­Þ^rk9Žøîs{þ^ºï8ay*•ô`9ZâÔ ë“! ¾Žª[Ìà4P¼ç…õø¸Œ——«”¸j͸Zhñ®Œ©ŽÉ—[è‹‹¡€€`ÏÓÍäj½FeDu`{hó˜Ú$ó‚}…2('R¨; ° ”©ÞåŸÌ€5ýaÐLÛ”ÿl×õ¶†r.úÛÒ“¤÷þ¸…»¸†|ïÚ)ÅÝ ¡Tœ uH.Á#.¦3t6cëÖ‰êøì£·`wþi œ«eó(Ó;¬”iû{0ùùÞw^UóX ßíKö¯–Ár~©QZTîÆk˜Å£iwÇ~Š¦ÛªO§ZVá¶Ä5 œ¥¾âýtz|\qÙáÓ‰óÞÚœK‘*0®äb£º›uŒù€ãÁlŠÇç¢<;[úÛˆ1÷üýu]ê˜éÓHŒñÚ”P·ò3AØ^.ð{`7UA¾ˆÿ‚§rNÀêØ¾¼§™Üû/Þêñ¯ Yé YÞ ”ŸYoz C¾œJS¢5Íp¿÷`ÖÃ&!€—` Û†R¸ ýÞ}š¯Î §r{¤ìçPjuqwsõ60}ò&Ðüg³½Àý#hܨȊÔÄ1¶m__ÃÞC^«è}i‚(¥aÑ”5¢ É”j²Ý­mi$Þ¼JšPšy×6ÏnZà Àlp6£8³iõƒäñÄv=y,>§ÿ§ú´9±d­QÞúC¡jM;à/¶@ tø[’VJã½ZqîÖA¬ºõ™Hw½u?té+¤ÊÇѼI e˜̎Ütž¬J•šø™°ˆÉþbÄH ñ€g[¦ÅÎÁ¯oÖÑ‘_&œNg6kñˆw…)/zD©&vHÃ(Q‚¿ç;GøÈ»«ÂØhÝ1í´µ µü¢u$ôp Ûvƒ®»—\íaÉúŒ\–¶GKB‡ž^¼ ÁËÒ ü¾%憠Ä,`Z—†˜M1¹mÌ[ZËŸÝ)–ýüÈt!Q #KœÑ;À3è>ÅíúU}VäË5 ­ÿÞõ®çÜËõŒí•-·©’­b^ÎÜ€SJ£±Øxuãw{QªÚ®Z¿„ñœòž»"‰ËˆÀŽh"Ü&b ÀØÀdS˜t›ûî¡{Nîú¯ž:—]ehĪpPŸQó~ÊœLt(°Õ)rCS£Ã{t˜¼ÌÓ3»š‡øÅÒ¯#+óó>=A6PåŠ:R¸ä®ÿ9¡Þ¼êRÞùkókû‚{½Gà†“£(ê¼ß³áó Öü{zª!¨nªzù×V¡Þ€¢È\ ÌB%íšÃÑIu2?¶lyÀƒÁ˜-,Zó<îó›¶àæîƒó‹°ièl6µš×€©æ P'²®àÆð@žo¨å´÷íìv—Û(A•UL§4EªmáuUíºh¥õl÷Ýȸãª”ÝØüð÷Ó@~¼bÀ¯¶Ã ­© u,àêcÁeqEÛï-EƒˆðgíƒäfvÞlïi$*Õ¨Âå2â×Z`n²^£¹—)>HÁ|—ØQS¹ùamÇéíÎ$•ïæ°mG¾U6õÊNŸ z½bÙêö¾Ì37-/ØhlâZ'³™¡WLWh41ç6Æ%¿±È@S à×ÐFiEõ¿Úà ê”ë±^3Ä$W¨Lò4jÿè/(Š7We¢××÷C<vW-rœ…¿™â†ûpi›¢‹µA~¬2M(\· 6á !<àZ'd mú8›·K1mVWGÊ}ª–?4 êuQI¿º¬”­QE¨Õ:!K‰ˆ¢îè$©ò(;J qÿÖ€3šñ#§ººÚ:©Cž×ĵPVÄõbk'p¹ma’^¬"#Šx¯Ô Ø_t¬ÅÚ'`ˆ1Š1Aÿ¦tѽv3:ÌÉ_; ÆFÕm—êßÙäÉ¥LÓS‘Ç/ «xþÂÀ^¤\b°~m…Ô)ä0æF¯ÅbDÐÌòP´òR½×aÎz+èž¼ `â7œ7@ ðh‚¬Iàœíp¹$ /Ørà˜Æ-kýcc«—FV@ÖK#D¾T8÷E(ûõe( é\ }WJž‚f­ ˆŒ¢êlð:í¬¯JŒ’ø¢ž¼=둦“ =r”Ä ãx©ù¥„»]½½*K2& ݬÙ|‰Át‰v€³máÚï†çâžp!Æúézíq*§*Ph¤i¶¿¡¸…Þ)+âMh“Ï@À€ÿ0*b”¨»c/‚Ægc< 8 ƒ†× øñüòí÷ò  ÇÀ êCÔÿí÷òŸNÿÁÙv:þ¼b ¹±Z~½š}ø‹Iv\·™-œ;Öê)»´ZÿC,^`Úð`¯°ð¿7jd{:Uh¬Œ¼³<â>‡'È|/m €ª¼.nÎh™Þ Øóœuß5Ówô¶Ñ’»ö[f8ÚŒÿà9>­R³4áp‡¥Öbqb$ù¨gÌ^=!µß›Ë‘;]8ÛÌVÍcVà§äGP*ÈüvjÉ8Áòr£?¯NpOJ¹“ötôY6AQ§£žÜt=)Aêr~´ÓÜ$`¬ü:ñŽÞ‡Æ Öy¡´­*©5º>§h¡o8Iç f3‡¯15~Ñ'Ø9ѵçì~6åðZ[.EÖíñï Ðå¢¦à «èü_ ½‰³Z5O¨€d[ç³¹ à6"úáôª×£·9:ìæèÄ4‡ÍèåV…_…iþ¦9:1U¶IþœêÉHã«T“ð>„LLRÚ Û1ŠÇþ*ìN (^<…æB‘â«l4m¦:wb‰À¯Bý_‘¸?1&«ŠÈ —5;(3Ž£$–ô“æ“êµ{íßüûÿ:s) ‡gõyoe.©}«¶*vÞ¼Jg’Š ÅÝ57_vÉžË]ÐЙůa Ÿ½¥îßéœ,-N.ãçŹ²— r3|f2ƒNm„ä‚祜*â0¯ÈïÉy‘*˜üt9QglD'pþï0¹ËZŸ¦®?O3 º7‰Ö¬r3ù4±KZsCw 6MEÁ†ÁÕÛNÀïÖÈ=ÄcǯðÒöò{N4{OFµ¨°Û›ÕÚ¼-Ôà\%ñ.„CxO ]H¡”Óu[ãÖf©iœS¸}šÁL`}»SNÑuÖ‘´”©Y\`ù@'/ÎýtüŒšý¥<·ºO’bWÓÎmÝ­›ÆÃ>ðV·‡ÊÖ¥–}D–µZû?ñ?ñÛB’ššgٷ؂íR¯Ò!^ Ã98Îä¶û¯¦Ó¶-oQø{qw÷º·¤kLùÿ÷ŽJZ +Ý’;»¢1Åþ. ȉ–³rB=¡à|Ü!›:1Ëk1¹×²EÁË 5Z|r£bÂ\nX% Ð“À0œDñ. ]ørïíTâXo\]jò’â{; ‚À·I¶“9_ŽpwCk ]Ö…9ë*5; GˆÏéy¢ '*QVdÿˇ½Bw땜¥ý5š¼í+ (>¬"{Ÿ¨yßë½Ø˜&F˜.íP/' YÛó<<ºN}Áªêê ôI¢Ìâúy„:Áö#4I\o7IhñT¦Í£ó$!ïÖÓ0^«ðÎðê~~‚”ÿÕa½Çhoyó¨ÛÌ(öPžœRkŸ êΚšÜ.¨¬6ÀwIcÅéËF¹§Àk·¸yÇÂ> h³¸šÒL— 6]¹J@l’»Q6sö‹½! <ƒ¿×°9]íü tTZ9çÓuÌ D]Ó½ÜžÖ ºÓŒâ{?a×ú'÷bo$ð€ã@gNì×­±ûa98.>nnƇú0-Âk}OCoô…ÄÿŠÕ¬°³„e¨ øÖï.b-tþºÊ%îcT„îŽZŒ‡ »Ú< ¯ÿHq4“E†ì¬š„šÒ¼è¯)ÞÀ->|R âšïFì b3¡ƒ9ƒIÚ2Mÿ¬Uçy$kmx“«¾P{HæM~fþuNÞ›.³ú6Zwßæ ›Ñ﬿›6Ëu8:§VUr.+dÿ+Ô~iä³¾gƒÓOŸÝ::“K|‚µlªkRû‚â»à~À[Űé'ýša{¼?MŽYL˜õ¡ *A ¶¨Þµ`í xÒ“®gZžñ|ÑY£Ùw0jw&Óg[Oªé¢¥î^µžíS¹M»©å:ž‹’{¥ 1¤¤·p±5‡ëë`ȉ¢Ëš®»În=®†ýûæó—æ¹4ËÑh Å5ç—Lt¢Î6ÃN T:ÇÄý©ýI9O\#jsœýf^Ð5kR¢sC–NJRîß¼ÏOr˜ ~ŒR;ƒ¨ôážz-¾ìºE$0‡³Eñ3j.. &Ø3Â[ÂÞŸ=L 7Œ,7'8?ޏŠRârFz@kpq /ñžYÞïpÁU€…µÛ¤BpÚ nQ:¦a nËä[££þk3IÅææ)&|·›v\t€?@çNãëû~é:åEKÀ¹éi(øÞr×Mºa®À[ÊÏZ˜;Nü ]mx4Šm;œOA\Ý W<«`sÿs}赌ËE[ÙýU+yNÁ|6·:C^|î±,]õo~ÔÖ]sÀLp[·Ü2L/Ÿt˜Sß|Z¼¾ûÂè›Þ¥‘ÍT UæCEü #£h†ÌÛCR«4ͪ„rhj$ t[ZT—;†Üž i E^pó¿ö(öŽÿuó¹¯hÀ{¾{rj‘f/Ý5û°T“ð‰°Eq¹8*~¬•¨‰ŸénÊB9I! ðÎ:àW Fµif[õº¤xwª[Ãã™tfç*—¢¤¿Ú  —Q½ˆ Š·¤˜æèŽá†\Sâ+t_%_hï¶OggS.¾¶ßOv»5r·fbcdgdb`d_^a\Z^`YX[VTYSI%þkJfšFPŒ /ú¸gŽâÖJ‚NéÜ=ÈOÒÏurSNSñ%¿§ÛTzxNõ`y½å§ bæ,®;+¤ûÿÛ  “úw-ã‘«ÔíT;,·i#G¸(¹NÕó¦Oz<þ‹r‹çº¯Ò ¸Þ~-‘p¢xZê_0'¿Ðj7ß'Œ„¯X‡ÍGðýYÌ&mž¦×BÑ êÕ[SÞºÆm­¨¹{ ¤'ŽùÓfy ¹#B¹XC^¤å@ªë‰U,Þ{b‹w•)õZ\4±år¢x0WÃÏd䢯Ë^NúŠäÐ"-èîîü@ó]=p.[VY¬‡ ­NCÅ$úaˆÄÜÝB]Ç Rû¸]]í xËÁ‰. ¦ZQÊ|FQEA~‹k"¯kª³Þ‡®…rÀÅ㢷_Þü)x}ºÃO½²§ÄÁßPX~° bA5U–OH[lîqÌP•;ûieC(ÂÊ´š×ozeËŠcP Ê»sp´ÄCÏ#^{BEÙÇ®Óì0" ðÁœ(n”²Pßíüï1ݾ>ÄÆˆôCÖÊ•æ6ÎÔûÏ)1Òú^¸:gýµž[—`’ÃWïØ" CWîj]þQ˜üîb-“o-X^‹;C4¿ŽÇ¤lÓg¢® À€Õ…(Î’BÞO­/4,îØ¾ÙŽƒ6‡«°Qª¶¤M¼Ö9LÞu±-]kʰ¼$˜uÁóü]Y))Ö!¶³Üè“f½—ÎËXýv³’:,8°› •VxÙ6½&·äjf&QlY-AÇIûÁÛÚ_;|[ÊÛHæi"æÌsùTéóù&?ù'tØÖ!°uÐPâº÷”®»Žž/÷Ω÷^ÛïqØ÷sxà<~š‚™$4gͼeŒç Àê¹Dqç…M^4?ã¶ì>žóöÖêµ ˜ÖiyŽ”®Q>-ÁÜH¨P°#I'—êÈ9ÿCѱð½.3rÔ"ž4±Ü/3 T4½¤ÞšBk™®³çZÚhxí"ÖH¹Dñ8°³9¿º8°ægpÞÜG§ z&"ê~ÆöÊϻ䎾ž~ÝYûòУbŠûí˺Þ~3™1lHoÙQ·Œš‹ËudüäÎô¶µM¹“8~ŠÑäôšö2¹a¶.ÄH€€!&à€Þèø§µ;».ÕýîMÌÈö ­ÃP,Â&b údQòê÷ nñ|ÄKÍr«øŠ2/ŸÁ }ó3_ز0舸D«a¯ð¥^š¢kqA±B¥;-®Éo?»˜€ —–›5Á?ÊÃŽÏ.fh«2à ¾@mÌ,¤èúG áXLN¹Ð*À„€..<’k5Çé8ßÿ,Ô˜oMHm9¿¤@CB~šÂƒ¾ÍÐ÷Uå³Gèây½µ™%Š„÷ÏtòËMð¶·kž¤_¥bú#*Í+CËcÝägn-„5ûù¨Â–€ çÌLv¯#Çtü9ÏÅRûÖþd-yõ:YÀCþ‰’MгW»î|y4t€fž¢@]%LïýÚü÷¹¾Ÿ ë‹z¤ršƒbO7.®!ÐÏL;Òa£;,/‘Sºn¼D^͘»µ?ÿdÜa5â—×jí-¬ÒUÀµš†&2ž–—57ì(X"hÇ9ºSÞ™b2M8çžFüh—'€ú4u†â°Û íÚÉóÄ~Ij#œ B‘Z'½ÅÝWpaù«Ž{uƒSÓö¶èX* I++"e¸G#ΛŽ?ºË/…aˆx¬ì tm ¤fÍÑkЙ¾™2H!*ü\Ý–v>MÛ<€À‘유x´4$Û\º®úYóò ð·dUÍñóà-hU/Pþ耋)õ‹ºF_<*úÏSŸ ‘ý,fôéŠ ¨$=ž™)su›—¤Ð¡qÑû@–LmÍákB}v{‹ãú•½…§"ËÀˆB•W‘ý;s#œŸÖaP‹kT_dIË­yqïþå ý2°þìq¢=°1ì\¾©rŠÐb¦؇3 ŒZLBÀ,µ n{’÷s.÷º¯æ†wkFÛJwäÍ2:¥ÙwÛÚuÄIÐ9àøù¤ž¦Ôf=x‘·èëgž™šï0ÔÕº|ú[ç¾°\šV ò`§7·/ÆùIgîæ%&ͪœ‹îpžÌCZ”× “Þ z0®±k¸8‘0Œž¹ú&þààˆ\ì·Ý1~Û—×s';†aHð6«§ gtkboard/src/000077500000000000000000000000001153150217100134365ustar00rootroot00000000000000gtkboard/src/Makefile.am000066400000000000000000000016441153150217100154770ustar00rootroot00000000000000AM_CFLAGS = -Wall -Wno-unused -DDATADIR=\"$(datadir)\" INCLUDES = @GTK_CFLAGS@ @GNOME_CFLAGS@ LDADD = @GTK_LIBS@ @GNOME_LIBS@ bin_PROGRAMS = gtkboard #we'll install this when we're more stable #gtkboardincludedir=$(includedir)/gtkboard-1.0 #gtkboardinclude_HEADERS = \ # game.h gtkboard_SOURCES = \ board.c\ menu.c\ prefs.c\ sound.c\ ui.c\ \ aaball.c\ ab.c\ engine.c\ hash.c\ move.c\ stack.c\ \ antichess.c\ ataxx.c\ blet.c\ breakthrough.c\ checkers.c\ chess.c\ cpento.c\ dirmaze.c\ dotsandboxes.c\ eightqueens.c\ fifteen.c\ flw.c\ hiq.c\ infiltrate.c\ knights.c\ kttour.c\ mastermind.c\ maze.c\ memory.c\ ninemm.c\ othello.c\ pacman.c\ pentaline.c\ plot4.c\ quarto.c\ rgb.c\ samegame.c\ stopgate.c\ tetris.c\ towers.c\ wordtris.c noinst_HEADERS = \ aaball.h\ board.h\ engine.h\ game.h\ menu.h\ move.h\ prefs.h\ stack.h\ sound.h\ ui_common.h\ ui.h\ \ flwords.h gtkboard/src/Makefile.in000066400000000000000000000352111153150217100155050ustar00rootroot00000000000000# Makefile.in generated by automake 1.6.3 from Makefile.am. # @configure_input@ # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 # Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_HEADER = $(INSTALL_DATA) transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_alias = @host_alias@ host_triplet = @host@ EXEEXT = @EXEEXT@ OBJEXT = @OBJEXT@ PATH_SEPARATOR = @PATH_SEPARATOR@ AMTAR = @AMTAR@ AWK = @AWK@ CC = @CC@ DEPDIR = @DEPDIR@ GNOME_CFLAGS = @GNOME_CFLAGS@ GNOME_LIBS = @GNOME_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ PACKAGE = @PACKAGE@ PKG_CONFIG = @PKG_CONFIG@ STRIP = @STRIP@ VERSION = @VERSION@ am__include = @am__include@ am__quote = @am__quote@ install_sh = @install_sh@ AM_CFLAGS = -Wall -Wno-unused -DDATADIR=\"$(datadir)\" INCLUDES = @GTK_CFLAGS@ @GNOME_CFLAGS@ LDADD = @GTK_LIBS@ @GNOME_LIBS@ bin_PROGRAMS = gtkboard #we'll install this when we're more stable #gtkboardincludedir=$(includedir)/gtkboard-1.0 #gtkboardinclude_HEADERS = \ # game.h gtkboard_SOURCES = \ board.c\ menu.c\ prefs.c\ sound.c\ ui.c\ \ aaball.c\ ab.c\ engine.c\ hash.c\ move.c\ stack.c\ \ antichess.c\ ataxx.c\ blet.c\ breakthrough.c\ checkers.c\ chess.c\ cpento.c\ dirmaze.c\ dotsandboxes.c\ eightqueens.c\ fifteen.c\ flw.c\ hiq.c\ infiltrate.c\ knights.c\ kttour.c\ mastermind.c\ maze.c\ memory.c\ ninemm.c\ othello.c\ pacman.c\ pentaline.c\ plot4.c\ quarto.c\ rgb.c\ samegame.c\ stopgate.c\ tetris.c\ towers.c\ wordtris.c noinst_HEADERS = \ aaball.h\ board.h\ engine.h\ game.h\ menu.h\ move.h\ prefs.h\ stack.h\ sound.h\ ui_common.h\ ui.h\ \ flwords.h subdir = src mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = bin_PROGRAMS = gtkboard$(EXEEXT) PROGRAMS = $(bin_PROGRAMS) am_gtkboard_OBJECTS = board.$(OBJEXT) menu.$(OBJEXT) prefs.$(OBJEXT) \ sound.$(OBJEXT) ui.$(OBJEXT) aaball.$(OBJEXT) ab.$(OBJEXT) \ engine.$(OBJEXT) hash.$(OBJEXT) move.$(OBJEXT) stack.$(OBJEXT) \ antichess.$(OBJEXT) ataxx.$(OBJEXT) blet.$(OBJEXT) \ breakthrough.$(OBJEXT) checkers.$(OBJEXT) chess.$(OBJEXT) \ cpento.$(OBJEXT) dirmaze.$(OBJEXT) dotsandboxes.$(OBJEXT) \ eightqueens.$(OBJEXT) fifteen.$(OBJEXT) flw.$(OBJEXT) \ hiq.$(OBJEXT) infiltrate.$(OBJEXT) knights.$(OBJEXT) \ kttour.$(OBJEXT) mastermind.$(OBJEXT) maze.$(OBJEXT) \ memory.$(OBJEXT) ninemm.$(OBJEXT) othello.$(OBJEXT) \ pacman.$(OBJEXT) pentaline.$(OBJEXT) plot4.$(OBJEXT) \ quarto.$(OBJEXT) rgb.$(OBJEXT) samegame.$(OBJEXT) \ stopgate.$(OBJEXT) tetris.$(OBJEXT) towers.$(OBJEXT) \ wordtris.$(OBJEXT) gtkboard_OBJECTS = $(am_gtkboard_OBJECTS) gtkboard_LDADD = $(LDADD) gtkboard_DEPENDENCIES = gtkboard_LDFLAGS = DEFS = @DEFS@ DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles @AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/aaball.Po ./$(DEPDIR)/ab.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/antichess.Po ./$(DEPDIR)/ataxx.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/blet.Po ./$(DEPDIR)/board.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/breakthrough.Po ./$(DEPDIR)/checkers.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/chess.Po ./$(DEPDIR)/cpento.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/dirmaze.Po ./$(DEPDIR)/dotsandboxes.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/eightqueens.Po ./$(DEPDIR)/engine.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/fifteen.Po ./$(DEPDIR)/flw.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/hash.Po ./$(DEPDIR)/hiq.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/infiltrate.Po ./$(DEPDIR)/knights.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/kttour.Po ./$(DEPDIR)/mastermind.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/maze.Po ./$(DEPDIR)/memory.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/menu.Po ./$(DEPDIR)/move.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/ninemm.Po ./$(DEPDIR)/othello.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/pacman.Po ./$(DEPDIR)/pentaline.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/plot4.Po ./$(DEPDIR)/prefs.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/quarto.Po ./$(DEPDIR)/rgb.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/samegame.Po ./$(DEPDIR)/sound.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/stack.Po ./$(DEPDIR)/stopgate.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/tetris.Po ./$(DEPDIR)/towers.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/ui.Po ./$(DEPDIR)/wordtris.Po COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ CFLAGS = @CFLAGS@ DIST_SOURCES = $(gtkboard_SOURCES) HEADERS = $(noinst_HEADERS) DIST_COMMON = $(noinst_HEADERS) Makefile.am Makefile.in SOURCES = $(gtkboard_SOURCES) all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(bindir) @list='$(bin_PROGRAMS)'; for p in $$list; do \ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ if test -f $$p \ ; then \ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f"; \ $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f; \ else :; fi; \ done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; for p in $$list; do \ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ echo " rm -f $(DESTDIR)$(bindir)/$$f"; \ rm -f $(DESTDIR)$(bindir)/$$f; \ done clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) gtkboard$(EXEEXT): $(gtkboard_OBJECTS) $(gtkboard_DEPENDENCIES) @rm -f gtkboard$(EXEEXT) $(LINK) $(gtkboard_LDFLAGS) $(gtkboard_OBJECTS) $(gtkboard_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) core *.core distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aaball.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ab.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/antichess.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ataxx.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blet.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/board.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/breakthrough.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/checkers.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chess.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpento.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dirmaze.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dotsandboxes.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eightqueens.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/engine.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fifteen.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flw.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hash.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hiq.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/infiltrate.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/knights.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kttour.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mastermind.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maze.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memory.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/menu.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/move.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ninemm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/othello.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pacman.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pentaline.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plot4.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prefs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quarto.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rgb.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/samegame.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sound.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stack.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stopgate.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tetris.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/towers.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wordtris.Po@am__quote@ distclean-depend: -rm -rf ./$(DEPDIR) .c.o: @AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ $(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$< .c.obj: @AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ $(COMPILE) -c `cygpath -w $<` CCDEPMODE = @CCDEPMODE@ uninstall-info-am: ETAGS = etags ETAGSFLAGS = tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$tags$$unique" \ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) top_distdir = .. distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) distdir: $(DISTFILES) @list='$(DISTFILES)'; for file in $$list; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkinstalldirs) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(HEADERS) installdirs: $(mkinstalldirs) $(DESTDIR)$(bindir) install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-am distclean-am: clean-am distclean-compile distclean-depend \ distclean-generic distclean-tags dvi: dvi-am dvi-am: info: info-am info-am: install-data-am: install-exec-am: install-binPROGRAMS install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic uninstall-am: uninstall-binPROGRAMS uninstall-info-am .PHONY: GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic distclean distclean-compile distclean-depend \ distclean-generic distclean-tags distdir dvi dvi-am info \ info-am install install-am install-binPROGRAMS install-data \ install-data-am install-exec install-exec-am install-info \ install-info-am install-man install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic tags uninstall uninstall-am \ uninstall-binPROGRAMS uninstall-info-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gtkboard/src/aaball.c000066400000000000000000000200501153150217100150130ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ #include #include #include #include #include "aaball.h" /** \file aaball.c \brief routines for generating antialiased images, primarily balls. */ static char hex[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8' , '9', 'A', 'B', 'C', 'D', 'E', 'F'}; static int pixmap_get_color(int fg, int bg, float ratio) { int f1, f2, f3, b1, b2, b3, w1, w2, w3; float lw, lf, lb; if (ratio < 0) ratio = 0; if (ratio > 1) ratio = 1; // FIXME: could we have problems with equality of floats? if (ratio == 0) { w1 = fg >> 16; w2 = (fg >> 8) & 0xff; w3 = fg & 0xff; } else if (ratio == 1) { w1 = bg >> 16; w2 = (bg >> 8) & 0xff; w3 = bg & 0xff; } else { f1 = fg >> 16; f2 = (fg >> 8) & 0xff; f3 = fg & 0xff; b1 = bg >> 16; b2 = (bg >> 8) & 0xff; b3 = bg & 0xff; w1 = (1 - ratio) * f1 + (ratio) * b1; w2 = (1 - ratio) * f2 + (ratio) * b2; w3 = (1 - ratio) * f3 + (ratio) * b3; lf = sqrt(f1 * f1 + f2 * f2 + f3 * f3); lb = sqrt(b1 * b1 + b2 * b2 + b3 * b3); lw = sqrt(w1 * w1 + w2 * w2 + w3 * w3); lw /= ((1 - ratio) * lf + ratio * lb); w1 /= lw; if (w1 > 0xff) w1 = 0xff; w2 /= lw; if (w2 > 0xff) w2 = 0xff; w3 /= lw; if (w3 > 0xff) w3 = 0xff; } return (w1 << 16) + (w2 << 8) + w3; } static char *pixmap_get_hex_color(int fg, int bg, float ratio) { int red, green, blue, val; static char color[7] = { 0 }; val = pixmap_get_color (fg, bg, ratio); red = val >> 16; green = (val >> 8) & 0xff; blue = val & 0xff; color[0] = hex[red/16]; color[1] = hex[red%16]; color[2] = hex[green/16]; color[3] = hex[green%16]; color[4] = hex[blue/16]; color[5] = hex[blue%16]; return color; } static char *pixmap_map [256]; //! Generates a ball. /** @param len = size of ball @param pixbuf = buffer to store the pixmap in @param fg = foreground color (color of the ball) @param bg = background color (color of the square) @param rad = radius of the ball @param grad = gradient with which the ball merges into the backgound (larger gradient indicates sharper boundary)*/ char ** pixmap_ball_gen(int len, char *pixbuf, int fg, int bg, float rad, float grad) { char **map = pixmap_map; char *buf = pixbuf; static char colbuf[18][20]; int i, j; for(i=0; i<18; i++) map[i] = colbuf[i]; g_snprintf(map[0], 20, "%d %d 16 1", len, len); for(i=0; i<16; i++) { g_snprintf (map[i+1], 20, "%c c #%s", hex[i], pixmap_get_hex_color(fg, bg, i / 15.0)); } for (i=0; i= 1 + (k-1) / grad && q < 1 + k/grad) || k == 15) { *ptr++ = hex[k]; break; } } *ptr++ = 0; } map[17+len] = NULL; return map; } static void rgbmap_ball_gen_real (int len, unsigned char *rgbbuf, int fg, float rad, float grad, float midx, float midy) { int i, j; unsigned char *bufp = rgbbuf; for (i=0; i> 16; *bufp++ = (color >> 8) & 0xFF; *bufp++ = color & 0xFF; } } void rgbmap_square_gen (int len, unsigned char *rgbbuf, int fg, int bg, float side) { int i, j; unsigned char *bufp = rgbbuf; for (i=0; i> 16; *bufp++ = (color >> 8) & 0xFF; *bufp++ = color & 0xFF; } } void rgbmap_ball_gen (int len, unsigned char *rgbbuf, int fg, int bg, float rad, float grad) { int i, j; unsigned char *bufp = rgbbuf; for (i=0; i> 16; *bufp++ = (bg >> 8) & 0xFF; *bufp++ = bg & 0xFF; } rgbmap_ball_gen_real (len, rgbbuf, fg, rad, grad, len/2, len/2); } //! Same as rgbmap_ball_gen but don't generate the background - i.e, overlay the ball on the existing image void rgbmap_ball_gen_nobg (int len, unsigned char *rgbbuf, int fg, int bg, float rad, float grad) { rgbmap_ball_gen_real (len, rgbbuf, fg, rad, grad, len/2, len/2); } void rgbmap_ball_shadow_gen (int len, unsigned char *rgbbuf, int fg, int bg, float rad, float grad, int shadowlen) { int i, j; unsigned char *bufp = rgbbuf; int red, green, blue, lighting_color, shadow_color; float shadow_factor = 0.25; red = (fg >> 16) / 4 + 192; green = ((fg >> 8) & 0xff) / 4 + 192; blue = (fg & 0xff) / 4 + 192; lighting_color = (red << 16) + (green << 8) + blue; red = (fg >> 16) * shadow_factor; green = ((fg >> 8) & 0xff) * shadow_factor; blue = (fg & 0xff) * shadow_factor; shadow_color = (red << 16) + (green << 8) + blue; for (i=0; i> 16; *bufp++ = (bg >> 8) & 0xFF; *bufp++ = bg & 0xFF; } rgbmap_ball_gen_real (len, rgbbuf, shadow_color, rad, grad, (len + shadowlen)/2, (len + shadowlen)/2); rgbmap_ball_gen_real (len, rgbbuf, lighting_color, rad, grad, (len - 1.5 * shadowlen)/2, (len - 1.5 * shadowlen)/2); rgbmap_ball_gen_real (len, rgbbuf, fg, rad, grad, (len - shadowlen)/2, (len - shadowlen)/2); } //! Used if you already have the pixmap and only want to generate the header (i.e, same shape, different color) char ** pixmap_header_gen(int len, char *pixbuf, int fg, int bg) { char **map = pixmap_map; char *buf = pixbuf; static char colbuf[18][20]; int i, j; for(i=0; i<18; i++) map[i] = colbuf[i]; g_snprintf(map[0], 20, "%d %d 16 1", len, len); for(i=0; i<16; i++) { g_snprintf (map[i+1], 20, "%c c #%s", hex[i], pixmap_get_hex_color(fg, bg, i / 15.0)); } for (i=0; i= 1 + (k-1) / grad && q < 1 + k/grad)) { ptr[j] = hex[k]; break; } } } } map[17+len] = NULL; return map; } gtkboard/src/aaball.h000066400000000000000000000025221153150217100150240ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ #ifndef _AABALL_H_ #define _AABALL_H_ char ** pixmap_ball_gen(int, char *, int, int, float, float); char ** pixmap_header_gen(int, char *, int, int); char ** pixmap_die_gen(int, char *, int, int, float, float, int); void rgbmap_ball_gen(int, unsigned char *, int, int, float, float); void rgbmap_ball_gen_nobg(int, unsigned char *, int, int, float, float); void rgbmap_ball_shadow_gen(int, unsigned char *, int, int, float, float, int); void rgbmap_square_gen (int, unsigned char *, int, int, float); #endif gtkboard/src/ab.c000066400000000000000000000226601153150217100141720ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ #include "game.h" #include "move.h" #include "engine.h" #include #include #include #include #include extern int time_per_move; extern gboolean engine_stop_search; static gboolean ab_tree_exhausted = FALSE; static int ab_leaf_cnt; // how many leaves were eval'd extern int hash_get_eval (byte *, int, int, int, float *); extern void hash_print_stats (); extern void hash_insert (byte *, int, int, int, float, byte *move); extern void hash_clear (); extern void hash_insert_move (byte *, int, int, byte *); extern byte * hash_get_move (byte *, int, int); extern gboolean opt_verbose; // FIXME: move this to ui.c gboolean game_use_hash = TRUE; // FIXME: this function is too complicated float ab_with_tt (Pos *pos, int player, int level, float alpha, float beta, byte *best_movep) /* level is the number of ply to search */ { int to_play = player; float val, cacheval, best= 0, retval; gboolean first = TRUE; byte *movlist, *move; byte best_move [4096]; Pos newpos; gboolean hashed_move = TRUE; float local_alpha = -1e+16, local_beta = 1e+16; byte *orig_move; best_move [0] = -1; engine_poll (); if (engine_stop_search) { ab_tree_exhausted = FALSE; return 0; } movlist = game_movegen (pos); if (movlist[0] == -2) /* we have no move left */ { free (movlist); game_eval (pos, to_play, &val); if (game_use_hash) hash_insert (pos->board, board_wid * board_heit, pos->num_moves, level, val, NULL); return val; } move = NULL; orig_move = NULL; if (game_use_hash && level > 0) move = hash_get_move (pos->board, board_wid * board_heit, pos->num_moves); if (!move) { move = movlist; hashed_move = FALSE; } // origmove is the owning pointer and move is the aliasing pointer else orig_move = move = movdup (move); newpos.board = (char *) malloc (board_wid * board_heit); assert (newpos.board); if (game_stateful) { newpos.state = (void *) malloc (game_state_size); assert (newpos.state); } do { if (!orig_move || hashed_move || !movcmp_literal (orig_move, move)) { ResultType result = RESULT_NOTYET; memcpy (newpos.board, pos->board, board_wid * board_heit); if (game_stateful) { void *newstate = game_newstate (pos, move); memcpy (newpos.state, newstate, game_state_size); } move_apply (newpos.board, move); newpos.num_moves = pos->num_moves + 1; newpos.search_depth = pos->search_depth + 1; newpos.player = pos->player == WHITE ? BLACK : WHITE; retval = 0; if (game_use_hash && level > 0) retval = hash_get_eval (newpos.board, board_wid * board_heit, newpos.num_moves, level-1, &cacheval); if (retval && fabs (cacheval) < GAME_EVAL_INFTY) val = cacheval; else result = game_eval (&newpos, to_play == WHITE ? BLACK : WHITE, &val); if (level == 0) { ab_leaf_cnt ++; ab_tree_exhausted = FALSE; /* if (game_use_hash) hash_insert (newpos.board, board_wid * board_heit, pos->num_moves, level, val, NULL); */ } else { if (fabs (val) >= GAME_EVAL_INFTY) val *= (1 + level); else if (result == RESULT_WHITE || result == RESULT_BLACK) val *= (1 + level); else if (result == RESULT_TIE) ; else { val = ab_with_tt (&newpos, player == WHITE ? BLACK : WHITE, level-1, alpha, beta, best_move); } } if((player == WHITE && val > local_alpha) || (player == BLACK && val < local_beta)) { if (best_movep) movcpy (best_movep, move); if (player == WHITE) local_alpha = val; else local_beta = val; } if((player == WHITE && val > alpha)) alpha = val; if ((player == BLACK && val < beta)) beta = val; if (alpha >= beta || alpha >= GAME_EVAL_INFTY || beta <= -GAME_EVAL_INFTY) break; } if (hashed_move) move = movlist; else move = movlist_next (move); hashed_move = FALSE; } while (move[0] != -2); free (newpos.board); if (game_stateful) free (newpos.state); free (movlist); free (orig_move); if (game_use_hash) hash_insert (pos->board, board_wid * board_heit, pos->num_moves, level, player == WHITE ? alpha : beta, best_movep); return player == WHITE ? alpha : beta; } #if 0 // TODO: this is currently unused, and must be merged with the previous function float ab_with_tt_incr (Pos *pos, int player, int level, float eval, float alpha, float beta, byte *best_movep) /* level is the number of ply to search */ { int to_play = player; float val, cacheval, best= 0, retval; int first = 1; byte *movlist, *move; byte best_move [4096]; void *oldstate = NULL; // use the recursion to implement stack of states engine_poll (); if (engine_stop_search) { ab_tree_exhausted = FALSE; return 0; } if (game_stateful) { oldstate = (void *) malloc (game_state_size); assert (oldstate); } movlist = game_movegen (pos); if (movlist[0] == -2) /* we have no move left */ { free (movlist); game_eval (pos, to_play, &val); return val; } move = movlist; do { float neweval = 0, incr_eval; ResultType result; result = game_eval_incr (pos, to_play, move, &incr_eval); neweval = eval + incr_eval; if (level == 0) { ab_leaf_cnt ++; ab_tree_exhausted = FALSE; val = neweval; } else if (fabs (incr_eval) >= GAME_EVAL_INFTY || result != RESULT_NOTYET) // one side has won; search no more { ab_leaf_cnt ++; val = neweval * (1 + level); // the sooner the better } else { int found = 0; byte *movinv = mov_getinv (pos->board, move); move_apply (pos->board, move); if (game_stateful) { void *newstate = game_newstate (pos, move); memcpy (oldstate, pos->state, game_state_size); memcpy (pos->state, newstate, game_state_size); } pos->num_moves++; pos->player = pos->player == WHITE ? BLACK : WHITE; val = 0; // stop compiler warning if (level >= 1) { retval = hash_get_eval (pos->board, board_wid * board_heit, pos->num_moves, level, &cacheval); if (retval && cacheval < GAME_EVAL_INFTY) { val = cacheval; found = 1; } } if (!found) val = ab_with_tt_incr (pos, player == WHITE ? BLACK : WHITE, level-1, neweval, alpha, beta, best_move); if (level >= 1) hash_insert (pos->board, board_wid * board_heit, pos->num_moves, level, val, NULL); move_apply (pos->board, movinv); free (movinv); memcpy (pos->state, oldstate, game_state_size); pos->num_moves--; pos->player = pos->player == WHITE ? BLACK : WHITE; } if (first) { if (best_movep) movcpy (best_movep, move); first = 0; } if ((player == WHITE && val > alpha) || (player == BLACK && val < beta)) { if (best_movep) movcpy (best_movep, move); if (player == WHITE) alpha = val; else beta = val; } if (alpha >= beta) break; move = movlist_next (move); } while (move[0] != -2); free (movlist); if (game_stateful) free (oldstate); return player == WHITE ? alpha : beta; } #endif byte * ab_dfid (Pos *pos, int player) { static byte best_move[4096]; byte local_best_move[4096]; int ply; float val = 0, eval = 0, oldval = 0; static GTimer *timer = NULL; gboolean found = FALSE; byte *move_list; engine_stop_search = 0; if (!game_movegen || !game_eval) return NULL; ab_leaf_cnt=0; move_list = game_movegen (pos); if (move_list[0] == -2) { free (move_list); if (opt_verbose) printf ("No move\n"); return NULL; } if (movlist_next (move_list)[0] == -2) { movcpy (best_move, move_list); if (opt_verbose) printf ("Only one legal move\n"); return best_move; } if (!timer) timer = g_timer_new (); g_timer_start (timer); for (ply = 0; !engine_stop_search; ply++) { oldval = val; ab_tree_exhausted = TRUE; pos->search_depth = 0; val = ab_with_tt (pos, player, ply, -1e+16, 1e+16, local_best_move); if (!engine_stop_search) { movcpy (best_move, local_best_move); found = TRUE; } if (ab_tree_exhausted) { if (opt_verbose) printf ("Searched whole tree. Moves=%d;\t Ply=%d\n", pos->num_moves, ply); ply++; break; } if (fabs (val) >= GAME_EVAL_INFTY) { if (opt_verbose) printf ("Solved the game. %s won. Moves=%d;\t Ply=%d\n", val > 0 ? "White" : "Black", pos->num_moves, ply); ply++; break; } { gulong micro_sec; float time_taken; time_taken = g_timer_elapsed (timer, µ_sec); time_taken += micro_sec / 1000000.0; if (time_taken * 1000 > time_per_move / 2) { ply++; break; } } } if (game_use_hash) { hash_print_stats (); hash_clear (); } if (opt_verbose) { printf ("ab_dfid(): leaves=%d \tply=%d\teval=%.1f\n", ab_leaf_cnt, ply, oldval); printf ("ab_dfid(): move= "); move_fwrite (best_move, stdout); } return found ? best_move : NULL; } gtkboard/src/antichess.c000066400000000000000000000474601153150217100155760ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ #include #include #include #include "game.h" #include "../pixmaps/chess.xpm" #define ANTICHESS_CELL_SIZE 54 #define ANTICHESS_NUM_PIECES 12 #define ANTICHESS_BOARD_WID 8 #define ANTICHESS_BOARD_HEIT 8 #define ANTICHESS_EMPTY 0 #define ANTICHESS_WK 1 #define ANTICHESS_WQ 2 #define ANTICHESS_WR 3 #define ANTICHESS_WB 4 #define ANTICHESS_WN 5 #define ANTICHESS_WP 6 #define ANTICHESS_BK 7 #define ANTICHESS_BQ 8 #define ANTICHESS_BR 9 #define ANTICHESS_BB 10 #define ANTICHESS_BN 11 #define ANTICHESS_BP 12 #define ANTICHESS_ISWHITE(x) (x >= 1 && x <= 6) #define ANTICHESS_ISBLACK(x) (x >= 7 && x <= 12) #ifndef abs #define abs(x) ((x) < 0 ? -(x) : (x)) #endif static char antichess_colors[] = {200, 200, 130, 0, 140, 0}; char antichess_highlight_colors[9] = {0xff, 0, 0}; static int antichess_init_pos[] = { 9 , 11, 10, 8 , 7 , 10, 11, 9 , 12, 12, 12, 12, 12, 12, 12, 12 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 3 , 5 , 4 , 2 , 1 , 4 , 5 , 3 , }; static int antichess_max_moves = 200; static char ** antichess_pixmaps[] = { chess_wk_54_xpm, chess_wq_54_xpm, chess_wr_54_xpm, chess_wb_54_xpm, chess_wn_54_xpm, chess_wp_54_xpm, chess_bk_54_xpm, chess_bq_54_xpm, chess_br_54_xpm, chess_bb_54_xpm, chess_bn_54_xpm, chess_bp_54_xpm, }; void antichess_init (); int antichess_getmove (Pos *, int, int, GtkboardEventType, Player, byte **, int **); ResultType antichess_who_won (Pos *, Player, char **); byte *antichess_movegen (Pos *); ResultType antichess_eval (Pos *, Player, float *); ResultType antichess_eval_incr (Pos *, Player, byte *, float *); Game Antichess = { ANTICHESS_CELL_SIZE, ANTICHESS_BOARD_WID, ANTICHESS_BOARD_HEIT, ANTICHESS_NUM_PIECES, antichess_colors, antichess_init_pos, antichess_pixmaps, "Antichess", "Chess variants", antichess_init}; Game * plugin_game = &Antichess; void antichess_init () { game_getmove = antichess_getmove; game_who_won = antichess_who_won; game_movegen = antichess_movegen; game_eval = antichess_eval; // game_eval_incr = antichess_eval_incr; game_file_label = FILERANK_LABEL_TYPE_ALPHA; game_rank_label = FILERANK_LABEL_TYPE_NUM | FILERANK_LABEL_DESC; game_highlight_colors = antichess_highlight_colors; game_allow_flip = TRUE; game_doc_about_status = STATUS_COMPLETE; game_doc_about = "Antichess\n" "Two player game\n" "Status: Fully implemented\n" "URL: "GAME_DEFAULT_URL("antichess"); game_doc_rules = "The objective of the game is to force your opponent to capture all your pieces or to stalemate you. What makes this possible is that if you can capture, then you MUST.\n" "\n" "The pieces move as in chess. However:\n" " - The king is NOT a special piece. No check(mate), no castling. The king can be captured like any other piece.\n" " - No taking en passant.\n" " - Pawn promotion is as in chess.\n" "\n" "A couple of notes on the gtkboard implementation of chess and antichess:\n" " - Drag and drop doesn't work (yet). To make the move 1. e4, you have to click on e2 and then on e4.\n" " - To promote, after clicking on the pawn and then on the promotion square, you have to click on a third square which indicates which piece you want to promote to. This square should be any one of the squares of the file of that piece. (Thus, to queen, click anywhere on the 'd' file, etc.)"; } static int isfreeline (byte *pos, int oldx, int oldy, int newx, int newy) { int x = oldx, y = oldy, dx, dy, diffx = newx - oldx, diffy = newy - oldy; if (abs (diffx) != abs(diffy) && diffx != 0 && diffy != 0) return 0; dx = (diffx ? (diffx / abs (diffx)) : 0); dy = (diffy ? (diffy / abs (diffy)) : 0); for (x+=dx, y+=dy; x != newx || y != newy; x+=dx, y+=dy) if (pos [y * board_wid + x] != 0) return 0; return 1; } static int islegal (Pos *pos, int oldx, int oldy, int x, int y, int player) { int piece = pos->board [oldy * board_wid + oldx]; byte *board = pos->board; switch (piece) { case ANTICHESS_WK: case ANTICHESS_BK: { int diffx = abs (x - oldx), diffy = abs (y - oldy); return diffx <= 1 && diffy <= 1; } case ANTICHESS_WQ: case ANTICHESS_BQ: return isfreeline (board, oldx, oldy, x, y); case ANTICHESS_WR: case ANTICHESS_BR: if (!isfreeline (board, oldx, oldy, x, y)) return 0; if (oldx == x || oldy == y) return 1; return 0; case ANTICHESS_WB: case ANTICHESS_BB: if (!isfreeline (board, oldx, oldy, x, y)) return 0; if (oldx == x || oldy == y) return 0; return 1; case ANTICHESS_WN: case ANTICHESS_BN: { int diffx = abs (x - oldx), diffy = abs (y - oldy); if (diffx == 2 && diffy == 1) return 1; if (diffx == 1 && diffy == 2) return 1; return 0; } case ANTICHESS_WP: if (board [y * board_wid + x] == 0) return (x == oldx && (y == oldy + 1 || (y == 3 && oldy == 1 && board [(2*board_wid + x)] == 0))); return y == oldy + 1 && (x == oldx + 1 || x == oldx - 1) ; case ANTICHESS_BP: if (board [y * board_wid + x] == 0) return (x == oldx && (y == oldy - 1 || (y == 4 && oldy == 6 && board [5*board_wid + x] == 0))); return y == oldy - 1 && (x == oldx + 1 || x == oldx - 1) ; default: return 1; } } static int can_capture (Pos *pos, int player) { int x1, y1, x2, y2, val; for (x1 = 0; x1 < board_wid; x1++) for (y1 = 0; y1 < board_heit; y1++) { val = pos->board [y1 * board_wid + x1]; if (player == WHITE && !ANTICHESS_ISWHITE (val)) continue; if (player == BLACK && !ANTICHESS_ISBLACK (val)) continue; for (x2 = 0; x2 < board_wid; x2++) for (y2 = 0; y2 < board_heit; y2++) { val = pos->board [y2 * board_wid + x2]; if (player == WHITE && !ANTICHESS_ISBLACK (val)) continue; if (player == BLACK && !ANTICHESS_ISWHITE (val)) continue; if (islegal (pos, x1, y1, x2, y2, player)) return 1; } } return 0; } static int oppcolor (byte *pos, int oldx, int oldy, int x, int y) /* True if one square is W and the other is B */ { int oldv = pos [oldy * board_wid + oldx], v = pos [y * board_wid + x]; if (ANTICHESS_ISWHITE (oldv) && ANTICHESS_ISBLACK (v)) return 1; if (ANTICHESS_ISBLACK (oldv) && ANTICHESS_ISWHITE (v)) return 1; return 0; } static int oldx = -1, oldy = -1, oldval = -1; static int prom = 0, prom_x, prom_oldx; void antichess_free () { oldx = -1, oldy = -1, prom = 0; } int antichess_getmove (Pos *pos, int x, int y, GtkboardEventType type, Player player, byte ** movep, int ** rmovep) /* Translate mouse clicks into move */ { static byte move [7]; static int rmove [7]; int *rp = rmove; int val; if (type != GTKBOARD_BUTTON_RELEASE) return 0; val = pos->board [y * board_wid + x]; if (oldx >= 0 && x == oldx && y == oldy) { *rp++ = oldx; *rp++ = oldy; *rp++ = RENDER_NONE; *rp++ = -1; *rmovep = rmove; oldx = -1; oldy = -1; return 0; } // if you can capture you must capture if (oldx >= 0 && can_capture (pos, player) && !((ANTICHESS_ISWHITE (val) && ANTICHESS_ISBLACK (oldval)) || (ANTICHESS_ISBLACK (val) && ANTICHESS_ISWHITE (oldval)))) { *rp++ = oldx; *rp++ = oldy; *rp++ = RENDER_NONE; *rp++ = -1; *rmovep = rmove; oldx = oldy = -1; return -1; } /* pawn promotion */ if (prom) { int new_p = -1; prom = 0; switch(x) { case 0: case 7: new_p = (player == WHITE ? ANTICHESS_WR : ANTICHESS_BR); break; case 1: case 6: new_p = (player == WHITE ? ANTICHESS_WN : ANTICHESS_BN); break; case 2: case 5: new_p = (player == WHITE ? ANTICHESS_WB : ANTICHESS_BB); break; case 3: case 4: new_p = (player == WHITE ? ANTICHESS_WQ : ANTICHESS_BQ); break; } move[0] = prom_oldx; move[1] = (player == WHITE ? 6 : 1); move[2] = 0; move[3] = prom_x; move[4] = (player == WHITE ? 7 : 0); move[5] = new_p; move[6] = -1; if (movep) *movep = move; return 1; } if (oldx == -1) { if (val == 0) return -1; if (player == WHITE && !ANTICHESS_ISWHITE (val)) return -1; if (player == BLACK && !ANTICHESS_ISBLACK (val)) return -1; oldx = x; oldy = y, oldval = val; *rp++ = oldx; *rp++ = oldy; *rp++ = RENDER_HIGHLIGHT1; *rp++ = -1; *rmovep = rmove; return 0; } if (player == WHITE && ANTICHESS_ISWHITE (val)) { *rp++ = oldx; *rp++ = oldy; *rp++ = RENDER_NONE; *rp++ = -1; *rmovep = rmove; oldx = -1; oldy = -1; return -1; } if (player == BLACK && ANTICHESS_ISBLACK (val)) { *rp++ = oldx; *rp++ = oldy; *rp++ = RENDER_NONE; *rp++ = -1; *rmovep = rmove; oldx = -1; oldy = -1; return -1; } if (!islegal (pos, oldx, oldy, x, y, player)) // FIXME //|| (can_capture (pos, player) && !oppcolor (pos, oldx, oldy, x, y))) { *rp++ = oldx; *rp++ = oldy; *rp++ = RENDER_NONE; *rp++ = -1; *rmovep = rmove; oldx = -1; oldy = -1; return -1; } /* pawn promotion */ if ((oldval == ANTICHESS_WP || oldval == ANTICHESS_BP) && (y == 0 || y == board_heit - 1)) { prom = 1; prom_oldx = oldx; prom_x = x; *rp++ = oldx; *rp++ = oldy; *rp++ = RENDER_NONE; *rp++ = -1; *rmovep = rmove; oldx = oldy = -1; return 0; } move[0] = oldx; move[1] = oldy; move[2] = 0; move[3] = x; move[4] = y; move[5] = pos->board [oldy * board_wid + oldx]; move[6] = -1; *rp++ = oldx; *rp++ = oldy; *rp++ = RENDER_NONE; *rp++ = -1; *rmovep = rmove; oldx = -1; oldy = -1; if (movep) *movep = move; return 1; /*if (player == WHITE && ANTICHESS_ISWHITE (val)) return 0;*/ } static int hasmove (Pos *pos, int player) { int x1, y1, x2, y2, val; for (x1 = 0; x1 < board_wid; x1++) for (y1 = 0; y1 < board_heit; y1++) { val = pos->board [y1 * board_wid + x1]; if (player == WHITE && !ANTICHESS_ISWHITE (val)) continue; if (player == BLACK && !ANTICHESS_ISBLACK (val)) continue; for (x2 = 0; x2 < board_wid; x2++) for (y2 = 0; y2 < board_heit; y2++) if (islegal (pos, x1, y1, x2, y2, player)) return 1; } return 0; } ResultType antichess_who_won (Pos *pos, Player player, char **commp) { static char comment[32]; char *who_str [3] = { "White won", "Black won", "Draw" }; *commp = NULL; if (hasmove (pos, player)) //return RESULT_NOTYET; { if (pos->num_moves > antichess_max_moves) { fprintf (stderr, "max moves reached\n"); snprintf (comment, 32, "%s", who_str[2]); *commp = comment; return RESULT_TIE; } return RESULT_NOTYET; } *commp = comment; if (hasmove (pos, player == WHITE ? BLACK : WHITE)) { strncpy (comment, who_str[player == WHITE ? 0 : 1], 31); return player == WHITE ? RESULT_WHITE : RESULT_BLACK; } else { strncpy (comment, who_str[2], 31); return RESULT_TIE; } } int antichess_movegen_square (byte *pos, byte **movp, int player, int oldx, int oldy, int x, int y) { int val; if (!ISINBOARD(x, y)) return 0; val = pos [y * board_heit + x]; if ((player == WHITE && ANTICHESS_ISWHITE (val)) || (player == BLACK && ANTICHESS_ISBLACK (val))) return 0; *(*movp)++ = oldx; *(*movp)++ = oldy; *(*movp)++ = 0; *(*movp)++ = x; *(*movp)++ = y; *(*movp)++ = pos [oldy * board_heit + oldx]; *(*movp)++ = -1; return 1; } int antichess_movegen_line (byte *pos, byte **movp, int player, int x, int y, int incx, int incy) { int oldx = x, oldy = y; int capture = 0, val; do { if (capture) return 1; x += incx; y += incy; val = pos [y * board_heit + x]; if (ISINBOARD (x, y) && oppcolor (pos, oldx, oldy, x, y)) capture = 1; } while (antichess_movegen_square (pos, movp, player, oldx, oldy, x, y)); return 0; } static void antichess_movegen_promote (byte *board, byte **movp, int player, int oldx, int oldy, int x, int y) { int i, j; int promote_pieces[2][4] = { {ANTICHESS_WQ, ANTICHESS_WR, ANTICHESS_WB, ANTICHESS_WN}, {ANTICHESS_BQ, ANTICHESS_BR, ANTICHESS_BB, ANTICHESS_BN} }; i = (player == WHITE ? 0 : 1); for(j=0; j<4; j++) { *(*movp)++ = oldx; *(*movp)++ = oldy; *(*movp)++ = 0; *(*movp)++ = x; *(*movp)++ = y; *(*movp)++ = promote_pieces[i][j]; *(*movp)++ = -1; } } byte *antichess_movegen (Pos *pos) { byte realbuf[4096]; byte *realp = realbuf; byte movbuf[4096], *movp = movbuf; byte *movlist; int i, j, k, x, y, capture = 0; int incxr[] = {0, 0, 1, -1}; int incyr[] = {1, -1, 0, 0}; int incxb[] = {1, 1, -1, -1}; int incyb[] = {1, -1, 1, -1}; int incxn[] = {2, 2, -2, -2, 1, 1, -1, -1}; int incyn[] = {1, -1, 1, -1, 2, -2, 2, -2}; byte *board = pos->board; Player player = pos->player; for (i=0; i= board_wid) continue; if (val == ANTICHESS_WP && ANTICHESS_ISBLACK (board [y * board_wid + x])) return TRUE; if (val == ANTICHESS_BP && ANTICHESS_ISWHITE (board [y * board_wid + x])) return TRUE; } return FALSE; } ResultType antichess_eval (Pos * pos, Player player, float *eval) { int wsum = 0, bsum = 0, i, j; gboolean wfound = FALSE, bfound = FALSE; for (i=0; i < board_wid; i++) for (j=0; j < board_heit; j++) if (ANTICHESS_ISWHITE (pos->board[j * board_wid + i])) { wsum++; if (!wfound && eval_pawn_has_move (pos->board, i, j)) wfound = TRUE; } else if (ANTICHESS_ISBLACK (pos->board[j * board_wid + i])) { bsum++; if (!bfound && eval_pawn_has_move (pos->board, i, j)) bfound = TRUE; } if (wsum == 0 || (!wfound && bfound && player == WHITE)) { *eval = GAME_EVAL_INFTY; return RESULT_WHITE; } if (bsum == 0 || (!bfound && wfound && player == BLACK)) { *eval = -GAME_EVAL_INFTY; return RESULT_BLACK; } if (!wfound && !bfound) { *eval = 0; return RESULT_TIE; } *eval = bsum - wsum; return RESULT_NOTYET; } ResultType antichess_eval_incr (Pos *pos, Player player, byte *move, float *eval) // check if there's a capture { byte *board = pos->board; if (player == WHITE) { if (move[2] && board[move[1] * board_wid + move[0]]) *eval = -1; else if (move[5] && board[move[4] * board_wid + move[3]]) return -1; else *eval = 0; } else { if (move[2] && board[move[1] * board_wid + move[0]]) *eval = 1; else if (move[5] && board[move[4] * board_wid + move[3]]) *eval = 1; else *eval = 0; } return RESULT_NOTYET; } gtkboard/src/ataxx.c000066400000000000000000000251721153150217100147360ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ #include #include #include #include #include "game.h" #include "aaball.h" #define ATAXX_CELL_SIZE 55 #define ATAXX_NUM_PIECES 2 #define ATAXX_BOARD_WID 7 #define ATAXX_BOARD_HEIT 7 #define ATAXX_EMPTY 0 #define ATAXX_WP 1 #define ATAXX_BP 2 #define ATAXX_MOVEGEN_PLAUSIBLE 1 static char ataxx_colors[6] = {140, 160, 140, 200, 200, 200}; static int ataxx_init_pos [ATAXX_BOARD_WID*ATAXX_BOARD_HEIT] = { 1 , 0 , 0 , 0 , 0 , 0 , 2 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 2 , 0 , 0 , 0 , 0 , 0 , 1 , }; void ataxx_init (); Game Ataxx = { ATAXX_CELL_SIZE, ATAXX_BOARD_WID, ATAXX_BOARD_HEIT, ATAXX_NUM_PIECES, ataxx_colors, ataxx_init_pos, NULL, "Ataxx", NULL, ataxx_init}; ResultType ataxx_eval (Pos *, Player, float *); byte *ataxx_movegen (Pos *); static int ataxx_getmove (Pos *, int, int, GtkboardEventType, Player, byte **, int **); static ResultType ataxx_who_won (Pos *, Player , char **); unsigned char * ataxx_get_rgbmap (int, int); void ataxx_reset_uistate (); static int ataxx_max_moves = 200; void ataxx_init () { game_eval = ataxx_eval; game_movegen = ataxx_movegen; game_getmove = ataxx_getmove; game_who_won = ataxx_who_won; game_get_rgbmap = ataxx_get_rgbmap; game_white_string = "Red"; game_black_string = "Blue"; game_file_label = FILERANK_LABEL_TYPE_ALPHA; game_rank_label = FILERANK_LABEL_TYPE_NUM | FILERANK_LABEL_DESC; game_reset_uistate = ataxx_reset_uistate; game_allow_flip = TRUE; game_doc_about_status = STATUS_COMPLETE; game_doc_about = "Ataxx\n" "Two player game\n" "Status: Fully implemented\n" "URL: "GAME_DEFAULT_URL("ataxx"); game_doc_rules = " - The objective of the game is to get as many balls of your color as possible.\n" " - In each move you must click an existing ball of your color followed by an empty square.\n" " - The new square should be at a distance of at most 2 from the first square (a diagonal counts as one unit).\n" " - If the distance is two the first square becomes empty, but not if the distance is 1.\n" " - In either case all balls adjacent to the new square, if they are the opponent's color, get converted to your color.\n" " - If one player has no moves the player with more balls wins.\n"; } ResultType ataxx_who_won (Pos *pos, Player to_play, char **commp) { static char comment[32]; int i, wscore = 0, bscore = 0, who_idx; char *who_str [3] = { "Red won", "Blue won", "its a tie" }; byte *move = ataxx_movegen (pos); for (i=0; iboard[i] == ATAXX_WP) wscore++; else if (pos->board[i] == ATAXX_BP) bscore++; if (move[0] != -2) { free (move); if (pos->num_moves > ataxx_max_moves) { fprintf (stderr, "max moves reached\n"); snprintf (comment, 32, "%s", who_str[2]); *commp = comment; return RESULT_TIE; } else { snprintf (comment, 32, "%d : %d", wscore, bscore); *commp = comment; return RESULT_NOTYET; } } free (move); if (wscore > bscore) who_idx = 0; else if (wscore < bscore) who_idx = 1; else who_idx = 2; snprintf (comment, 32, "%s (%d : %d)", who_str [who_idx], wscore, bscore); *commp = comment; if (wscore > bscore) return RESULT_WHITE; if (wscore < bscore) return RESULT_BLACK; return RESULT_TIE; } ResultType ataxx_eval (Pos *pos, Player to_play, float *eval) { int i; int wcount, bcount; for (i=0, wcount=0, bcount=0; iboard[i] == ATAXX_WP) wcount++; if (pos->board[i] == ATAXX_BP) bcount++; } *eval = wcount-bcount; if (!wcount || !bcount) *eval *= GAME_EVAL_INFTY; if (!wcount) return RESULT_BLACK; if (!bcount) return RESULT_WHITE; return RESULT_NOTYET; } byte *ataxx_movegen (Pos *pos) /* to keep things from getting out of hand, we'll generate only _plausible_ moves: find the max #flips possible and generate only those moves that lead to at least max-1 flips */ { int incx[] = { -1, -1, -1, 0, 0, 1, 1, 1}; int incy[] = { -1, 0, 1, -1, 1, -1, 0, 1}; int incx2[] = { -2, -2, -2, -2, -2, -1, -1, 0, 0, 1, 1, 2, 2, 2, 2, 2}; int incy2[] = { -2, -1, 0, 1, 2, -2, 2, -2, 2, -2, 2, -2, -1, 0, 1, 2}; int x, y, i, j, newx, newy; Player player = pos->player; byte our = (player == WHITE ? ATAXX_WP : ATAXX_BP); byte other = (player == WHITE ? ATAXX_BP : ATAXX_WP); byte *board = pos->board; #ifdef ATAXX_MOVEGEN_PLAUSIBLE int max_nbrs; #endif int found = 0; byte movbuf [4096]; byte *movp = movbuf; byte *movlist; byte *nbrs; nbrs = (byte *) malloc (board_wid * board_heit * sizeof (byte)); assert (nbrs); for (i=0; i= 0 && newy >= 0 && newx < board_wid && newy < board_heit) nbrs [newy * board_wid + newx] ++; } } #ifdef ATAXX_MOVEGEN_PLAUSIBLE max_nbrs=0; for (x=0; x max_nbrs) { found=0; for (j=0; j<8; j++) { newx = x + incx[j]; newy = y + incy[j]; if (newx >= 0 && newy >= 0 && newx < board_wid && newy < board_heit && board [newy * board_wid + newx] == our) { max_nbrs = nbrs[y * board_wid + x]; found=1; break; } } /*if (found) continue; nbrs [y * board_wid + x]--; if (nbrs[y * board_wid + x] <= max_nbrs) continue; for (j=0; j<16; j++) { newx = x + incx2[j]; newy = y + incy2[j]; if (newx >= 0 && newy >= 0 && newx < board_wid && newy < board_heit && board [newy * board_wid + newx] == our) { max_nbrs = nbrs[y * board_wid + x]; break; } }*/ } #endif for (x=0; x= 0 && newy >= 0 && newx < board_wid && newy < board_heit) if (board [newy * board_wid + newx] == our) { /* found a same col neighbor */ found=1; break; } } if (found) { *movp++ = x; *movp++ = y; *movp++ = our; for (i=0; i<8; i++) { newx = x + incx[i]; newy = y + incy[i]; if (newx >= 0 && newy >= 0 && newx < board_wid && newy < board_heit) if (board [newy * board_wid + newx] == other) { *movp++ = newx; *movp++ = newy; *movp++ = our; } } *movp++ = -1; } else { for (i=0; i<16; i++) { newx = x + incx2[i]; newy = y + incy2[i]; if (!(newx >= 0 && newy >= 0 && newx < board_wid && newy < board_heit)) continue; if (board [newy * board_wid + newx] != our) continue; *movp++ = x; *movp++ = y; *movp++ = our; *movp++ = newx; *movp++ = newy; *movp++ = ATAXX_EMPTY; for (j=0; j<8; j++) { newx = x + incx[j]; newy = y + incy[j]; if (newx >= 0 && newy >= 0 && newx < board_wid && newy < board_heit) if (board [newy * board_wid + newx] == other) { *movp++ = newx; *movp++ = newy; *movp++ = our; } } *movp++ = -1; } } } *movp++ = -2; movlist = (byte *) (malloc (movp - movbuf)); memcpy (movlist, movbuf, (movp - movbuf)); free (nbrs); return movlist; } static int oldx = -1, oldy = -1; void ataxx_reset_uistate () { oldx = -1, oldy = -1; } int ataxx_getmove (Pos *pos, int x, int y, GtkboardEventType type, Player to_play, byte **movp, int **rmovep) { static byte move[32]; static int rmove[4]; byte *mptr = move; int *rp = rmove; int diffx, diffy; int other, i; int incx[] = { -1, -1, -1, 0, 0, 1, 1, 1}; int incy[] = { -1, 0, 1, -1, 1, -1, 0, 1}; if (type != GTKBOARD_BUTTON_RELEASE) return 0; if (oldx == -1) { if (pos->board [y * board_wid + x] != (to_play == WHITE ? ATAXX_WP : ATAXX_BP)) return -1; oldx = x; oldy = y; *rp++ = x; *rp++ = y; *rp++ = RENDER_HIGHLIGHT1; *rp++ = -1; *rmovep = rmove; return 0; } if (x == oldx && y == oldy) { *rp++ = oldx; *rp++ = oldy; *rp++ = RENDER_NONE; *rp++ = -1; *rmovep = rmove; oldx = -1; oldy = -1; return 0; } if (pos->board [y * board_wid + x] != ATAXX_EMPTY) { *rp++ = oldx; *rp++ = oldy; *rp++ = RENDER_NONE; *rp++ = -1; *rmovep = rmove; return oldx = oldy = -1; } diffx = abs (x - oldx); diffy = abs (y - oldy); if (diffx > 2 || diffy > 2) { return oldx = oldy = -1; } if (diffx > 1 || diffy > 1) { *mptr++ = oldx; *mptr++ = oldy; *mptr++ = ATAXX_EMPTY; } other = (to_play == WHITE ? ATAXX_BP : ATAXX_WP); for (i=0; i<8; i++) { int newx = x + incx[i], newy = y + incy[i]; if (newx < 0 || newy < 0 || newx >= board_wid || newy >= board_heit) continue; if (pos->board[newy * board_wid + newx] == other) { *mptr++ = newx; *mptr++ = newy; *mptr++ = (to_play == WHITE ? ATAXX_WP : ATAXX_BP); } } { *mptr++ = x; *mptr++ = y; *mptr++ = (to_play == WHITE ? ATAXX_WP : ATAXX_BP); } *mptr = -1; if (movp) *movp = move; *rp++ = oldx; *rp++ = oldy; *rp++ = RENDER_NONE; *rp++ = -1; *rmovep = rmove; oldx = -1; oldy = -1; return 1; } unsigned char * ataxx_get_rgbmap (int idx, int color) { int fg, bg, i; char *colors; static char rgbbuf[3 * ATAXX_CELL_SIZE * ATAXX_CELL_SIZE]; colors = ataxx_colors; fg = (idx == ATAXX_WP ? 0xee << 16 : 0xee); if (color == BLACK) colors += 3; for(i=0, bg=0;i<3;i++) { int col = colors[i]; if (col<0) col += 256; bg += col * (1 << (16-8*i));} rgbmap_ball_shadow_gen(55, rgbbuf, fg, bg, 17.0, 35.0, 3); return rgbbuf; } gtkboard/src/blet.c000066400000000000000000000120061153150217100145270ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ #include #include #include #include #include "game.h" #include "aaball.h" #define BLET_CELL_SIZE 55 #define BLET_NUM_PIECES 2 #define BLET_BOARD_WID 8 #define BLET_BOARD_HEIT 8 #define BLET_EMPTY 0 #define BLET_RP 1 #define BLET_GP 2 static char blet_colors[6] = {140, 140, 180, 140, 140, 180}; static int blet_init_pos [BLET_BOARD_WID*BLET_BOARD_HEIT] = { 1 , 2 , 1 , 2 , 1 , 2 , 1 , 2 , 2 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 2 , 2 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 2 , 2 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 2 , 2 , 1 , 2 , 1 , 2 , 1 , 2 , 1 , }; SCORE_FIELD blet_score_fields[] = {SCORE_FIELD_USER, SCORE_FIELD_SCORE, SCORE_FIELD_TIME, SCORE_FIELD_DATE, SCORE_FIELD_NONE}; char *blet_score_field_names[] = {"User", "Flips", "Time", "Date", NULL}; void blet_init (); Game Blet = { BLET_CELL_SIZE, BLET_BOARD_WID, BLET_BOARD_HEIT, BLET_NUM_PIECES, blet_colors, blet_init_pos, NULL, "Blet", "Logic puzzles", blet_init}; static int blet_getmove (Pos *, int, int, GtkboardEventType, Player, byte **, int **); static ResultType blet_who_won (Pos *, Player , char **); unsigned char * blet_get_rgbmap (int, int); InputType blet_event_handler (Pos *pos, GtkboardEvent *event, MoveInfo *move_info_p); void blet_init () { // game_getmove = blet_getmove; game_get_rgbmap = blet_get_rgbmap; game_single_player = TRUE; game_who_won = blet_who_won; game_scorecmp = game_scorecmp_def_iscore; game_score_fields = blet_score_fields; game_score_field_names = blet_score_field_names; game_event_handler = blet_event_handler; game_doc_about_status = STATUS_COMPLETE; game_doc_about = "Blet\n" "Single player game\n" "Status: Partially implemented\n" "URL: "GAME_DEFAULT_URL("blet"); game_doc_rules = "If a ball is surrounded by balls of the opposite color, you can click on the middle ball to flip all three.\n\n" "The goal is to get 23 green balls in as few flips as possible\n"; game_doc_strategy = "Blet was invented by Villegas, Sadun and Voloch. A research paper showing the optimal strategy as well as an online version of the game (which requires a tcl browser plugin) can be found at: http://www.ma.utexas.edu/users/voloch/blet.html"; } static ResultType blet_who_won (Pos *pos, Player player, char **commp) { static char comment[32]; int ngreen, i; gboolean over; for (i=0, ngreen = 0; i < board_wid * board_heit; i++) if (pos->board[i] == BLET_GP) ngreen++; over = (ngreen == 23 ? TRUE : FALSE); if (over) snprintf (comment, 32, "You won! Flips: %d", pos->num_moves); else snprintf (comment, 32, "Green: %d; Flips: %d", ngreen, pos->num_moves); *commp = comment; return over ? RESULT_WON : RESULT_NOTYET; } static int incx[] = { -1, 1, 0, 0}; static int incy[] = { 0, 0, 1, -1}; #define FLIP(x) ((x)==BLET_RP?BLET_GP:BLET_RP) InputType blet_event_handler (Pos *pos, GtkboardEvent *event, MoveInfo *move_info_p) { static byte move[32]; byte *mp = move; int val, k, x, y; if (event->type != GTKBOARD_BUTTON_RELEASE) return INPUT_NOTYET; x = event->x; y = event->y; if (x > 0 && x < board_wid - 1 && y > 0 && y < board_heit - 1) { move_info_p->help_message = "You must click on one of the balls."; return INPUT_ILLEGAL; } val = pos->board [y * board_wid + x]; for (k=0; k < 4; k++) { int newx = x + incx[k], newy = y + incy[k]; if (!ISINBOARD(newx, newy)) continue; if (pos->board[newy * board_wid + newx] == val) { move_info_p->help_message = "Both neighbors must be of the opposite color."; return INPUT_ILLEGAL; } if (pos->board[newy * board_wid + newx] == BLET_EMPTY) continue; *mp++ = newx; *mp++ = newy; *mp++ = val; } *mp++ = x; *mp++ = y; *mp++ = FLIP(val); *mp++ = -1; move_info_p->move = move; return INPUT_LEGAL; } unsigned char * blet_get_rgbmap (int idx, int color) { int fg, bg, i; char *colors; static char rgbbuf[3 * BLET_CELL_SIZE * BLET_CELL_SIZE]; colors = blet_colors; fg = (idx == BLET_GP ? 0xcc << 8 : 0xee << 16); if (color == BLACK) colors += 3; for(i=0, bg=0;i<3;i++) { int col = colors[i]; if (col<0) col += 256; bg += col * (1 << (16-8*i));} rgbmap_ball_shadow_gen(55, rgbbuf, fg, bg, 17.0, 35.0, 3); return rgbbuf; } gtkboard/src/board.c000066400000000000000000000467131153150217100147040ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ /** \file board.c \brief Functions to manipulate the drawing_area where the board is drawn */ #include #include #include #include #include #include #include "board.h" #include "ui_common.h" #include "ui.h" #include "menu.h" #include "sound.h" #include "../pixmaps/splash.xpm" //! for showing names of rows and columns static GtkWidget *board_rowbox_real = NULL, *board_colbox_real = NULL; //! Colors for the light squares, dark squares, lines GdkColor board_colors[6]; //! Colors for highlighting GdkColor board_highlight_colors[3]; //! Colors for turning pixmaps into buttons GdkColor board_buttonize_colors[2]; //! gcs for light squares, dark squares and lines GdkGC *board_gcs[3] = {NULL, NULL, NULL}; //! gcs for highlighting GdkGC *board_highlight_gcs[3] = {NULL, NULL, NULL}; //! gcs for drawing buttons GdkGC *board_buttonize_gcs[3] = {NULL, NULL, NULL}; //! Images representing the pieces static GdkPixmap **pieces = NULL; //! Bitmaps to specify transparency for the pieces // *sigh* I wish we had a _high-level_ widget set static GdkBitmap **piece_masks = NULL; //! Backround image static GdkPixmap *board_bgimage = NULL; //! This is TRUE when the game is paused gboolean board_suspended = FALSE; //! Is the board flipped (rotated 180 deg) gboolean state_board_flipped = FALSE; //! default background char board_default_colors [9] = {215, 215, 215, 215, 215, 215, 0, 0, 0}; static int cell_size, num_pieces; extern void ui_make_human_move (byte *move, int *rmove); void board_set_game_params () { cell_size = opt_game->cell_size; num_pieces = opt_game->num_pieces; } void board_set_cell (int x, int y, byte val) { cur_pos.board[y * board_wid + x] = val; } void board_apply_refresh (byte *move, int *rmove) { int i, x, y; byte *board = cur_pos.board; int *rmove_tmp = NULL; if (move && game_get_render) game_get_render (&cur_pos, move, &rmove); if (move) { for (i=0; move[3*i] != -1; i++) { x = move[3*i]; y = move[3*i+1]; cur_pos.board[y * board_wid + x] = move [3*i+2]; board_refresh_cell (x, y); } } if (rmove) { for (i=0; rmove[3*i] != -1; i++) { x = rmove[3*i]; y = rmove[3*i+1]; cur_pos.render[y * board_wid + x] = rmove [3*i+2]; board_refresh_cell (x, y); } } if (rmove_tmp) { for (i=0; rmove[3*i] != -1; i++) { x = rmove_tmp[3*i]; y = rmove_tmp[3*i+1]; cur_pos.render[y * board_wid + x] = rmove_tmp[3*i+2]; board_refresh_cell (x, y); } } } //! Draws the square (x, y). On the board it is shown at (real_x, real_y) void board_refresh_cell_real (int x, int y, int real_x, int real_y) { GdkGC *gc; int parity = (board_wid * board_heit + x + y + 1) % 2; int thepiece; if (opt_quiet) return; if (!cur_pos.board) return; gc = board_area->style->bg_gc[GTK_STATE_NORMAL]; gdk_gc_set_clip_mask (gc, NULL); gdk_gc_set_clip_origin (gc, real_x * cell_size, real_y * cell_size); thepiece = cur_pos.board[y * board_wid + x] -1 + num_pieces * parity; if ((cur_pos.render[y * board_wid + x] & 0xFF) == RENDER_REPLACE) thepiece = (cur_pos.render[y * board_wid + x] >> 8) -1 + num_pieces * parity; if ((cur_pos.board[y * board_wid + x] != 0 || (cur_pos.render[y * board_wid + x] & 0xFF) == RENDER_REPLACE) && !board_suspended) { /* FIXME: current impl is that if bgimage is set then bgcolor is irrelevant. Maybe we should change it so that bgimage is layered on top of bgcolor */ if (board_bgimage) { gdk_draw_pixmap (board_area->window, gc, (GdkDrawable *) board_bgimage, real_x * cell_size, real_y * cell_size, real_x * cell_size, real_y * cell_size, cell_size, cell_size ); gdk_gc_set_clip_mask (gc, piece_masks [thepiece]); gdk_gc_set_clip_origin (gc, real_x * cell_size, real_y * cell_size); } gdk_draw_pixmap (board_area->window, gc, (GdkDrawable *) pieces [thepiece], 0, 0, real_x * cell_size, real_y * cell_size, -1, -1); } else { if (board_bgimage) { gdk_draw_pixmap (board_area->window, gc, (GdkDrawable *) board_bgimage, real_x * cell_size, real_y * cell_size, real_x * cell_size, real_y * cell_size, cell_size, cell_size ); } else gdk_draw_rectangle (board_area->window, board_gcs[parity], 1, real_x * cell_size, real_y * cell_size, cell_size, cell_size); } if (cur_pos.render[y * board_wid + x] == RENDER_SHADE1 && cur_pos.board[y * board_wid + x] != 0 && !board_suspended) { #if GTK_MAJOR_VERSION > 1 GdkPixbuf *pixbuf; int i; guchar *pixels; pixbuf = gdk_pixbuf_get_from_drawable (NULL, pieces[thepiece], NULL, 0, 0, 0, 0, cell_size, cell_size); pixels = gdk_pixbuf_get_pixels (pixbuf); for (i=0; i<3*cell_size*cell_size; i++) pixels[i] = (pixels[i] + 127)/2; gdk_pixbuf_render_to_drawable (pixbuf, board_area->window, gc, 0, 0, real_x * cell_size, real_y * cell_size, cell_size, cell_size, GDK_RGB_DITHER_NONE, 0, 0); // FIXME: find out the correct way to free it g_free (pixels); g_free (pixbuf); #else fprintf (stderr, "Warning: RENDER_SHADE currently unimplemented in gtk1 version\n"); #endif } if (game_draw_cell_boundaries) { if (real_x > 0) gdk_draw_line (board_area->window, board_gcs[2], real_x * cell_size, real_y * cell_size, real_x * cell_size, (real_y + 1) * cell_size); if (real_y > 0) gdk_draw_line (board_area->window, board_gcs[2], real_x * cell_size, real_y * cell_size, (real_x + 1) * cell_size, real_y * cell_size); } // TODO: do HIGHLIGHT2 and 3 also if (cur_pos.render[y * board_wid + x] == RENDER_HIGHLIGHT1 && !board_suspended) { int incr = game_draw_cell_boundaries ? 1 : 0; gdk_draw_line (board_area->window, board_highlight_gcs[0], real_x * cell_size + incr, real_y * cell_size + incr, real_x * cell_size + incr, (real_y + 1) * cell_size - 1); gdk_draw_line (board_area->window, board_highlight_gcs[0], real_x * cell_size + incr, real_y * cell_size + incr, (real_x + 1) * cell_size - 1, real_y * cell_size + incr); gdk_draw_line (board_area->window, board_highlight_gcs[0], (real_x + 1) * cell_size - 1, real_y * cell_size + incr, (real_x + 1) * cell_size - 1, (real_y + 1) * cell_size - 1); gdk_draw_line (board_area->window, board_highlight_gcs[0], real_x * cell_size + incr, (real_y + 1) * cell_size - 1, (real_x + 1) * cell_size - 1, (real_y + 1) * cell_size - 1); } if (cur_pos.render[y * board_wid + x] == RENDER_BUTTONIZE && !board_suspended) { int incr = game_draw_cell_boundaries ? 1 : 0; gdk_draw_line (board_area->window, board_buttonize_gcs[0], real_x * cell_size + incr, real_y * cell_size + incr, real_x * cell_size + incr, (real_y + 1) * cell_size - 1); gdk_draw_line (board_area->window, board_buttonize_gcs[0], real_x * cell_size + incr, real_y * cell_size + incr, (real_x + 1) * cell_size - 1, real_y * cell_size + incr); gdk_draw_line (board_area->window, board_buttonize_gcs[1], (real_x + 1) * cell_size - 1, real_y * cell_size + incr, (real_x + 1) * cell_size - 1, (real_y + 1) * cell_size - 1); gdk_draw_line (board_area->window, board_buttonize_gcs[1], real_x * cell_size + incr, (real_y + 1) * cell_size - 1, (real_x + 1) * cell_size - 1, (real_y + 1) * cell_size - 1); } } //! A wrapper around board_refresh_cell_real() to take care of whether the board is flipped void board_refresh_cell (int x, int y) { int real_x, real_y; real_x = (state_board_flipped ? board_wid - 1 - x : x); real_y = (state_board_flipped ? y : board_heit - 1 - y); board_refresh_cell_real (x, y, real_x, real_y); } //! Redraws the exposed area of the board gboolean board_redraw (GtkWidget *widget, GdkEventExpose *event) { int x, y; int xmin = 0, ymin = 0, xmax = board_wid, ymax = board_heit; if (!opt_game) { GdkPixmap *splash_pixmap; splash_pixmap = gdk_pixmap_colormap_create_from_xpm_d (NULL, gdk_colormap_get_system (), NULL, NULL, splash_xpm); gdk_draw_pixmap ((GdkDrawable *)board_area->window, board_area->style->bg_gc[GTK_STATE_NORMAL], (GdkDrawable *)splash_pixmap, 0, 0, 0, 0, -1, -1); gdk_pixmap_unref (splash_pixmap); return TRUE; } if (event) { xmin = event->area.x / cell_size; ymin = event->area.y / cell_size; xmax = (event->area.x + event->area.width) / cell_size + 1; ymax = (event->area.y + event->area.height) / cell_size + 1; if (ymin < 0) ymin = 0; if (xmax > board_wid) xmax = board_wid; if (ymax > board_heit) ymax = board_heit; } for (x=xmin; xwindow); g_assert (opt_game); board_suspended = TRUE; /* gdk_draw_rectangle ((GdkDrawable *)board_area->window, def_gc, TRUE, 0, 0, board_wid * cell_size, board_heit * cell_size); gdk_gc_destroy (def_gc);*/ // FIXME: how do we get this screen to be the default background color? board_redraw_all(); } static void board_get_cell (GdkEventButton *event, int *row, int *col, int *pixel_x, int *pixel_y) { *row = ((int)event->x / cell_size); *col = board_heit - 1 - ((int)event->y / cell_size); *pixel_x = (int)event->x; *pixel_y = board_heit * cell_size - 1 - (int)event->y; if (state_board_flipped) { *row = board_wid - 1 - *row; *col = board_heit - 1 - *col; *pixel_x = board_wid * cell_size - 1 - *pixel_x; *pixel_y = board_heit * cell_size - 1 - *pixel_y; } } //! handles mouse clicks as well as key presses gint board_signal_handler (GtkWidget *widget, GdkEventButton *event, gpointer data) /* FIXME: clean up this function */ { int row, col, pixel_x, pixel_y, type; int status = 0; byte *move = NULL; int *rmove = NULL; GtkboardEvent our_event; MoveInfo minfo = {NULL, NULL, NULL, NULL, NULL}; if (!opt_game) return FALSE; if (ui_gameover) return FALSE; if (event->type == GDK_KEY_PRESS && !(((GdkEventKey *)event)->state & (GDK_CONTROL_MASK | GDK_MOD1_MASK))) { if (!game_getmove_kb && !game_event_handler) return FALSE; if (game_event_handler) { our_event.type = GTKBOARD_KEY_PRESS; our_event.key = ((GdkEventKey *)event)->keyval; status = game_event_handler (&cur_pos, &our_event, &minfo); move = minfo.move; rmove = minfo.rmove; } else //(if game_getmove_kb) status = game_getmove_kb (&cur_pos, ((GdkEventKey *)event)->keyval, &move, &rmove); } else { if (event->type == GDK_BUTTON_PRESS || event->type == GDK_BUTTON_RELEASE) { if (player_to_play != HUMAN) { sb_message ("Machine's turn", FALSE); return FALSE; } if (!impl_check()) { sb_error ("Not yet implemented", TRUE); return FALSE; } } if (!game_getmove && !game_event_handler) {return FALSE;} board_get_cell (event, &row, &col, &pixel_x, &pixel_y); if (!(row >= 0 && row < board_wid)) return FALSE; if (!(col >= 0 && col < board_heit)) return FALSE; switch (event->type) { case GDK_BUTTON_PRESS: type = GTKBOARD_BUTTON_PRESS; break; case GDK_BUTTON_RELEASE: type = GTKBOARD_BUTTON_RELEASE; break; case GDK_MOTION_NOTIFY: type = GTKBOARD_MOTION_NOTIFY; break; case GDK_LEAVE_NOTIFY: type = GTKBOARD_LEAVE_NOTIFY; break; default: return FALSE; } if (game_event_handler) { our_event.type = type; our_event.x = row; our_event.y = col; our_event.pixel_x = pixel_x; our_event.pixel_y = pixel_y; status = game_event_handler (&cur_pos, &our_event, &minfo); move = minfo.move; rmove = minfo.rmove; } else status = game_getmove (&cur_pos, row, col, type, cur_pos.player, &move, &rmove); if (status < 0) { gchar *tmpstr = minfo.help_message ? g_strdup_printf ("Illegal move: %s", minfo.help_message) : g_strdup_printf ("Illegal move"); sb_error (tmpstr, FALSE); g_free (tmpstr); sound_play (SOUND_ILLEGAL_MOVE); } } if (status <= 0) { ui_make_human_move (NULL, rmove); if (rmove) menu_start_stop_game (NULL, MENU_START_GAME); return FALSE; } sound_play (SOUND_USER_MOVE); menu_start_stop_game (NULL, MENU_START_GAME); ui_make_human_move (move, rmove); return FALSE; } //! Free all malloc()d stuff void board_free () { int i; if (pieces) { /* It may be the case that the latter half of pieces[] is a copy of the first half */ for (i=0; ired = 256 * (color ? color[0] : 215); gdkcolor->green = 256 * (color ? color[1] : 215); gdkcolor->blue = 256 * (color ? color[2] : 215); gdk_color_alloc (cmap, gdkcolor); if (*gc) gdk_gc_unref (*gc); *gc = gdk_gc_new(board_area->window); gdk_gc_set_foreground (*gc, gdkcolor); } //! initialization of the board void board_init () { int i; GdkColormap *board_colormap; Game *game = opt_game; GdkGC *def_gc = gdk_gc_new ((GdkWindow *)board_area->window); // GtkWidget *hbox, *vbox; state_board_flipped = FALSE; if (!game) { #if GTK_MAJOR_VERSION == 1 gtk_drawing_area_size (GTK_DRAWING_AREA (board_area), 300, 300); #else gtk_widget_set_size_request (GTK_WIDGET (board_area), 300, 300); #endif return; } #if GTK_MAJOR_VERSION == 1 gtk_drawing_area_size (GTK_DRAWING_AREA (board_area), cell_size * board_wid, cell_size * board_heit); #else gtk_widget_set_size_request (GTK_WIDGET (board_area), cell_size * board_wid, cell_size * board_heit); #endif pieces = (GdkPixmap **) malloc (2 * num_pieces * sizeof (GdkPixmap *)); g_assert (pieces); piece_masks = (GdkBitmap **) malloc (2 * num_pieces * sizeof (GdkBitmap *)); g_assert (piece_masks); for (i=0; i<2*num_pieces; i++) pieces[i] = NULL; if (game_file_label) { board_rowbox_real = gtk_hbox_new (TRUE, 0); gtk_box_pack_end (GTK_BOX (board_rowbox), board_rowbox_real, FALSE, FALSE, 0); #if GTK_MAJOR_VERSION == 1 gtk_widget_set_usize (GTK_WIDGET (board_rowbox_real), cell_size * board_wid, -1); #else gtk_widget_set_size_request (GTK_WIDGET (board_rowbox_real), cell_size * board_wid, -1); #endif for (i=0; icolors == NULL) game->colors = board_default_colors; board_colormap = gdk_colormap_get_system (); board_color_init (&game->colors[0], &board_colors[0], &board_gcs[0], board_colormap, board_area); board_color_init (&game->colors[3], &board_colors[1], &board_gcs[1], board_colormap, board_area); if (game_draw_cell_boundaries) board_color_init (&game->colors[6], &board_colors[2], &board_gcs[2], board_colormap, board_area); if (game_highlight_colors) for (i=0; i<3; i++) board_color_init (&game_highlight_colors[3*i], &board_highlight_colors[i], &board_highlight_gcs[i], board_colormap, board_area); { char buttonize_colors [6] = {240, 240, 240, 128, 128, 128}; for (i=0; i<2; i++) board_color_init (&buttonize_colors[3*i], &board_buttonize_colors[i], &board_buttonize_gcs[i], board_colormap, board_area); } g_assert (num_pieces); for (i=0; i<2*num_pieces; i++) { char **pixmap = NULL; guchar *rgbbuf = NULL; { byte *colors = game->colors; if (i >= num_pieces && colors[0] == colors[3] && colors[1] == colors[4] && colors[2] == colors[5]) { pieces[i] = pieces[i-num_pieces]; piece_masks[i] = piece_masks[i-num_pieces]; continue; } } if (game_get_rgbmap) { rgbbuf = game_get_rgbmap(1+i%num_pieces, i < num_pieces ? WHITE: BLACK); if (rgbbuf) { pieces[i] = gdk_pixmap_new ( board_area->window, cell_size, cell_size, -1); gdk_draw_rgb_image ((GdkDrawable *)pieces[i], def_gc, 0, 0, cell_size, cell_size, GDK_RGB_DITHER_MAX, rgbbuf, cell_size * 3); } piece_masks[i] = NULL; } else { if (game_get_pixmap) pixmap = game_get_pixmap (1+i%num_pieces, i < num_pieces ? WHITE: BLACK); else pixmap = game->pixmaps [i%num_pieces]; if (pixmap) { pieces[i] = gdk_pixmap_colormap_create_from_xpm_d (NULL, board_colormap, &piece_masks[i], board_colors + i / num_pieces, pixmap); assert (pieces[i]); } else piece_masks[i] = NULL; } } if (game_bg_pixmap) { board_bgimage = gdk_pixmap_colormap_create_from_xpm_d (NULL, board_colormap, NULL, board_colors, game_bg_pixmap); assert (board_bgimage); } gdk_gc_destroy (def_gc); } gtkboard/src/board.h000066400000000000000000000027361153150217100147060ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ #ifndef _BOARD_H_ #define _BOARD_H_ #include #include #include #include "game.h" extern gboolean board_suspended ; extern GtkWidget *board_area; extern GtkWidget *board_rowbox, *board_colbox; extern gboolean state_board_flipped; void board_set_game_params (); void board_set_cell (int, int, byte); void board_refresh_cell (int, int); void board_show(); void board_hide(); void board_init (); void board_free (); gboolean board_redraw (GtkWidget *, GdkEventExpose *); void board_redraw_all (); gint board_signal_handler (GtkWidget *, GdkEventButton *, gpointer); void board_apply_refresh (byte *, int *); #endif gtkboard/src/breakthrough.c000066400000000000000000000244711153150217100162770ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ #include #include #include #include #include "game.h" #include "../pixmaps/chess.xpm" #define BREAKTHROUGH_CELL_SIZE 54 #define BREAKTHROUGH_NUM_PIECES 2 #define BREAKTHROUGH_BOARD_WID 8 #define BREAKTHROUGH_BOARD_HEIT 8 #define BREAKTHROUGH_EMPTY 0 #define BREAKTHROUGH_WP 1 #define BREAKTHROUGH_BP 2 int breakthrough_initpos [BREAKTHROUGH_BOARD_WID*BREAKTHROUGH_BOARD_HEIT] = { 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , }; char ** breakthrough_pixmaps [] = { chess_wp_54_xpm, chess_bp_54_xpm, }; int breakthrough_curx = -1, breakthrough_cury = -1; static char breakthrough_colors[] = {200, 200, 130, 0, 140, 0}; static int breakthrough_getmove (Pos *, int, int, GtkboardEventType, Player, byte **, int **); static int breakthrough_getmove_kb (Pos *, int, Player, byte ** , int **); void breakthrough_init (); static ResultType breakthrough_who_won (Pos *, Player, char **); static ResultType breakthrough_eval (Pos *, Player, float *eval); static ResultType breakthrough_eval_incr (Pos *, byte *, float *); static byte * breakthrough_movegen (Pos *); static void *breakthrough_newstate (Pos *, byte *); Game Breakthrough = { BREAKTHROUGH_CELL_SIZE, BREAKTHROUGH_BOARD_WID, BREAKTHROUGH_BOARD_HEIT, BREAKTHROUGH_NUM_PIECES, breakthrough_colors, breakthrough_initpos, breakthrough_pixmaps, "Breakthrough", "Chess variants", breakthrough_init}; void breakthrough_init () { game_getmove = breakthrough_getmove; // game_who_won = breakthrough_who_won; game_eval = breakthrough_eval; // game_eval_incr = breakthrough_eval_incr; game_movegen = breakthrough_movegen; game_file_label = FILERANK_LABEL_TYPE_ALPHA; game_rank_label = FILERANK_LABEL_TYPE_NUM | FILERANK_LABEL_DESC; game_allow_flip = TRUE; game_doc_about_status = STATUS_UNPLAYABLE; game_doc_about = "Breakthrough\n" "Two player game\n" "Status: Partially implemented\n" "URL: "GAME_DEFAULT_URL ("breakthrough"); } static gboolean eval_is_backward (byte *board, int x, int y) { int incy, other, j; int val = board[y * board_wid + x]; assert (val != BREAKTHROUGH_EMPTY); incy = val == BREAKTHROUGH_WP ? 1 : -1; other = val == BREAKTHROUGH_WP ? BREAKTHROUGH_BP : BREAKTHROUGH_WP; for (j = y; j < board_heit && j >= 0; j -= incy) { if (x - 1 >= 0 && board[j * board_wid + x - 1] == val) return FALSE; if (x + 1 < board_wid && board[j * board_wid + x + 1] == val) return FALSE; } for (j = y + incy; j < board_heit && j >= 0; j += incy) { if (board[j * board_wid + x] != BREAKTHROUGH_EMPTY) return FALSE; if (x - 1 >= 0 && j + incy >= 0 && j + incy < board_heit && board[j * board_wid + x - 1] == val && board[(j + incy) * board_wid + x - 1] == other) return TRUE; if (x + 1 >= 0 && j + incy >= 0 && j + incy < board_heit && board[j * board_wid + x + 1] == val && board[(j + incy) * board_wid + x + 1] == other) return TRUE; } return FALSE; } // Is this pawn a passer? static gboolean eval_is_passer (byte *board, int x, int y) { int incy, other; int val = board[y * board_wid + x]; assert (val != BREAKTHROUGH_EMPTY); incy = val == BREAKTHROUGH_WP ? 1 : -1; other = val == BREAKTHROUGH_WP ? BREAKTHROUGH_BP : BREAKTHROUGH_WP; for (y += incy; y < board_heit && y >= 0; y += incy) { if (board[y * board_wid + x] != BREAKTHROUGH_EMPTY) return FALSE; if (x - 1 >= 0 && board[y * board_wid + x - 1] == other) return FALSE; if (x + 1 < board_wid && board[y * board_wid + x + 1] == other) return FALSE; } return TRUE; } static gboolean eval_is_blocked (byte *board, int x, int y) { // TODO return FALSE; } static ResultType breakthrough_eval (Pos *pos, Player player, float *eval) { float wtsum = 0; int i, j; int wcount[BREAKTHROUGH_BOARD_WID], bcount[BREAKTHROUGH_BOARD_WID]; float doubled_pawn_penalty = 0.2; float edge_pawn_bonus = 0.1; float backward_pawn_penalty = 0.5; float blocked_pawn_penalty = 0.1; int passer_min_white = board_heit, passer_min_black = board_heit; for (i=0; iboard [0 * board_wid + i] == BREAKTHROUGH_WP && pos->board [(board_heit - 1) * board_wid + i] == BREAKTHROUGH_BP) continue; for (j=0; jboard[j * board_wid + i]; if (val == BREAKTHROUGH_EMPTY) continue; if (eval_is_passer (pos->board, i, j)) { if (val == BREAKTHROUGH_WP && (board_wid -1 - j < passer_min_white)) passer_min_white = board_wid -1 - j; if (val == BREAKTHROUGH_BP && (j < passer_min_black)) passer_min_black = j; } } } if (passer_min_white < board_heit || passer_min_black < board_heit) { int diff = passer_min_white - passer_min_black; if (diff < 0 || (diff == 0 && player == WHITE)) { *eval = -diff + 1; return RESULT_WHITE; } if (diff > 0 || (diff == 0 && player == BLACK)) { *eval = -diff - 1; return RESULT_BLACK; } } for (i=0; iboard [j * board_wid + i]; if (val == BREAKTHROUGH_EMPTY) continue; if (val == BREAKTHROUGH_WP) { wtsum += (1 + 0.1 * j); if (i == 0 || i == board_wid - 1) wtsum += edge_pawn_bonus; if (eval_is_backward (pos->board, i, j)) wtsum -= backward_pawn_penalty; wcount[i]++; } else if (val == BREAKTHROUGH_BP) { wtsum -= (1 + 0.1 * (board_wid - 1 - j)); if (i == 0 || i == board_wid - 1) wtsum -= edge_pawn_bonus; if (eval_is_backward (pos->board, i, j)) wtsum += backward_pawn_penalty; bcount[i]++; } } for (i=0; i 1 ? wcount[i] - 1 : 0); wtsum += (bcount[i] > 1 ? bcount[i] - 1 : 0); } *eval = wtsum; return RESULT_NOTYET; } static ResultType breakthrough_eval_incr (Pos *pos, byte *move, float *eval) { byte *board = pos->board; if (move[0] == move[3]) *eval = 0; else *eval = (pos->player == WHITE ? 1 : -1); *eval += 0.01 * random() / RAND_MAX; return RESULT_NOTYET; } static byte * breakthrough_movegen (Pos *pos) { int i, j, m, n, xoff, yoff; byte movbuf [256]; byte *movlist, *movp = movbuf; byte *board = pos->board; // generate a random permutation of the moves xoff = random() % board_wid; yoff = random() % board_heit; for (m=0; mplayer == WHITE ? BREAKTHROUGH_WP : BREAKTHROUGH_BP)) continue; incy = board [j * board_wid + i] == BREAKTHROUGH_WP ? 1 : -1; for (incx = -1; incx <= 1; incx += 1) { int val; if (!ISINBOARD (i + incx, j + incy)) continue; val = board [(j+incy) * board_wid + (i+incx)]; if ((val == BREAKTHROUGH_EMPTY || val == board [j * board_wid + i]) && incx != 0) continue; if (val != BREAKTHROUGH_EMPTY && incx == 0) continue; *movp++ = i + incx; *movp++ = j + incy; *movp++ = (pos->player == WHITE ? BREAKTHROUGH_WP : BREAKTHROUGH_BP); *movp++ = i; *movp++ = j; *movp++ = 0; *movp++ = -1; } } *movp++ = -2; movlist = (byte *) (malloc (movp - movbuf)); memcpy (movlist, movbuf, (movp - movbuf)); return movlist; } int breakthrough_getmove (Pos *pos, int x, int y, GtkboardEventType type, Player player, byte **movp, int **rmovp) { static byte move[128]; byte *mp = move; int diffx, diffy; if (type != GTKBOARD_BUTTON_RELEASE) return 0; if (breakthrough_curx < 0) { if ((player == WHITE && pos->board [y * board_wid + x] == BREAKTHROUGH_WP) || (player == BLACK && pos->board [y * board_wid + x] == BREAKTHROUGH_BP)) { int incy = player == WHITE ? 1 : -1; int other = player == WHITE ? BREAKTHROUGH_BP : BREAKTHROUGH_WP; if ((x == 0 || pos->board [(y + incy) * board_wid + x - 1] != other) && (x == board_wid - 1 || pos->board [(y + incy) * board_wid + x + 1] != other)) { if (pos->board [(y + incy) * board_wid + x] != BREAKTHROUGH_EMPTY) return -1; else { *mp++ = x; *mp++ = y; *mp++ = 0; *mp++ = x; *mp++ = y + incy; *mp++ = pos->board [y * board_wid + x]; *mp++ = -1; *movp = move; return 1; } } else { breakthrough_curx = x; breakthrough_cury = y; } return 0; } return -1; } diffx = x - breakthrough_curx; diffy = y - breakthrough_cury; if ((player == WHITE && pos->board [y * board_wid + x] == BREAKTHROUGH_WP) || (player == BLACK && pos->board [y * board_wid + x] == BREAKTHROUGH_BP)) { breakthrough_curx = breakthrough_cury = -1; return -1; } else if (pos->board[y * board_wid + x] == BREAKTHROUGH_EMPTY && ( (player == WHITE && (diffy != 1 || diffx != 0)) || (player == BLACK && (diffy != -1 || diffx != 0)) ) ) { breakthrough_curx = breakthrough_cury = -1; return -1; } else if (((player == WHITE && pos->board [y * board_wid + x] == BREAKTHROUGH_BP) || (player == BLACK && pos->board [y * board_wid + x] == BREAKTHROUGH_WP)) && ((player == WHITE && (diffy != 1 || abs (diffx) != 1)) ||(player == BLACK && (diffy != -1 || abs(diffx) != 1)))) { breakthrough_curx = breakthrough_cury = -1; return -1; } *mp++ = x; *mp++ = y; *mp++ = (player == WHITE ? BREAKTHROUGH_WP : BREAKTHROUGH_BP); *mp++ = breakthrough_curx; *mp++ = breakthrough_cury; *mp++ = 0; *mp++ = -1; *movp = move; breakthrough_curx = breakthrough_cury = -1; return 1; } gtkboard/src/checkers.c000066400000000000000000000207201153150217100153720ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ #include #include #include #include #include "game.h" #include "aaball.h" #define CHECKERS_CELL_SIZE 40 #define CHECKERS_NUM_PIECES 4 #define CHECKERS_BOARD_WID 8 #define CHECKERS_BOARD_HEIT 8 #define CHECKERS_WK 1 #define CHECKERS_WP 2 #define CHECKERS_BK 3 #define CHECKERS_BP 4 #define CHECKERS_ISKING(x) (x == 1 || x == 3) #define CHECKERS_ISPAWN(x) (x == 2 || x == 4) #define CHECKERS_ISWHITE(x) (x >= 1 && x <= 2) #define CHECKERS_ISBLACK(x) (x >= 3 && x <= 4) char checkers_colors[] = {200, 200, 200, 180, 180, 180}; int checkers_init_pos[] = { 0 , 4 , 0 , 4 , 0 , 4 , 0 , 4 , 4 , 0 , 4 , 0 , 4 , 0 , 4 , 0 , 0 , 4 , 0 , 4 , 0 , 4 , 0 , 4 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 2 , 0 , 2 , 0 , 2 , 0 , 2 , 0 , 0 , 2 , 0 , 2 , 0 , 2 , 0 , 2 , 2 , 0 , 2 , 0 , 2 , 0 , 2 , 0 , }; static int checkers_max_moves = 200; void checkers_init (); int checkers_getmove (Pos *, int, int, GtkboardEventType, Player, byte **, int **); ResultType checkers_who_won (Pos *, Player, char **); byte *checkers_movegen (Pos *); ResultType checkers_eval (Pos *, Player, float *); char ** checkers_get_pixmap (int idx, int color); void checkers_reset_uistate (); Game Checkers = { CHECKERS_CELL_SIZE, CHECKERS_BOARD_WID, CHECKERS_BOARD_HEIT, CHECKERS_NUM_PIECES, checkers_colors, checkers_init_pos, NULL, "Checkers", NULL, checkers_init}; void checkers_init () { game_getmove = checkers_getmove; game_movegen = checkers_movegen; game_who_won = checkers_who_won; game_eval = checkers_eval; game_get_pixmap = checkers_get_pixmap; game_reset_uistate = checkers_reset_uistate; game_file_label = FILERANK_LABEL_TYPE_ALPHA; game_rank_label = FILERANK_LABEL_TYPE_NUM | FILERANK_LABEL_DESC; game_allow_flip = TRUE; game_doc_about_status = STATUS_UNPLAYABLE; game_doc_about = "Checkers\n" "Two player game\n" "Status: Partially implemented (currently unplayable)\n" "URL: "GAME_DEFAULT_URL("checkers"); } ResultType checkers_who_won (Pos *pos, Player player, char **commp) { static char comment[32]; char *who_str [2] = { "white won", "black won"}; int found_w = 0, found_b = 0; int i; for (i=0; iboard[i])) found_w = 1; else if (CHECKERS_ISBLACK (pos->board[i])) found_b = 1; if (!found_b) { strncpy (comment, who_str[0], 31); *commp = comment; return RESULT_WHITE; } if (!found_w) { strncpy (comment, who_str[1], 31); *commp = comment; return RESULT_BLACK; } return RESULT_NOTYET; } byte * checkers_movegen (Pos *pos) { int i, j, diffx, diffy; byte movbuf [256]; byte *movlist, *mp = movbuf; byte *board = pos->board; Player player = pos->player; for (i=0; iboard [j * board_wid + i]) { case CHECKERS_WK: sum += (5 - fabs ((i-3.5) * (j-3.5)) / 10); break; case CHECKERS_WP: sum += (1 + j / 10.0); break; case CHECKERS_BK: sum -= (5 - fabs ((i-3.5) * (j-3.5)) / 10); break; case CHECKERS_BP: sum -= (1 + (board_heit - 1 - j) / 10.0); break; } } *eval = sum; return RESULT_NOTYET; } static int oldx = -1, oldy = -1; void checkers_reset_uistate () { oldx = -1, oldy = -1; } int checkers_getmove (Pos *pos, int x, int y, GtkboardEventType type, Player to_play, byte **movp, int ** rmovep) { static byte move[10]; byte *mp = move; int diffx, diffy; byte *board = pos->board; if (type != GTKBOARD_BUTTON_RELEASE) return 0; if (oldx < 0) { int val = board [y * board_wid + x]; if ((CHECKERS_ISWHITE(val) && !(to_play == WHITE)) || (CHECKERS_ISBLACK(val) && !(to_play == BLACK))) return -1; oldx = x; oldy = y; return 0; } if (x == oldx && y == oldy) { oldx = -1; oldy = -1; return 0; } diffx = x - oldx; if (abs (diffx) == 1) { diffy = y - oldy; if (abs (diffy) != 1) { oldx = oldy = -1; return -1;} if (!CHECKERS_ISKING(board [oldy * board_wid + oldx]) && diffy != (to_play == WHITE ? 1 : -1)) { oldx = oldy = -1; return -1;} if (board [y * board_wid + x] != 0) { oldx = oldy = -1; return -1;} *mp++ = oldx; *mp++ = oldy; *mp++ = 0; *mp++ = x; *mp++ = y; if ((to_play == WHITE && y == board_heit - 1) || (to_play == BLACK && y == 0)) *mp++ = (to_play == WHITE ? CHECKERS_WK : CHECKERS_BK); else *mp++ = board [oldy * board_wid + oldx]; *mp++ = -1; *movp = move; oldx = oldy = -1; return 1; } if (abs (diffx) == 2) { int val; diffy = y - oldy; if (abs (diffy) != 2) { oldx = oldy = -1; return -1;} if (!CHECKERS_ISKING(board [oldy * board_wid + oldx]) && diffy != (to_play == WHITE ? 2 : -2)) { oldx = oldy = -1; return -1;} if (board [y * board_wid + x] != 0) { oldx = oldy = -1; return -1;} val = board [(y-diffy/2) * board_wid + (x-diffx/2)]; if ((!CHECKERS_ISWHITE(val) && (to_play == BLACK)) || (!CHECKERS_ISBLACK(val) && (to_play == WHITE))) { oldx = oldy = -1; return -1;} *mp++ = oldx; *mp++ = oldy; *mp++ = 0; *mp++ = oldx+diffx/2; *mp++ = oldy+diffy/2; *mp++ = 0; *mp++ = x; *mp++ = y; if ((to_play == WHITE && y == board_heit - 1) || (to_play == BLACK && y == 0)) *mp++ = (to_play == WHITE ? CHECKERS_WK : CHECKERS_BK); else *mp++ = board [oldy * board_wid + oldx]; *mp++ = -1; *movp = move; oldx = oldy = -1; return 1; } { oldx = oldy = -1; return -1;} } char ** checkers_get_pixmap (int idx, int color) { int bg; int i; static char pixbuf[CHECKERS_CELL_SIZE * (CHECKERS_CELL_SIZE+1)]; for(i=0, bg=0;i<3;i++) { int col = checkers_colors[i+3]; if (col<0) col += 256; bg += col * (1 << (16-8*i));} return pixmap_ball_gen (CHECKERS_CELL_SIZE, pixbuf, CHECKERS_ISWHITE(idx) ? 0xffffff : 0x0000ff, bg, (idx == CHECKERS_WP || idx == CHECKERS_BP) ? 8 : 12, 24); } gtkboard/src/chess.c000066400000000000000000000535761153150217100147270ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ #include #include #include #include #include "game.h" #include "../pixmaps/chess.xpm" #include "move.h" #define CHESS_CELL_SIZE 54 #define CHESS_NUM_PIECES 12 #define CHESS_BOARD_WID 8 #define CHESS_BOARD_HEIT 8 #define CHESS_EMPTY 0 #define CHESS_WK 1 #define CHESS_WQ 2 #define CHESS_WR 3 #define CHESS_WB 4 #define CHESS_WN 5 #define CHESS_WP 6 #define CHESS_BK 7 #define CHESS_BQ 8 #define CHESS_BR 9 #define CHESS_BB 10 #define CHESS_BN 11 #define CHESS_BP 12 #define A_FILE 0 #define B_FILE 1 #define C_FILE 2 #define D_FILE 3 #define E_FILE 4 #define F_FILE 5 #define G_FILE 6 #define H_FILE 7 #define RANK_1 0 #define RANK_2 1 #define RANK_3 2 #define RANK_4 3 #define RANK_5 4 #define RANK_6 5 #define RANK_7 6 #define RANK_8 7 #define CHESS_ISWHITE(x) (x >= 1 && x <= 6) #define CHESS_ISBLACK(x) (x >= 7 && x <= 12) #ifndef abs #define abs(x) ((x) < 0 ? -(x) : (x)) #endif char chess_colors[] = {200, 200, 130, 0, 140, 0}; int chess_init_pos[] = { 9 , 11, 10, 8 , 7 , 10, 11, 9 , 12, 12, 12, 12, 12, 12, 12, 12 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 3 , 5 , 4 , 2 , 1 , 4 , 5 , 3 , }; static int chess_max_moves = 200; char ** chess_pixmaps[] = { chess_wk_54_xpm, chess_wq_54_xpm, chess_wr_54_xpm, chess_wb_54_xpm, chess_wn_54_xpm, chess_wp_54_xpm, chess_bk_54_xpm, chess_bq_54_xpm, chess_br_54_xpm, chess_bb_54_xpm, chess_bn_54_xpm, chess_bp_54_xpm, }; void chess_init (); int chess_getmove (Pos *, int, int, GtkboardEventType, Player, byte **, int **); ResultType chess_who_won (Pos *, Player, char **); byte *chess_movegen (Pos *); ResultType chess_eval (Pos *, Player, float *); void *chess_newstate (Pos *, byte *); void chess_reset_uistate (); Game Chess = { CHESS_CELL_SIZE, CHESS_BOARD_WID, CHESS_BOARD_HEIT, CHESS_NUM_PIECES, chess_colors, chess_init_pos, chess_pixmaps, "Chess", "Chess variants", chess_init}; typedef struct { int castle_WK:2; int castle_WQ:2; int castle_BK:2; int castle_BQ:2; int epfile:4; } Chess_state; //Chess_state state; void chess_init () { game_getmove = chess_getmove; game_who_won = chess_who_won; game_movegen = chess_movegen; game_eval = chess_eval; game_stateful = TRUE; game_state_size = sizeof (Chess_state); game_newstate = chess_newstate; game_file_label = FILERANK_LABEL_TYPE_ALPHA; game_rank_label = FILERANK_LABEL_TYPE_NUM | FILERANK_LABEL_DESC; game_reset_uistate = chess_reset_uistate; game_allow_flip = TRUE; game_doc_about_status = STATUS_UNPLAYABLE; game_doc_about = "Chess\n" "Two player game\n" "Status: Partially implemented (currently unplayable)\n" "URL: "GAME_DEFAULT_URL("chess"); } void *chess_newstate (Pos *pos, byte *move) { static Chess_state state = {1, 1, 1, 1, -1}; if (!pos->state) return &state; memcpy (&state, pos->state, sizeof (Chess_state)); { int val, to_x, to_y; // if pawn moves two squares to 4th rank then set epf if (move[2] != 0) { val = move[2]; to_x = move[0]; to_y = move[1]; } else if (move[5] != 0) { val = move[5]; to_x = move[3]; to_y = move[4]; } else assert (0); if ( (val == CHESS_WP && ((move[1] == 1 && move[4] == 3) || (move[1] == 3 && move[4] == 1))) || (val == CHESS_BP && ((move[1] == 6 && move[3] == 4) || (move[1] == 6 && move[4] == 6))) ) state.epfile = move[0]; else state.epfile = -1; if (val == CHESS_WK) state.castle_WK = state.castle_WQ = 0; if (val == CHESS_BK) state.castle_BK = state.castle_BQ = 0; if (val == CHESS_WR && to_x >= 4) state.castle_WK = 0; if (val == CHESS_WR && to_x < 4) state.castle_WQ = 0; if (val == CHESS_BR && to_x >= 4) state.castle_BK = 0; if (val == CHESS_BR && to_x < 4) state.castle_BQ = 0; } return &state; } static int isfreeline (byte *pos, int oldx, int oldy, int newx, int newy) { int x = oldx, y = oldy, dx, dy, diffx = newx - oldx, diffy = newy - oldy; if (abs (diffx) != abs(diffy) && diffx != 0 && diffy != 0) return 0; dx = (diffx ? (diffx / abs (diffx)) : 0); dy = (diffy ? (diffy / abs (diffy)) : 0); for (x+=dx, y+=dy; x != newx || y != newy; x+=dx, y+=dy) if (pos [y * board_wid + x] != 0) return 0; return 1; } static int islegal (Pos *pos, int oldx, int oldy, int x, int y) { int piece = pos->board [oldy * board_wid + oldx]; byte *board = pos->board; switch (piece) { case CHESS_WK: case CHESS_BK: { int rank, rook; int diffx = abs (x - oldx), diffy = abs (y - oldy); if (diffx <= 1 && diffy <= 1) return 1; // castling rank = (piece == CHESS_WK ? 0 : 7); rook = (piece == CHESS_WK ? CHESS_WR : CHESS_BR); if (oldx != 4) return 0; if (oldy != rank || y != rank) return 0; // TODO: not yet checking if // - the intervening squares are uncontrolled // - king hasn't moved yet if (x == 6) { if (board [rank * board_wid + 7] != rook) return 0; if (board [rank * board_wid + 6] != 0) return 0; if (board [rank * board_wid + 5] != 0) return 0; return 1; } else if (x == 2) { if (board [rank * board_wid + 0] != rook) return 0; if (board [rank * board_wid + 1] != 0) return 0; if (board [rank * board_wid + 2] != 0) return 0; if (board [rank * board_wid + 3] != 0) return 0; return 1; } return 0; } case CHESS_WQ: case CHESS_BQ: return isfreeline (board, oldx, oldy, x, y); case CHESS_WR: case CHESS_BR: if (!isfreeline (board, oldx, oldy, x, y)) return 0; if (oldx == x || oldy == y) return 1; return 0; case CHESS_WB: case CHESS_BB: if (!isfreeline (board, oldx, oldy, x, y)) return 0; if (oldx == x || oldy == y) return 0; return 1; case CHESS_WN: case CHESS_BN: { int diffx = abs (x - oldx), diffy = abs (y - oldy); if (diffx == 2 && diffy == 1) return 1; if (diffx == 1 && diffy == 2) return 1; return 0; } case CHESS_WP: if (board [y * board_wid + x] == 0) { // en passant if (y == 5 && oldy == 4 && (x == oldx + 1 || x == oldx - 1) && board [oldy * board_wid + x] == CHESS_BP) return 1; return (x == oldx && (y == oldy + 1 || (y == 3 && oldy == 1 && board [(2*board_wid + x)] == 0))); } return y == oldy + 1 && (x == oldx + 1 || x == oldx - 1) ; case CHESS_BP: if (board [y * board_wid + x] == 0) { if (y == 4 && oldy == 5 && (x == oldx + 1 || x == oldx - 1) && board [oldy * board_wid + x] == CHESS_WP) return 1; return (x == oldx && (y == oldy - 1 || (y == 4 && oldy == 6 && board [5*board_wid + x] == 0))); } return y == oldy - 1 && (x == oldx + 1 || x == oldx - 1) ; default: return 1; } } static int oppcolor (byte *board, int oldx, int oldy, int x, int y) /* True if one square is W and the other is B */ { int oldv = board [oldy * board_wid + oldx], v = board [y * board_wid + x]; if (CHESS_ISWHITE (oldv) && CHESS_ISBLACK (v)) return 1; if (CHESS_ISBLACK (oldv) && CHESS_ISWHITE (v)) return 1; return 0; } static gboolean is_in_check (Pos *pos, Player player) { int i, j, kingx = -1, kingy = -1; for (i=0; iboard [j * board_wid + i]; if ((player == WHITE && val == CHESS_WK) || (player == BLACK && val == CHESS_BK)) { kingx = i; kingy = j; } } for (i=0; iboard [j * board_wid + i]; if (!((player == WHITE && CHESS_ISBLACK (val)) || (player == BLACK && CHESS_ISWHITE (val)))) continue; if (islegal (pos, i, j, kingx, kingy)) return TRUE; } return FALSE; } //! Would "player" be in check after making "move" static gboolean leads_to_check (byte *board, byte *move, Player player) { static byte newboard [CHESS_BOARD_WID*CHESS_BOARD_HEIT]; Pos pos; memcpy (newboard, board, board_wid * board_heit); move_apply (newboard, move); pos.board = newboard; pos.state = NULL; return is_in_check (&pos, player); } static int oldx = -1, oldy = -1, oldval = -1; static int prom = 0, prom_x, prom_oldx; void chess_reset_uistate () { oldx = -1, oldy = -1, oldval = -1; prom = 0; } int chess_getmove (Pos *pos, int x, int y, GtkboardEventType type, Player player, byte ** movep, int ** rmovep) /* Translate mouse clicks into move */ { static byte move [13]; int val; if (type != GTKBOARD_BUTTON_RELEASE) return 0; if (oldx >= 0 && x == oldx && y == oldy) { oldx = -1; oldy = -1; return 0; } /* pawn promotion */ if (prom) { int new_p = -1; prom = 0; switch(x) { case 0: case 7: new_p = (player == WHITE ? CHESS_WR : CHESS_BR); break; case 1: case 6: new_p = (player == WHITE ? CHESS_WN : CHESS_BN); break; case 2: case 5: new_p = (player == WHITE ? CHESS_WB : CHESS_BB); break; case 3: case 4: new_p = (player == WHITE ? CHESS_WQ : CHESS_BQ); break; } move[0] = prom_oldx; move[1] = (player == WHITE ? 6 : 1); move[2] = 0; move[3] = prom_x; move[4] = (player == WHITE ? 7 : 0); move[5] = new_p; move[6] = -1; if (leads_to_check (pos->board, move, player)) return -1; if (movep) *movep = move; return 1; } val = pos->board [y * board_wid + x]; if (oldx == -1) { if (val == 0) return -1; if (player == WHITE && !CHESS_ISWHITE (val)) return -1; if (player == BLACK && !CHESS_ISBLACK (val)) return -1; oldx = x; oldy = y, oldval = val; return 0; } if (player == WHITE && CHESS_ISWHITE (val)) { oldx = -1; oldy = -1; return -1; } if (player == BLACK && CHESS_ISBLACK (val)) { oldx = -1; oldy = -1; return -1; } if (!islegal (pos, oldx, oldy, x, y)) { oldx = -1; oldy = -1; return -1; } /* en passant */ if ((oldval == CHESS_WP || oldval == CHESS_BP) && val == 0 && x != oldx) { move[0] = oldx; move[1] = oldy; move[2] = 0; move[3] = x; move[4] = y; move[5] = oldval; move[6] = x; move[7] = oldy; move[8] = 0; move[9] = -1; if (leads_to_check (pos->board, move, player)) return -1; if (movep) *movep = move; return 1; } /* pawn promotion */ if ((oldval == CHESS_WP || oldval == CHESS_BP) && (y == 0 || y == board_heit - 1)) { prom = 1; prom_oldx = oldx; prom_x = x; oldx = oldy = -1; return 0; } /* castling */ if ((oldval == CHESS_WK || oldval == CHESS_BK) && abs (x - oldx) > 1) { int rfile = x == 6 ? 7 : 0; int rook = pos->board [y * board_wid + rfile]; move[0] = oldx; move[1] = oldy; move[2] = 0; move[3] = x; move[4] = y; move[5] = oldval; move[6] = (oldx + x)/2; move[7] = y; move[8] = rook; move[9] = rfile; move[10] = y; move[11] = 0; move[12] = -1; oldx = -1, oldy = -1; if (leads_to_check (pos->board, move, player)) return -1; if (movep) *movep = move; return 1; } move[0] = oldx; move[1] = oldy; move[2] = 0; move[3] = x; move[4] = y; move[5] = oldval; move[6] = -1; oldx = -1; oldy = -1; if (leads_to_check (pos->board, move, player)) return -1; if (movep) *movep = move; return 1; } static int hasmove (Pos *pos, int player) { int x1, y1, x2, y2, val; for (x1 = 0; x1 < board_wid; x1++) for (y1 = 0; y1 < board_heit; y1++) { val = pos->board [y1 * board_wid + x1]; if (player == WHITE && !CHESS_ISWHITE (val)) continue; if (player == BLACK && !CHESS_ISBLACK (val)) continue; for (x2 = 0; x2 < board_wid; x2++) for (y2 = 0; y2 < board_heit; y2++) if (islegal (pos, x1, y1, x2, y2)) return 1; } return 0; } ResultType chess_who_won (Pos *pos, Player player, char **commp) { static char comment[32]; char *who_str [3] = { "White won", "Black won", "Draw" }; byte *move_list; *commp = NULL; move_list = chess_movegen (pos); if (move_list[0] != -2) { if (pos->num_moves > chess_max_moves) { fprintf (stderr, "max moves reached\n"); snprintf (comment, 32, "%s", who_str[2]); *commp = comment; return RESULT_TIE; } return RESULT_NOTYET; } *commp = comment; if (is_in_check (pos, player)) { strncpy (comment, who_str[player == WHITE ? 1 : 0], 31); return player == WHITE ? RESULT_BLACK : RESULT_WHITE; } else { strncpy (comment, who_str[2], 31); return RESULT_TIE; } } int chess_movegen_square (byte *board, byte **movp, int player, int oldx, int oldy, int x, int y) { int val; if (!ISINBOARD(x, y)) return 0; val = board [y * board_heit + x]; if ((player == WHITE && CHESS_ISWHITE (val)) || (player == BLACK && CHESS_ISBLACK (val))) return 0; *(*movp)++ = oldx; *(*movp)++ = oldy; *(*movp)++ = 0; *(*movp)++ = x; *(*movp)++ = y; *(*movp)++ = board [oldy * board_heit + oldx]; *(*movp)++ = -1; if (leads_to_check (board, *movp-7, player)) { *movp -= 7; return 0; } return 1; } int chess_movegen_line (byte *pos, byte **movp, int player, int x, int y, int incx, int incy) { int oldx = x, oldy = y; int capture = 0, val; do { x += incx; y += incy; val = pos [y * board_heit + x]; if (ISINBOARD (x, y) && oppcolor (pos, oldx, oldy, x, y)) capture = 1; } while (chess_movegen_square (pos, movp, player, oldx, oldy, x, y) && !capture); return 0; } static void chess_movegen_promote (byte *board, byte **movp, int player, int oldx, int oldy, int x, int y) { int i, j; int promote_pieces[2][4] = { {CHESS_WQ, CHESS_WR, CHESS_WB, CHESS_WN}, {CHESS_BQ, CHESS_BR, CHESS_BB, CHESS_BN} }; i = (player == WHITE ? 0 : 1); for(j=0; j<4; j++) { *(*movp)++ = oldx; *(*movp)++ = oldy; *(*movp)++ = 0; *(*movp)++ = x; *(*movp)++ = y; *(*movp)++ = promote_pieces[i][j]; *(*movp)++ = -1; if (leads_to_check (board, *movp-7, player)) { *movp -= 7; return; } } } static void chess_movegen_enpassant (Pos *pos, byte **movp, int player, int x, int y) { int val = pos->board [y * board_wid + x]; int epfile; if (!pos->state) epfile = -1; else epfile = ((Chess_state *)pos->state)->epfile; if (epfile < 0) return; if ((player == WHITE && val != CHESS_WP) || (player == BLACK && val != CHESS_BP)) return; if ((player == WHITE && y != 4) || (player == BLACK && y != 3)) return; if (abs (x - epfile) != 1) return; *(*movp)++ = x; *(*movp)++ = y; *(*movp)++ = 0; *(*movp)++ = epfile; *(*movp)++ = y + (player == WHITE ? 1 : -1); *(*movp)++ = val; *(*movp)++ = epfile; *(*movp)++ = y; *(*movp)++ = 0; *(*movp)++ = -1; if (leads_to_check (pos->board, *movp-10, player)) *movp -= 10; } static void chess_movegen_castle (Pos *pos, byte **movp, int player) { int rank = player == WHITE ? RANK_1 : RANK_8; int king = player == WHITE ? CHESS_WK : CHESS_BK; int rook = player == WHITE ? CHESS_WR : CHESS_BR; int castle_k, castle_q; byte *board = pos->board; if (!pos->state) return; castle_k = player == WHITE ? ((Chess_state *)pos->state)->castle_WK : ((Chess_state *)pos->state)->castle_BK; castle_q = player == WHITE ? ((Chess_state *)pos->state)->castle_WQ : ((Chess_state *)pos->state)->castle_BQ; if (board [rank * board_wid + E_FILE] != king) return; if (is_in_check (pos, player)) return; if (board [rank * board_wid + H_FILE] == rook && castle_k) { gboolean allowed = TRUE; *(*movp)++ = E_FILE; *(*movp)++ = rank; *(*movp)++ = 0; *(*movp)++ = F_FILE; *(*movp)++ = rank; *(*movp)++ = king; *(*movp)++ = -1; if (leads_to_check (pos->board, *movp-7, player)) allowed = FALSE; *movp -= 7; *(*movp)++ = E_FILE; *(*movp)++ = rank; *(*movp)++ = 0; *(*movp)++ = G_FILE; *(*movp)++ = rank; *(*movp)++ = king; *(*movp)++ = -1; if (leads_to_check (pos->board, *movp-7, player)) allowed = FALSE; *movp -= 7; if (allowed) { *(*movp)++ = E_FILE; *(*movp)++ = rank; *(*movp)++ = 0; *(*movp)++ = G_FILE; *(*movp)++ = rank; *(*movp)++ = king; *(*movp)++ = H_FILE; *(*movp)++ = rank; *(*movp)++ = 0; *(*movp)++ = F_FILE; *(*movp)++ = rank; *(*movp)++ = rook; *(*movp)++ = -1; } } if (board [rank * board_wid + A_FILE] == rook && castle_q) { gboolean allowed = TRUE; *(*movp)++ = E_FILE; *(*movp)++ = rank; *(*movp)++ = 0; *(*movp)++ = D_FILE; *(*movp)++ = rank; *(*movp)++ = king; *(*movp)++ = -1; if (leads_to_check (pos->board, *movp-7, player)) allowed = FALSE; *movp -= 7; *(*movp)++ = E_FILE; *(*movp)++ = rank; *(*movp)++ = 0; *(*movp)++ = C_FILE; *(*movp)++ = rank; *(*movp)++ = king; *(*movp)++ = -1; if (leads_to_check (pos->board, *movp-7, player)) allowed = FALSE; *movp -= 7; if (allowed) { *(*movp)++ = E_FILE; *(*movp)++ = rank; *(*movp)++ = 0; *(*movp)++ = C_FILE; *(*movp)++ = rank; *(*movp)++ = king; *(*movp)++ = A_FILE; *(*movp)++ = rank; *(*movp)++ = 0; *(*movp)++ = D_FILE; *(*movp)++ = rank; *(*movp)++ = rook; *(*movp)++ = -1; } } } byte *chess_movegen (Pos *pos) { byte realbuf[4096]; byte *realp = realbuf; byte movbuf[4096], *movp = movbuf; byte *movlist; int i, j, k, x, y; int incxr[] = {0, 0, 1, -1}; int incyr[] = {1, -1, 0, 0}; int incxb[] = {1, 1, -1, -1}; int incyb[] = {1, -1, 1, -1}; int incxn[] = {2, 2, -2, -2, 1, 1, -1, -1}; int incyn[] = {1, -1, 1, -1, 2, -2, 2, -2}; byte *board = pos->board; Player player = pos->player; for (i=0; iboard [i]); *eval = sum; return RESULT_NOTYET; } gtkboard/src/cpento.c000066400000000000000000000357231153150217100151040ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arthur J. O'Dwyer 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 USA */ #include #include #include "game.h" #include "../pixmaps/alpha.xpm" #include "../pixmaps/cpento.xpm" #define CPENTO_CELL_SIZE 36 #define CPENTO_BOARD_WID 15 #define CPENTO_BOARD_HEIT 9 #define CPENTO_NUM_PIECES 32 #define CPENTO_EMPTY 0 #define CPENTO_TILE_F 1 #define CPENTO_TILE_I 2 #define CPENTO_TILE_L 3 #define CPENTO_TILE_N 4 #define CPENTO_TILE_P 5 #define CPENTO_TILE_T 6 #define CPENTO_TILE_U 7 #define CPENTO_TILE_V 8 #define CPENTO_TILE_W 9 #define CPENTO_TILE_X 10 #define CPENTO_TILE_Y 11 #define CPENTO_TILE_Z 12 #define CPENTO_TILE_SIMPLE 13 #define CPENTO_TILE_RARROW 14 #define CPENTO_TILE_LARROW 15 #define CPENTO_TILE_FLIPLR 16 #define CPENTO_PIECE_BALL 17 #define CPENTO_PIECE_LEG_UP 18 #define CPENTO_PIECE_LEG_DOWN 19 #define CPENTO_PIECE_PIPE_VERT 20 #define CPENTO_PIECE_LEG_RIGHT 21 #define CPENTO_PIECE_BEND_UR 22 #define CPENTO_PIECE_BEND_DR 23 #define CPENTO_PIECE_T_LEFT 24 #define CPENTO_PIECE_LEG_LEFT 25 #define CPENTO_PIECE_BEND_UL 26 #define CPENTO_PIECE_BEND_DL 27 #define CPENTO_PIECE_T_RIGHT 28 #define CPENTO_PIECE_PIPE_HORIZ 29 #define CPENTO_PIECE_T_DOWN 30 #define CPENTO_PIECE_T_UP 31 #define CPENTO_PIECE_FOURWAY 32 static char cpento_colors[6]; static int cpento_initpos[CPENTO_BOARD_WID*CPENTO_BOARD_HEIT]; static char **cpento_pixmaps[CPENTO_NUM_PIECES]; static void cpento_init(); static int cpento_getmove(Pos *, int, int, GtkboardEventType, Player, byte **, int **); Game CapturePento = { CPENTO_CELL_SIZE, CPENTO_BOARD_WID, CPENTO_BOARD_HEIT, CPENTO_NUM_PIECES, cpento_colors, cpento_initpos, cpento_pixmaps, "Capture Pentominoes", "Nimlike games", cpento_init }; static char cpento_colors[6] = { 0,120,0, 10,130,10 }; static int cpento_initpos[CPENTO_BOARD_WID*CPENTO_BOARD_HEIT] = { 1, 2, 3, 4, 5, 6,13,13,13,13,13,13,13,13,13, 7, 8, 9,10,11,12,13, 0, 0, 0, 0, 0, 0, 0,13, 13,13,13,13,13,13,13, 0, 0, 0, 0, 0, 0, 0,13, 13, 0, 0, 0, 0, 0,13, 0, 0, 0, 0, 0, 0, 0,13, 13, 0, 0, 0, 0, 0,13, 0, 0, 0, 0, 0, 0, 0,13, 15, 0, 0, 0, 0, 0,14, 0, 0, 0, 0, 0, 0, 0,13, 13, 0, 0, 0, 0, 0,13, 0, 0, 0, 0, 0, 0, 0,13, 13, 0, 0, 0, 0, 0,13, 0, 0, 0, 0, 0, 0, 0,13, 13,13,13,16,13,13,13,13,13,13,13,13,13,13,13, }; static char *ball_grey_36_36_xpm[] = { "36 36 2 1", " c #000000", "X c #FF00FF", "....................................", "....................................", ".................X..................", "............XXXXXXXXXXX.............", "..........XXXXXXXXXXXXXXX...........", "........XXXXXXXXXXXXXXXXXXX.........", ".......XXXXXXXXXXXXXXXXXXXXX........", "......XXXXXXXXXXXXXXXXXXXXXXX.......", ".....XXXXXXXXXXXXXXXXXXXXXXXXX......", ".....XXXXXXXXXXXXXXXXXXXXXXXXX......", "....XXXXXXXXXXXXXXXXXXXXXXXXXXX.....", "....XXXXXXXXXXXXXXXXXXXXXXXXXXX.....", "...XXXXXXXXXXXXXXXXXXXXXXXXXXXXX....", "...XXXXXXXXXXXXXXXXXXXXXXXXXXXXX....", "...XXXXXXXXXXXXXXXXXXXXXXXXXXXXX....", "...XXXXXXXXXXXXXXXXXXXXXXXXXXXXX....", "...XXXXXXXXXXXXXXXXXXXXXXXXXXXXX....", "..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...", "...XXXXXXXXXXXXXXXXXXXXXXXXXXXXX....", "...XXXXXXXXXXXXXXXXXXXXXXXXXXXXX....", "...XXXXXXXXXXXXXXXXXXXXXXXXXXXXX....", "...XXXXXXXXXXXXXXXXXXXXXXXXXXXXX....", "...XXXXXXXXXXXXXXXXXXXXXXXXXXXXX....", "....XXXXXXXXXXXXXXXXXXXXXXXXXXX.....", "....XXXXXXXXXXXXXXXXXXXXXXXXXXX.....", ".....XXXXXXXXXXXXXXXXXXXXXXXXX......", ".....XXXXXXXXXXXXXXXXXXXXXXXXX......", "......XXXXXXXXXXXXXXXXXXXXXXX.......", ".......XXXXXXXXXXXXXXXXXXXXX........", "........XXXXXXXXXXXXXXXXXXX.........", "..........XXXXXXXXXXXXXXX...........", "............XXXXXXXXXXX.............", ".................X..................", "....................................", "....................................", "....................................", }; static char **cpento_pixmaps[CPENTO_NUM_PIECES] = { char_F_grey_36_36_xpm, char_I_grey_36_36_xpm, char_L_grey_36_36_xpm, char_N_grey_36_36_xpm, char_P_grey_36_36_xpm, char_T_grey_36_36_xpm, char_U_grey_36_36_xpm, char_V_grey_36_36_xpm, char_W_grey_36_36_xpm, char_X_grey_36_36_xpm, char_Y_grey_36_36_xpm, char_Z_grey_36_36_xpm, cpento_fourway_36_36_xpm, char_R_grey_36_36_xpm, char_L_grey_36_36_xpm, char_F_grey_36_36_xpm, ball_grey_36_36_xpm, cpento_leg_u_36_36_xpm, cpento_leg_d_36_36_xpm, cpento_pipe_ud_36_36_xpm, cpento_leg_r_36_36_xpm, cpento_bend_ur_36_36_xpm, cpento_bend_dr_36_36_xpm, cpento_t_closed_l_36_36_xpm, cpento_leg_l_36_36_xpm, cpento_bend_ul_36_36_xpm, cpento_bend_dl_36_36_xpm, cpento_t_closed_r_36_36_xpm, cpento_pipe_lr_36_36_xpm, cpento_t_closed_d_36_36_xpm, cpento_t_closed_u_36_36_xpm, cpento_fourway_36_36_xpm, }; static void cpento_init() { game_single_player = 1; game_getmove = cpento_getmove; game_who_won = NULL; game_get_pixmap = NULL; game_scorecmp = game_scorecmp_def_iscore; game_doc_about_status = STATUS_UNPLAYABLE; game_doc_about = "Capture Pentominoes\n" "Two player game\n" "Status: Not implemented\n" "URL: " GAME_DEFAULT_URL("cpento") ; game_doc_rules = "The objective is to be the last player able to move.\n" "\n" "Each move consists of selecting a piece from the pool" " and placing it on some empty region of the board." " If the newly placed piece touches a second piece on" " three or more sides, that second piece is captured." " A captured piece may be removed from the board by" " its captor at any time.\n" "\n" "At the moment, this is just an interface demo. There's" " no actual game implemented.\n" ; game_doc_strategy = "No strategy yet." ; } static char *cpento_piece_list[][5] = { { ".....", "..XX.", ".XX..", "..X..", ".....", }, { "..X..", "..X..", "..X..", "..X..", "..X..", }, { "..X..", "..X..", "..X..", "..XX.", ".....", }, { ".....", ".X...", ".XX..", "..X..", "..X..", }, { ".....", "..XX.", "..XX.", "..X..", ".....", }, { ".....", ".XXX.", "..X..", "..X..", ".....", }, { ".....", ".X.X.", ".XXX.", ".....", ".....", }, { ".....", ".X...", ".X...", ".XXX.", ".....", }, { ".....", ".X...", ".XX..", "..XX.", ".....", }, { ".....", "..X..", ".XXX.", "..X..", ".....", }, { ".....", "..X..", ".XX..", "..X..", "..X..", }, { ".....", ".XX..", "..X..", "..XX.", ".....", }, }; static void cpento_add_move(byte *move, int x, int y, int m) { int i; for (i=0; move[i] != -1; i += 3) { if (move[i] == x && move[i+1] == y) { move[i+2] = m; return; } } move[i] = x; move[i+1] = y; move[i+2] = m; move[i+3] = -1; return; } static void cpento_clear_left(byte *move) { int i, j, m; /* Clear the left side of the board */ for (i=1; i < 6; ++i) for (j=1; j < 6; ++j) { cpento_add_move(move, i, j, 0); } } /* From picture coords to display coords */ static void cpento_orient(int x, int y, int *nx, int *ny, int orient) { switch (orient) { case 0: *nx = x; *ny = y; return; case 1: *nx = 4-y; *ny = x; return; case 2: *nx = 4-x; *ny = 4-y; return; case 3: *nx = y; *ny = 4-x; return; case 4: *nx = 4-x; *ny = y; return; case 5: *nx = y; *ny = x; return; case 6: *nx = x; *ny = 4-y; return; case 7: *nx = 4-y; *ny = 4-x; return; } } /* From display coords to picture coords */ static void cpento_rev_orient(int x, int y, int *nx, int *ny, int orient) { switch (orient) { case 0: *nx = x; *ny = y; return; case 1: *nx = y; *ny = 4-x; return; case 2: *nx = 4-x; *ny = 4-y; return; case 3: *nx = 4-y; *ny = x; return; case 4: *nx = 4-x; *ny = y; return; case 5: *nx = y; *ny = x; return; case 6: *nx = x; *ny = 4-y; return; case 7: *nx = 4-y; *ny = 4-x; return; } } static int cpento_tile_orient(int x, int y, int orient, char **pento) { int tx, ty; int top=0, left=0, right=0, bottom=0; int results[16] = { 0, CPENTO_PIECE_LEG_UP, CPENTO_PIECE_LEG_DOWN, CPENTO_PIECE_PIPE_VERT, CPENTO_PIECE_LEG_RIGHT, CPENTO_PIECE_BEND_UR, CPENTO_PIECE_BEND_DR, CPENTO_PIECE_T_LEFT, CPENTO_PIECE_LEG_LEFT, CPENTO_PIECE_BEND_UL, CPENTO_PIECE_BEND_DL, CPENTO_PIECE_T_RIGHT, CPENTO_PIECE_PIPE_HORIZ, CPENTO_PIECE_T_DOWN, CPENTO_PIECE_T_UP, CPENTO_PIECE_FOURWAY }; cpento_rev_orient(x, y, &tx, &ty, orient); if (pento[tx][ty] != 'X') return 0; cpento_rev_orient(x, y+1, &tx, &ty, orient); top = (y < 4 && pento[tx][ty] == 'X'); cpento_rev_orient(x, y-1, &tx, &ty, orient); bottom = (y > 0 && pento[tx][ty] == 'X'); cpento_rev_orient(x+1, y, &tx, &ty, orient); right = (x < 4 && pento[tx][ty] == 'X'); cpento_rev_orient(x-1, y, &tx, &ty, orient); left = (x > 0 && pento[tx][ty] == 'X'); return results[top | bottom<<1 | right<<2 | left<<3]; } static void cpento_place_left(byte *move, char *pento[5], int piece_letter, int orient) { int i, j; cpento_clear_left(move); for (i=0; i < 5; ++i) { for (j=0; j < 5; ++j) { int X, Y; cpento_orient(i, j, &X, &Y, orient); if (pento[i][j] == 'X') cpento_add_move(move, X+1, Y+1, cpento_tile_orient(X, Y, orient, pento)); } } } static void cpento_place_right(byte *move, char *pento[5], int piece_letter, int orient, int x, int y) { int i, j; for (i=0; i < 5; ++i) { for (j=0; j < 5; ++j) { int X, Y; cpento_orient(i, j, &X, &Y, orient); if (pento[i][j] == 'X') cpento_add_move(move, X+x-2, Y+y-2, cpento_tile_orient(X, Y, orient, pento)); } } } static int cpento_fits_right(byte *move, char *pento[5], int orient, int x, int y, Pos *pos) { int i, j; for (i=0; i < 5; ++i) { for (j=0; j < 5; ++j) { int X, Y; cpento_orient(i, j, &X, &Y, orient); if (pento[i][j] == 'X') { if (X+x-2 < 1 || X+x-2 > CPENTO_BOARD_WID-2) return 0; if (Y+y-2 < 1 || Y+y-2 > CPENTO_BOARD_HEIT-2) return 0; if (pos->board[(Y+y-2)*board_wid + (X+x-2)] != CPENTO_EMPTY) return 0; } } } return 1; } static int cpento_getmove(Pos *pos, int x, int y, GtkboardEventType type, Player to_play, byte **movp, int **renderp) { static byte move[2000]; /* theoretical max length: 151 */ static int state = 0; static int orient = 0; static int pento = 0; int tile; /* States */ /* 0 = no pentomino selected */ /* 1 = pentomino selected */ /* Orientations */ /* 0 = neutral */ /* 1 = rot 90 right */ /* 2 = rot 180 right */ /* 5 = flipped, then rot 90 */ /* 7 = flipped, then rot 270 */ /* Pentos run 0..11 */ static const int larrow_effects[] = { 1, 2, 3, 0, 7, 4, 5, 6 }; static const int rarrow_effects[] = { 3, 0, 1, 2, 5, 6, 7, 4 }; static const int fliplr_effects[] = { 4, 5, 6, 7, 0, 1, 2, 3 }; if (type != GTKBOARD_BUTTON_RELEASE) return 0; move[0] = -1; tile = pos->board[y * board_wid + x]; if (tile >= CPENTO_TILE_F && tile <= CPENTO_TILE_Z) { /* Select a new pentomino; get rid of the old one */ pento = (tile - CPENTO_TILE_F); orient = 0; cpento_place_left(move, cpento_piece_list[pento], tile, orient); state = 1; if (movp) *movp = move; return 1; } else if ((tile == CPENTO_TILE_LARROW) && (state == 1)) { orient = larrow_effects[orient]; cpento_place_left(move, cpento_piece_list[pento], pento, orient); if (movp) *movp = move; return 1; } else if ((tile == CPENTO_TILE_RARROW) && (state == 1)) { orient = rarrow_effects[orient]; cpento_place_left(move, cpento_piece_list[pento], pento, orient); if (movp) *movp = move; return 1; } else if ((tile == CPENTO_TILE_FLIPLR) && (state == 1)) { orient = fliplr_effects[orient]; cpento_place_left(move, cpento_piece_list[pento], pento, orient); if (movp) *movp = move; return 1; } else if (tile != CPENTO_EMPTY) { return -1; } else if ((x > 6) && (state == 1)) { cpento_clear_left(move); if (cpento_fits_right(move, cpento_piece_list[pento], orient, x, y, pos)) { cpento_place_right(move, cpento_piece_list[pento], pento, orient, x, y); state = 0; if (movp) *movp = move; return 1; } else { int possibles = 0; int fit = 0; if (cpento_fits_right(move, cpento_piece_list[pento], orient, x-1, y, pos)) ++possibles, fit = 0 * 3 + 1; if (cpento_fits_right(move, cpento_piece_list[pento], orient, x+1, y, pos)) ++possibles, fit = 2 * 3 + 1; if (cpento_fits_right(move, cpento_piece_list[pento], orient, x, y-1, pos)) ++possibles, fit = 1 * 3 + 0; if (cpento_fits_right(move, cpento_piece_list[pento], orient, x, y+1, pos)) ++possibles, fit = 1 * 3 + 2; if (possibles != 1) return -1; cpento_place_right(move, cpento_piece_list[pento], pento, orient, x+(fit/3)-1, y+(fit%3)-1); state = 0; if (movp) *movp = move; return 1; } } else { return -1; } } gtkboard/src/dirmaze.c000066400000000000000000000216121153150217100152370ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ #include #include #include #include #include #include #include "game.h" #include "../pixmaps/arrows.xpm" #include "aaball.h" #define HYPERMAZE_CELL_SIZE 20 #define HYPERMAZE_NUM_PIECES 10 #define HYPERMAZE_BOARD_WID 25 #define HYPERMAZE_BOARD_HEIT 25 char hypermaze_colors[6] = {100, 150, 200, 100, 150, 200}; int * hypermaze_init_pos = NULL; int hypermaze_hypermaze[HYPERMAZE_BOARD_WID][HYPERMAZE_BOARD_HEIT] = {{0}}; #define HYPERMAZE_CUR 1 #define HYPERMAZE_N 2 #define HYPERMAZE_E 3 #define HYPERMAZE_S 4 #define HYPERMAZE_W 5 #define HYPERMAZE_NE 6 #define HYPERMAZE_SE 7 #define HYPERMAZE_SW 8 #define HYPERMAZE_NW 9 #define HYPERMAZE_WALL 10 void hypermaze_init (); SCORE_FIELD hypermaze_score_fields[] = {SCORE_FIELD_USER, SCORE_FIELD_TIME, SCORE_FIELD_DATE, SCORE_FIELD_NONE}; char *hypermaze_score_field_names[] = {"User", "Time", "Date", NULL}; Game Hypermaze = { HYPERMAZE_CELL_SIZE, HYPERMAZE_BOARD_WID, HYPERMAZE_BOARD_HEIT, HYPERMAZE_NUM_PIECES, hypermaze_colors, NULL, NULL, "Hypermaze", "Maze", hypermaze_init}; static void hypermaze_set_init_pos (Pos *pos); static char ** hypermaze_get_pixmap (int idx, int color); static int hypermaze_getmove_kb (Pos *, int, byte **, int **); int hypermaze_getmove (Pos *pos, int, int, GtkboardEventType, Player, byte **, int **); ResultType hypermaze_who_won (Pos *, Player, char **); void hypermaze_init () { game_single_player = TRUE; game_set_init_pos = hypermaze_set_init_pos; game_get_pixmap = hypermaze_get_pixmap; game_getmove_kb = hypermaze_getmove_kb; game_getmove = hypermaze_getmove; game_who_won = hypermaze_who_won; game_start_immediately = TRUE; game_scorecmp = game_scorecmp_def_time; game_score_fields = hypermaze_score_fields; game_score_field_names = hypermaze_score_field_names; game_doc_about_status = STATUS_COMPLETE; game_doc_about = "HyperMaze\n" "Single player game\n" "Status: Partially implemented (playable)\n" "URL: "GAME_DEFAULT_URL ("hypermaze"); game_doc_rules = "Your goal is to get from the lower left corner to the upper right. But you can travel only along the arrows. Beware - the arrows are one-way! You can easily get trapped in a blind end from which there is no escape." "\n" "To move with the mouse, click on the square to which you want to move. To move with the keyboard, use the NumPad keys.\n"; } void hypermaze_get_cur_pos (byte *pos, int *x, int *y) { int i, j; for (i=0; iboard [board_wid * board_heit - 1] == HYPERMAZE_CUR); snprintf (comment, 32, "%sMoves: %d", over ? "You won. " : "", pos->num_moves); *commp = comment; return over ? RESULT_WON : RESULT_NOTYET; } int hypermaze_canmove (byte *board, int curx, int cury, int incx, int incy) { switch (board [(cury + incy/2) * board_wid + curx + incx/2]) { case HYPERMAZE_N: if (incx != 0 || incy != 2) return 0; break; case HYPERMAZE_S: if (incx != 0 || incy != -2) return 0; break; case HYPERMAZE_E: if (incx != 2 || incy != 0) return 0; break; case HYPERMAZE_W: if (incx != -2 || incy != 0) return 0; break; case HYPERMAZE_NE: if (incx != 2 || incy != 2) return 0; break; case HYPERMAZE_NW: if (incx != -2 || incy != 2) return 0; break; case HYPERMAZE_SE: if (incx != 2 || incy != -2) return 0; break; case HYPERMAZE_SW: if (incx != -2 || incy != -2) return 0; break; case HYPERMAZE_WALL: return 0; } return 1; } int hypermaze_getmove_common (Pos *pos, byte **movp, int x, int y, int curx, int cury, int incx, int incy) { static byte move[10]; if (x < 0 || y < 0 || x >= board_wid || y >= board_heit) return -1; if (pos->board[y * board_wid + x] == HYPERMAZE_WALL) return -1; if (!hypermaze_canmove (pos->board, curx, cury, incx, incy)) return -1; move[0] = curx; move[1] = cury; move[2] = 0; move[3] = x; move[4] = y; move[5] = HYPERMAZE_CUR; move[6] = -1; *movp = move; return 1; } int hypermaze_getmove (Pos *pos, int x, int y, GtkboardEventType type, Player to_play, byte **movp, int ** rmovep) { int curx = -1, cury = -1; int incx = -1, incy = -1; if (type != GTKBOARD_BUTTON_RELEASE) return 0; hypermaze_get_cur_pos (pos->board, &curx, &cury); g_assert (curx >= 0 && cury >= 0); if (abs (x - curx) != 2 && abs (x - curx) != 0) return -1; if (abs (y - cury) != 2 && abs (y - cury) != 0) return -1; if (abs (x - curx) == 0 && abs (y - cury) == 0) return -1; return hypermaze_getmove_common (pos, movp, x, y, curx, cury, x - curx, y - cury); } int hypermaze_getmove_kb (Pos *pos, int key, byte **movp, int **rmovp) { //static byte move[10]; int curx = -1, cury = -1; int incx = -1, incy = -1; int x, y; hypermaze_get_cur_pos (pos->board, &curx, &cury); g_assert (curx >= 0 && cury >= 0); switch (key) { case GDK_KP_Home: incx = -2; incy = 2; break; case GDK_KP_Page_Up: incx = 2; incy = 2; break; case GDK_KP_End: incx = -2; incy = -2; break; case GDK_KP_Page_Down: incx = 2; incy = -2; break; case GDK_Up: case GDK_KP_Up: incx = 0; incy = 2; break; case GDK_Down: case GDK_KP_Down: incx = 0; incy = -2; break; case GDK_Right: case GDK_KP_Right: incx = 2; incy = 0; break; case GDK_Left: case GDK_KP_Left: incx = -2; incy = 0; break; default: return -1; } x = curx + incx; y = cury + incy; return hypermaze_getmove_common (pos, movp, x, y, curx, cury, incx, incy); } static void recursive_pathgen (byte *board, int x, int y, int val) { static int incx[8] = {-2, 0, 0, 2, -2, -2, 2, 2}; static int incy[8] = {0, -2, 2, 0, -2, 2, -2, 2}; int i; if (!ISINBOARD(x, y)) return; if (board[y * board_wid + x] == val) return; board [y * board_wid + x] = val; for (i=0; i<8; i++) if (hypermaze_canmove (board, x, y, incx[i], incy[i])) recursive_pathgen (board, x+incx[i], y+incy [i], val); } void hypermaze_set_init_pos (Pos *pos) { int i, j; int x, y; do { for (i=0; iboard [j * board_wid + i] = 6 + random() % 4; else pos->board [j * board_wid + i] = 2 + random() % 4; } else pos->board [j * board_wid + i] = 0; // edges can't have arbitrary arrows for (i=0; iboard [j * board_wid + i] = (random() % 2 ? HYPERMAZE_N : HYPERMAZE_S); for (i=1; iboard [j * board_wid + i] = (random() % 2 ? HYPERMAZE_E : HYPERMAZE_W); recursive_pathgen (pos->board, 0, 0, -1); } while (pos->board [(board_heit - 1) * board_wid + (board_wid - 1)] != -1); for (i=0; iboard [j * board_wid + i] = 0; pos->board [0] = HYPERMAZE_CUR; } char ** hypermaze_pixmap_square_gen (int idx, char *col) { int i, j; char **pixmap; char *line = " "; pixmap = g_new(char *, HYPERMAZE_CELL_SIZE + 2); pixmap[0] = "20 20 1 1"; pixmap[1] = g_strdup_printf (" c %s", col); for (i=0; i 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 USA */ #include #include #include #include #include "game.h" #include "aaball.h" #define DNB_CELL_SIZE 24 #define DNB_NUM_PIECES 5 #define DNB_BOARD_SIZE 10 #define DNB_BOARD_WID (2*DNB_BOARD_SIZE+1) #define DNB_BOARD_HEIT (2*DNB_BOARD_SIZE+1) char dnb_colors[6] = {220, 220, 220, 220, 220, 220}; static char * dnb_red_24_xpm [] = { "24 24 1 1", " c #ee0000", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", }; static char * dnb_blue_24_xpm [] = { "24 24 1 1", " c #0000ee", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", }; static char * dnb_vertical_24_xpm [] = { "24 24 2 1", " c none", ". c #101010", " ...... ", " ...... ", " ...... ", " ...... ", " ...... ", " ...... ", " ...... ", " ...... ", " ...... ", " ...... ", " ...... ", " ...... ", " ...... ", " ...... ", " ...... ", " ...... ", " ...... ", " ...... ", " ...... ", " ...... ", " ...... ", " ...... ", " ...... ", " ...... ", }; static char * dnb_horizontal_24_xpm [] = { "24 24 2 1", " c none", ". c #101010", " ", " ", " ", " ", " ", " ", " ", " ", " ", "........................", "........................", "........................", "........................", "........................", "........................", " ", " ", " ", " ", " ", " ", " ", " ", " ", }; /*char ** dnb_pixmaps [] = { blue_gate_horiz_40_xpm, blue_gate_south_40_xpm, blue_gate_east_40_xpm, blue_gate_west_40_xpm, };*/ #define DNB_EMPTY 0 #define DNB_DOT 1 #define DNB_HOR 2 #define DNB_VERT 3 #define DNB_RED 4 #define DNB_BLUE 5 #define abs(x) ((x) < 0 ? -(x) : (x)) int dnb_getmove (Pos *, int, int, GtkboardEventType, Player, byte **, int **); void dnb_search (Pos *pos, byte **movp); void dnb_init (); ResultType dnb_who_won (Pos *, Player, char **); void dnb_set_init_pos (Pos *pos); char ** dnb_get_pixmap (int idx, int color); int dnb_getmove (Pos *pos, int x, int y, GtkboardEventType type, Player to_play, byte **movp, int **rmovp); static void dnb_get_render (Pos *pos, byte *move, int **rmovp); Game Dnb = { DNB_CELL_SIZE, DNB_BOARD_WID, DNB_BOARD_HEIT, DNB_NUM_PIECES, dnb_colors, NULL, NULL, "Dots and Boxes", "Nimlike games", dnb_init}; static int dnb_curx = - 1, dnb_cury = -1; void dnb_init () { // game_getmove = dnb_getmove; /* game_who_won = dnb_who_won; game_eval = dnb_eval; game_movegen = dnb_movegen; */ game_set_init_pos = dnb_set_init_pos; game_get_pixmap = dnb_get_pixmap; game_get_render = dnb_get_render; game_white_string = "Red"; game_black_string = "Blue"; game_getmove = dnb_getmove; game_search = dnb_search; game_allow_flip = TRUE; game_doc_about_status = STATUS_UNPLAYABLE; game_doc_about = "Dots and boxes\n" "Two player game\n" "Status: partially implemented (the AI is totally dumb)\n" "URL: "GAME_DEFAULT_URL ("dnb"); } char ** dnb_get_pixmap (int idx, int color) { int bg, i; char *colors = dnb_colors; static char pixbuf[DNB_CELL_SIZE * (DNB_CELL_SIZE+1)]; if (color == BLACK) colors += 3; for(i=0, bg=0;i<3;i++) { int col = colors[i]; if (col<0) col += 256; bg += col * (1 << (16-8*i));} if (idx == DNB_DOT) return pixmap_ball_gen (DNB_CELL_SIZE, pixbuf, 0x101010, bg, 8, 30); if (idx == DNB_VERT) return dnb_vertical_24_xpm; if (idx == DNB_HOR) return dnb_horizontal_24_xpm; if (idx == DNB_RED) return dnb_red_24_xpm; if (idx == DNB_BLUE) return dnb_blue_24_xpm; return NULL; } void dnb_set_init_pos (Pos *pos) { int i, j; for (i=0; iboard[j * board_wid + i] = DNB_DOT; else pos->board[j * board_wid + i] = DNB_EMPTY; } /* ResultType dnb_who_won (Pos *pos, Player player, char ** commp) { char *who_str[2] = {"Vertical won", "Horizontal won"}; int wscore, bscore, i, j; float eval; ResultType result; result = dnb_eval (pos, player, &eval); if (result == RESULT_WHITE) *commp = who_str[0]; if (result == RESULT_BLACK) *commp = who_str[1]; printf ("%f\n", eval); return result; } */ static int dnb_incx[] = {-1, 0, 0, 1}; static int dnb_incy[] = {0, -1, 1, 0}; static int num_nbr_walls (byte *board, int *render, int x, int y) { int k, newx, newy; int count; if (x % 2 == 0 || y % 2 == 0) return -1; for (k=0, count=0; k<4; k++) { newx = x + dnb_incx[k]; newy = y + dnb_incy[k]; if (board [newy * board_wid + newx] != DNB_EMPTY || (render && render[newy * board_wid + newx] != RENDER_NONE)) count++; } return count; } int dnb_getmove (Pos *pos, int x, int y, GtkboardEventType type, Player player, byte **movp, int **rmovp) { int incx, incy; int newx, newy; static byte move[2048]; static int rmove[16]; byte *mp = move; int *rp = rmove; int i, j, k; gboolean found; if (type == GTKBOARD_BUTTON_PRESS) { if (pos->board [y * board_wid + x] != DNB_DOT) return -1; dnb_curx = x; dnb_cury = y; return 0; } if (type != GTKBOARD_BUTTON_RELEASE) return 0; if (dnb_curx < 0) return -1; if ((x != dnb_curx && y != dnb_cury) || (x == dnb_curx && y == dnb_cury)) { dnb_curx = dnb_cury = -1; return -1; } if (x == dnb_curx) { incx = 0; incy = y > dnb_cury ? 1 : -1; } else { incy = 0; incx = x > dnb_curx ? 1 : -1; } newx = dnb_curx + incx; newy = dnb_cury + incy; if (pos->board [newy * board_wid + newx] != DNB_EMPTY || pos->render [newy * board_wid + newx] != RENDER_NONE) { dnb_curx = dnb_cury = -1; return -1; } *rp++ = newx; *rp++ = newy; *rp++ = RENDER_REPLACE | ((dnb_curx == x ? DNB_VERT : DNB_HOR) << 8); dnb_curx = dnb_cury = -1; // do we complete a square found = FALSE; for (k=0; k<4; k++) { x = newx + dnb_incx[k]; y = newy + dnb_incy[k]; if (pos->board [y * board_wid + x] == DNB_EMPTY) if (num_nbr_walls (pos->board, pos->render, x, y) == 3) { *rp++ = x; *rp++ = y; *rp++ = RENDER_REPLACE | ((player == WHITE ? DNB_RED : DNB_BLUE) << 8); found = TRUE; } } *rp++ = -1; if (found) { *rmovp = rmove; return 0; } else { for (i=0; rmove[3*i] >= 0; i++) if ((rmove [3*i+2] & 0xff) == RENDER_REPLACE) { *mp++ = rmove [3*i]; *mp++ = rmove [3*i+1]; *mp++ = rmove [3*i+2] >> 8; } for (i=0; irender [j * board_wid + i] & 0xff) == RENDER_REPLACE) { *mp++ = i; *mp++ = j; *mp++ = pos->render [j * board_wid + i] >> 8; } *mp++ = -1; *movp = move; return 1; } } static void dnb_get_render (Pos *pos, byte *move, int **rmovp) { static int rmove[2048]; int *rp = rmove; int i, j; for (i=0; irender [j * board_wid + i] != RENDER_NONE) { *rp++ = i; *rp++ = j; *rp++ = RENDER_NONE; } *rp++ = -1; *rmovp = rmove; } void dnb_search (Pos *pos, byte **movp) { /* first greedily close all possible squares, then choose some edge arbitrarily */ // TODO: this AI needs MAJOR improvement static byte move[2048]; byte *mp = move; int i, j; gboolean found; static byte newboard[DNB_BOARD_WID * DNB_BOARD_HEIT]; Player player = pos->player; memcpy (newboard, pos->board, board_wid * board_heit); do // very slow, but speed probably doesn't matter here { found = FALSE; for (i=1; i 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 USA */ #include #include #include #include #include #include "game.h" #include "../pixmaps/chess.xpm" #include "../pixmaps/misc.xpm" #define EIGHTQUEENS_CELL_SIZE 54 #define EIGHTQUEENS_NUM_PIECES 2 #define EIGHTQUEENS_BOARD_WID 8 #define EIGHTQUEENS_BOARD_HEIT 8 #define EIGHTQUEENS_EMPTY 0 #define EIGHTQUEENS_QUEEN 1 #define EIGHTQUEENS_CONTROLLED 2 #define abs(x) ((x) < 0 ? -(x) : (x)) #define ATTACKS(i, j, x, y) ((i)==(x) || (j)==(y) || abs((i)-(x)) == abs((j)-(y))) char eightqueens_colors[6] = {200, 200, 160, 200, 200, 160}; void eightqueens_init (); char ** eightqueens_pixmaps [] = { chess_wq_54_xpm, grey_square_54_xpm, }; Game Eightqueens = { EIGHTQUEENS_CELL_SIZE, EIGHTQUEENS_BOARD_WID, EIGHTQUEENS_BOARD_HEIT, EIGHTQUEENS_NUM_PIECES, eightqueens_colors, NULL, eightqueens_pixmaps, "Eight Queens Puzzle", "Logic puzzles", eightqueens_init}; SCORE_FIELD eightqueens_score_fields[] = {SCORE_FIELD_RANK, SCORE_FIELD_USER, SCORE_FIELD_TIME, SCORE_FIELD_DATE, SCORE_FIELD_NONE}; char *eightqueens_score_field_names[] = {"Rank", "User", "Time", "Date", NULL}; static int eightqueens_getmove (Pos *, int, int, GtkboardEventType, Player, byte **, int **); static ResultType eightqueens_who_won (Pos *, Player, char **); void eightqueens_init () { game_single_player = 1; game_getmove = eightqueens_getmove; game_who_won = eightqueens_who_won; game_scorecmp = game_scorecmp_def_time; game_score_fields = eightqueens_score_fields; game_score_field_names = eightqueens_score_field_names; game_draw_cell_boundaries = TRUE; game_doc_about_status = STATUS_COMPLETE; game_doc_about = "Eightqueens\n" "Single player game\n" "Status: Fully implemented\n" "URL: "GAME_DEFAULT_URL("eightqueens"); game_doc_rules = "Place 8 non-attacking queens on the chessboard"; ; } ResultType eightqueens_who_won (Pos *pos, Player to_play, char **commp) { static char comment[32]; int i, qcount; for (i=0, qcount = 0; iboard [i] == EIGHTQUEENS_QUEEN ? 1 : 0); snprintf (*commp = comment, 32, "Queens: %d", qcount); return qcount == 8 ? RESULT_WON : RESULT_NOTYET; } static int num_attacks (byte *board, int x, int y) { int i, j, count = 0; for (i=0; iboard[y * board_wid + x] == EIGHTQUEENS_CONTROLLED) return -1; if (pos->board[y * board_wid + x] == EIGHTQUEENS_QUEEN) { *mp++ = x, *mp++ = y, *mp++ = EIGHTQUEENS_EMPTY; for (i=0; iboard[j * board_wid + i] == EIGHTQUEENS_CONTROLLED && ATTACKS(i, j, x, y) && num_attacks (pos->board, i, j) == 1) *mp++ = i, *mp++ = j, *mp++ = EIGHTQUEENS_EMPTY; *mp++ = -1; return 1; } *mp++ = x, *mp++ = y, *mp++ = EIGHTQUEENS_QUEEN; for (i=0; iboard[j * board_wid + i] == EIGHTQUEENS_EMPTY && ATTACKS (i, j, x, y)) *mp++ = i, *mp++ = j, *mp++ = EIGHTQUEENS_CONTROLLED; *mp++ = -1; return 1; } gtkboard/src/engine.c000066400000000000000000000253421153150217100150550ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ /** \file engine.c \brief The engine forms the backend that does the number crunching */ #include "config.h" #include "game.h" #include "move.h" #include "stack.h" #include "engine.h" #include #include #include #include #include extern int board_wid, board_heit; extern int opt_verbose; //extern int state_player; // FIXME: this is ugly. Code should be refactored. extern gboolean engine_flag; extern Pos cur_pos; extern Game *opt_game, *games[]; extern int num_games; byte * engine_search (Pos *); static FILE *engine_fin, *engine_fout; //! Eval fn for white (can be NULL, in which case game_eval will be used for both) ResultType (*game_eval_white) (Pos *, Player, float *); //! Eval fn for black (can be NULL, in which case game_eval will be used for both) ResultType (*game_eval_black) (Pos *, Player, float *); // FIXME: following 3 extern decls must be removed by refactoring (i.e, move all fns common to client and server to a new file) extern void reset_game_params (); extern void set_game_params (); extern void game_set_init_pos_def (Pos *); //! Alpha-beta search function (using depth first iterative deepening). extern byte *ab_dfid (Pos *, int); //! The input pipe is accessed through a GIOChannel so that we can register a callback for events static GIOChannel *channel_in = NULL; //! If an event occurs when we are thinking this will be set to TRUE so that we will know to stop thinking gboolean engine_stop_search = FALSE; //! Indicates whether we have to stop and return the move or stop and cancel the move static gboolean cancel_move = FALSE; //! Max time per move. alpha-beta will often return earlier than this. int time_per_move = 5000; gboolean engine_hup_cb () { if (opt_verbose) fprintf (stderr, "engine: Connection broken. Exiting.\n"); // FIXME: do we want to free anything here? exit (1); } ResultType engine_eval (Pos *pos, /*Player player,*/ float *eval) { ResultType result; result = pos->player == WHITE ? game_eval_white(pos, pos->player, eval) : game_eval_black (pos, pos->player, eval); return result; } void engine_set_to_play (char *line) { if (!strncasecmp (line, "white", 5)) cur_pos.player = WHITE; else if (!strncasecmp (line, "black", 5)) cur_pos.player = BLACK; } void engine_take_move (char *line) { byte *move = move_read (line); movstack_trunc (); movstack_push (cur_pos.board, move); if (game_stateful) { void *newstate = game_newstate (&cur_pos, move); statestack_push (newstate); cur_pos.state = statestack_peek (); } move_apply (cur_pos.board, move); cur_pos.num_moves++; cur_pos.player = cur_pos.player == WHITE ? BLACK : WHITE; } void engine_make_move () { byte *move; movstack_trunc (); cancel_move = FALSE; move = engine_search (&cur_pos); if (cancel_move) return; if (!move) { move_fwrite_nak ("Nice try", engine_fout); return; } movstack_push (cur_pos.board, move); if (game_stateful) { void *newstate = game_newstate (&cur_pos, move); statestack_push (newstate); cur_pos.state = statestack_peek (); } move_apply (cur_pos.board, move); cur_pos.num_moves++; move_fwrite_ack (move, engine_fout); cur_pos.player = cur_pos.player == WHITE ? BLACK : WHITE; } void engine_new_game (char *gamename) { int i, len; Game *old_game = opt_game; opt_game = NULL; // strip trailing newline if (gamename[len = strlen(gamename) - 1] == '\n') gamename[len] = 0; for (i=0; iname, gamename)) { opt_game = games[i]; break; } if (!opt_game) { // FIXME: isn't there a more elegant way to do this? GameLevel *level = game_levels; assert (level); while (level->name) { if (!strcmp (level->game->name, gamename)) { opt_game = level->game; break; } level++; } } if (!opt_game) { fprintf (stderr, "engine: unknown game: %s\n", gamename); exit(1); } reset_game_params (); if (opt_game->game_init) opt_game->game_init(opt_game); set_game_params (); if (game_set_init_pos != game_set_init_pos_def) { fwrite (cur_pos.board, board_wid * board_heit, 1, engine_fout); fflush (engine_fout); } stack_free (); } void engine_reset_game () { stack_free (); // FIXME : there should be a separate reset_game_params() for engine cur_pos.player = WHITE; cur_pos.state = NULL; cur_pos.num_moves = 0; game_set_init_pos (&cur_pos); } void engine_back_move () { byte *move = movstack_back (); if (game_stateful) cur_pos.state = statestack_back (); if (!move) { move_fwrite_nak (NULL, engine_fout); return; } move_apply (cur_pos.board, move); cur_pos.num_moves--; cur_pos.player = cur_pos.player == WHITE ? BLACK : WHITE; move_fwrite_ack (move, engine_fout); } void engine_forw_move () { byte *move = movstack_forw (); void *state; if (game_stateful && (state = statestack_forw ())) cur_pos.state = state; if (!move) { move_fwrite_nak (NULL, engine_fout); return; } move_apply (cur_pos.board, move); cur_pos.num_moves++; cur_pos.player = cur_pos.player == WHITE ? BLACK : WHITE; move_fwrite_ack (move, engine_fout); } void engine_msec_per_move (char *line) { if (!line) return; time_per_move = atoi (line); if (time_per_move < 0) time_per_move = 3000; } void engine_who_won (char *line) { int who; char *msg = NULL; char *who_str; if (!game_who_won) { move_fwrite_nak (NULL, engine_fout); return; } who = game_who_won (&cur_pos, cur_pos.player, &msg); switch(who) { case RESULT_WHITE: who_str = "WHITE"; break; case RESULT_BLACK: who_str = "BLACK"; break; case RESULT_TIE : who_str = "TIE" ; break; case RESULT_WON : who_str = "WON" ; break; case RESULT_LOST : who_str = "LOST" ; break; case RESULT_MISC : who_str = "MISC" ; break; case RESULT_NOTYET: default: who_str = "NYET"; break; // ;^) } if (msg) fprintf (engine_fout, "ACK %s %s\n", who_str, msg); else fprintf (engine_fout, "ACK %s\n", who_str); fflush (engine_fout); } void engine_move_now (char *line) { engine_stop_search = TRUE; } int engine_timeout_cb () { engine_stop_search = TRUE; return FALSE; } void engine_cancel_move (char *line) { engine_stop_search = TRUE; cancel_move = TRUE; } //! This structure defines the protocol Command commands[] = { { "MSEC_PER_MOVE" , 1 , engine_msec_per_move}, { "SUGGEST_MOVE" , 0 , NULL}, { "TAKE_MOVE" , 1 , engine_take_move}, { "BACK_MOVE" , 1 , engine_back_move}, { "FORW_MOVE" , 1 , engine_forw_move}, { "MAKE_MOVE" , 1 , engine_make_move}, { "MOVE_NOW" , 1 , engine_move_now }, { "CANCEL_MOVE" , 1 , engine_cancel_move }, { "END_GAME" , 0 , NULL}, { "RESET_GAME" , 1 , engine_reset_game}, { "TO_PLAY" , 1 , engine_set_to_play}, { "SET_POSITION" , 0 , NULL}, { "NEW_GAME" , 1 , engine_new_game}, { "GET_EVAL" , 0 , NULL}, { "SET_HEUR" , 0 , NULL}, { "SET_STRATEGY" , 0 , NULL}, { "WHO_WON" , 1 , engine_who_won}, }; #define NUM_COMMANDS (sizeof (commands) / sizeof (commands[0])) //! Parse the command and pass control to the corresponding function pointer static void execute_command (char *line) { char *tail; int i; tail = strpbrk (line, " \t"); if (tail) *tail = 0; for (i=0; i 1 // we need to call this again because we will get new events before returning // from this function // semantics of add_watch silently changing between glib versions!!!! g_io_add_watch (channel_in, G_IO_IN, (GIOFunc) channel_process_input, NULL); #endif g_io_channel_read (channel_in, linebuf, 4096, &bytes_read); linebuf[bytes_read] = '\0'; while (*linep != '\0') { line = linep; while (*linep++ != '\n') g_assert (linep[-1] != '\0'); linep[-1] = '\0'; if (opt_verbose) printf ("engine got command \"%s\"\n", line); command_list = g_slist_append (command_list, g_strdup (line)); } while (process_line ()) ; #if GLIB_MAJOR_VERSION == 1 return TRUE; #else return FALSE; #endif } void engine_poll () { static int poll_count = 0; if (++poll_count == 100) { poll_count = 0; // listen for input in the pipe while (g_main_iteration (FALSE)) ; // execute pending commands // we execute only ONE command so that if there is a CANCEL_MOVE followed by a MAKE_MOVE we won't start on the new move before finishing this one process_line (); } } static void ignore () {} //! This is the main function for the engine void engine_main (int infd, int outfd) { GMainLoop *loop; char *line; engine_flag = TRUE; signal (SIGHUP, ignore); signal (SIGINT, ignore); engine_fin = fdopen (infd, "r"); engine_fout = fdopen (outfd, "w"); assert (engine_fin); assert (engine_fout); channel_in = g_io_channel_unix_new (infd); g_io_add_watch (channel_in, G_IO_IN, (GIOFunc) channel_process_input, NULL); g_io_add_watch (channel_in, G_IO_HUP | G_IO_NVAL, (GIOFunc) engine_hup_cb, NULL); #if GLIB_MAJOR_VERSION > 1 loop = g_main_loop_new (NULL, TRUE); #else loop = g_main_new (TRUE); #endif g_main_run (loop); } byte * engine_search (Pos *pos/*, int player*/) { int tag; byte *move; engine_stop_search = FALSE; if (game_search) game_search (pos, &move); else if (game_single_player) move = NULL; else { tag = g_timeout_add (2 * time_per_move, engine_timeout_cb, NULL); move = ab_dfid (pos, pos->player); g_source_remove (tag); } return move; } gtkboard/src/engine.h000066400000000000000000000025751153150217100150650ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ #ifndef _ENGINE_H_ #define _ENGINE_H_ #include "game.h" //! A struct representing a command that the engine understands. typedef struct { //! The string char * proto_str; //! Has this command been implemented int isimpl; //! Function which will execute this command void (*impl_func) (char *); } Command; extern Command commands[]; ResultType engine_eval (Pos *, /*Player,*/ float *); //! Functions that do the actual thinking must periodically call this function. /** It checks if new commands have arrived. */ void engine_poll (); #endif gtkboard/src/fifteen.c000066400000000000000000000173021153150217100152250ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ #include #include #include #include #include #include #include "game.h" #include "aaball.h" #define FIFTEEN_CELL_SIZE 60 #define FIFTEEN_NUM_PIECES 16 #define FIFTEEN_BOARD_WID 4 #define FIFTEEN_BOARD_HEIT 4 char fifteen_colors[6] = {220, 220, 220, 220, 220, 220}; int * fifteen_init_pos = NULL; void fifteen_init (); Game Fifteen = { FIFTEEN_CELL_SIZE, FIFTEEN_BOARD_WID, FIFTEEN_BOARD_HEIT, FIFTEEN_NUM_PIECES, fifteen_colors, NULL, NULL, "Fifteen Puzzle", "Arcade", fifteen_init}; static void fifteen_set_init_pos (Pos *pos); static char ** fifteen_get_pixmap (int idx, int color); static guchar * fifteen_get_rgbmap (int idx, int color); int fifteen_getmove (Pos *pos, int x, int y, GtkboardEventType type, Player, byte **, int **); static int fifteen_getmove_kb (Pos *cur_pos, int key, byte **move, int **); void fifteen_free (); void fifteen_init (); ResultType fifteen_who_won (Pos *, Player, char **); int fifteen_done (byte *board) { int size = board_wid * board_heit, i; for (i=0; iboard); char *scorestr = over ? "You won. Moves:" : "Moves:"; // last move is a dummy snprintf (comment, 32, "%s %d", scorestr, pos->num_moves - (over ? 1 : 0)); *commp = comment; return over ? RESULT_WON : RESULT_NOTYET; } int fifteen_getmove_kb (Pos *pos, int key, byte **movp, int **rmovp) { static byte move[10]; byte *mp = move; int i, j, incx, incy; switch (key) { case GDK_Up: incx = 0; incy = 1; break; case GDK_Down: incx = 0; incy = -1; break; case GDK_Right: incx = 1; incy = 0; break; case GDK_Left: incx = -1; incy = 0; break; default: return -1; } incx *= -1; incy *= -1; for (i=0; iboard [j * board_wid + i] == 0) { int x = i + incx, y = j + incy; if (x < 0 || y < 0 || x >= board_wid || y >= board_heit) return -1; *mp++ = x; *mp++ = y; *mp++ = 0; *mp++ = i; *mp++ = j; *mp++ = pos->board [y * board_wid + x]; *mp++ = -1; *movp = move; return 1; } } g_assert_not_reached(); return -1; } void fifteen_set_init_pos (Pos *pos) { int i, j; int size = board_wid * board_heit; int swaps = 0; byte *board = pos->board; for (i=0; iboard [y * board_wid + x] == 0 && fifteen_done (pos->board)) { *mp++ = x; *mp++ = y; *mp++ = y * board_wid + x + 1; *mp++ = -1; *movp = move; return 1; } for (k=0; k<4; k++) { int newx = x + incx[k], newy = y + incy[k]; if (newx < 0 || newy < 0 || newx >= board_wid || newy >= board_heit) continue; if (pos->board [newy * board_wid + newx] == 0) { *mp++ = x; *mp++ = y; if (fifteen_nearly_done (pos->board, pos->board[y * board_wid + x])) *mp++ = y * board_wid + x + 1; else *mp++ = 0; *mp++ = newx; *mp++ = newy; *mp++ = pos->board [y * board_wid + x]; *mp++ = -1; *movp = move; return 1; } } return -1; } char ** fifteen_pixmap_square_gen (char *col) { int i, j; char **pixmap; static char line[FIFTEEN_CELL_SIZE]; memset(line, ' ', FIFTEEN_CELL_SIZE); pixmap = g_new(char *, FIFTEEN_CELL_SIZE + 2); pixmap[0] = "60 60 1 1"; // FIXME: dont hard code // FIXME: not freed pixmap[1] = g_strdup_printf (" c %s", col); for (i=0; i 0.9 && d < 0.98)) { float frac = fabs ((d - 0.94) / 0.04); frac = 2 * (frac - 0.5); if (frac < 0) frac = 0; *bp++ = sqrt (1 - frac) * 255; *bp++ = sqrt (frac) * 256 * x; *bp++ = sqrt (frac) * 256 * y; } else if ((d>0.3 && d < 0.36)) { float frac = fabs ((d - 0.33) / 0.03); frac = 2 * (frac - 0.5); if (frac < 0) frac = 0; *bp++ = sqrt (1 - frac) * 255; *bp++ = sqrt (frac) * 256 * x; *bp++ = sqrt (frac) * 256 * y; } else { *bp++ = 0; *bp++ = 256 * x; *bp++ = 256 * y; } } return buf; } gtkboard/src/flw.c000066400000000000000000000211651153150217100143770ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ #include #include #include #include #include #include #include "game.h" #include "../pixmaps/alpha.xpm" #include "flwords.h" #define FLW_CELL_SIZE 36 #define FLW_NUM_PIECES 26 #define FLW_BOARD_WID 4 #define FLW_BOARD_HEIT 6 #define FLW_LEN 4 char flw_colors[9] = {0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0, 0, 0xff}; char flw_highlight_colors[9] = {0xff, 0, 0, 0, 0, 0, 0, 0, 0}; static char **flw_pixmaps [] = { char_A_grey_36_36_xpm, char_B_grey_36_36_xpm, char_C_grey_36_36_xpm, char_D_grey_36_36_xpm, char_E_grey_36_36_xpm, char_F_grey_36_36_xpm, char_G_grey_36_36_xpm, char_H_grey_36_36_xpm, char_I_grey_36_36_xpm, char_J_grey_36_36_xpm, char_K_grey_36_36_xpm, char_L_grey_36_36_xpm, char_M_grey_36_36_xpm, char_N_grey_36_36_xpm, char_O_grey_36_36_xpm, char_P_grey_36_36_xpm, char_Q_grey_36_36_xpm, char_R_grey_36_36_xpm, char_S_grey_36_36_xpm, char_T_grey_36_36_xpm, char_U_grey_36_36_xpm, char_V_grey_36_36_xpm, char_W_grey_36_36_xpm, char_X_grey_36_36_xpm, char_Y_grey_36_36_xpm, char_Z_grey_36_36_xpm, }; SCORE_FIELD flw_score_fields[] = {SCORE_FIELD_USER, SCORE_FIELD_TIME, SCORE_FIELD_DATE, SCORE_FIELD_NONE}; char *flw_score_field_names[] = {"User", "Time", "Date", NULL}; static int flw_wordcmp (const void *p1, const void *p2) { return strcmp ((char *)p1, *(char **)p2); } void flw_find_chain (char chain[FLW_LEN+1][FLW_LEN+1]) { int i, j, idx, found; int done[FLW_LEN]; char word[FLW_LEN+1]; do { strncpy (word, flwords[random() % num_flwords], FLW_LEN+1); sprintf (chain[0], "%s", word); for (i=0, memset (done, 0, FLW_LEN * sizeof (int)); iboard[i] = 0; flw_find_chain (flw_chain); for (i=0; iboard[(board_heit - 1) * board_wid + i] = flw_chain[0][i] - 'a' + 1; pos->board[i] = flw_chain[FLW_LEN][i] - 'a' + 1; } } static void flw_init () { game_single_player = TRUE; game_set_init_pos = flw_set_init_pos; game_draw_cell_boundaries = TRUE; game_free = flw_free; game_getmove = flw_getmove; game_getmove_kb = flw_getmove_kb; game_who_won = flw_who_won; game_start_immediately = TRUE; game_scorecmp = game_scorecmp_def_iscore; game_score_fields = flw_score_fields; game_score_field_names = flw_score_field_names; game_highlight_colors = flw_highlight_colors; game_doc_about_status = STATUS_COMPLETE; game_doc_about = "Four letter words\n" "Single player game\n" "Status: Partially implemented (playable)\n" "URL: "GAME_DEFAULT_URL("flw"); game_doc_rules = " This is a simple game in which the objective is to change the word at the top to the word at the bottom by changing one letter at a time. All intermediate words must be legal.\n" " To start playing, hit enter. This will make a copy of the top word on the second row. Click on the letter you want to change and change it by typing the new letter. Now hit enter. Repeat until all the rows are filled."; } static int flw_curx = -1, flw_cury = -1; ResultType flw_who_won (Pos *pos, Player to_play, char **commp) { static char comment[32] = "You won."; int i; for (i=0; iboard [i] != pos->board [board_wid + i]) return RESULT_NOTYET; *commp = comment; return RESULT_WON; } static int flw_get_cur_row (byte *board) { int j; for (j = board_heit - 1; j>=0 && board[j * board_wid]; j--) ; if (j < 0) j = 0; return j+1; } void flw_get_render (Pos *pos, byte *move, int type, int **rmovp) { static int rmove[7]; int *rp = rmove; int i, j; int oldx = 0; for (i=0; irender [j * board_wid + i] == RENDER_HIGHLIGHT1) { assert (rp == rmove); *rp++ = i; *rp++ = j; *rp++ = 0; oldx = i; } *rp++ = oldx; *rp++ = flw_get_cur_row (pos->board); *rp++ = RENDER_HIGHLIGHT1; *rp++ = -1; *rmovp = rmove; } int flw_getmove (Pos *pos, int x, int y, GtkboardEventType type, Player to_play, byte **movp, int ** rmovep) { static int rmove[7]; int *rp = rmove; if (type != GTKBOARD_BUTTON_RELEASE) return 0; if (y == 0 || y == board_heit - 1) return 0; if (pos->board [y * board_wid + x] == 0) return 0; if (y != 1 && pos->board [(y-1) * board_wid + x] != 0) return 0; if (flw_curx == x && flw_cury == y) return 0; *rp++ = flw_curx; *rp++ = flw_cury; *rp++ = 0; *rp++ = x; *rp++ = y; *rp++ = RENDER_HIGHLIGHT1; *rp++ = -1; *rmovep = rmove; flw_curx = x; flw_cury = y; return 0; } int flw_getmove_kb (Pos *pos, int key, byte **movp, int **rmovp) { static int rmove[7]; int *rp = rmove; static byte move[10]; byte *mp = move; int i, j, cury; char word[FLW_LEN+1], prevword[FLW_LEN+1]; if (flw_cury >= 0) { if (!(pos->board [flw_cury * board_wid] && (pos->board [(flw_cury-1) * board_wid] == 0 || flw_cury == 1))) { assert (0); // find the current row /*for (j = board_heit - 1; j>=0 && pos->board[j * board_wid]; j--) ; if (j < 0) j = 0; flw_cury = j+1; flw_curx = 0;*/ flw_cury = flw_get_cur_row (pos->board); flw_curx = 0; } } if (key == GDK_Return) { if ((cury = flw_cury) < 0) cury = board_heit - 1; for (i=0; iboard [cury * board_wid + i] + 'a' - 1; if (flw_cury >= 0) prevword[i] = pos->board [(cury+1) * board_wid + i] + 'a' - 1; } word[FLW_LEN] = '\0'; prevword[FLW_LEN] = '\0'; if (!bsearch (word, flwords, num_flwords, sizeof (flwords[0]), flw_wordcmp)) return -1; if (flw_cury >= 0) { int diff_cnt_prev = 0, diff_cnt_last = 0; for (i=0; i= 0) { *rp++ = flw_curx; *rp++ = flw_cury; *rp++ = 0; } if (flw_cury < 0) { flw_curx = 0; flw_cury = board_heit - 1; } flw_cury --; *rp++ = flw_curx; *rp++ = flw_cury; *rp++ = RENDER_HIGHLIGHT1; *rp++ = -1; *rmovp = rmove; for (i=0; i= GDK_A && key <= GDK_Z) key = key + GDK_a - GDK_A; if (key >= GDK_a && key <= GDK_z) { *mp++ = flw_curx; *mp++ = flw_cury; *mp++ = key - GDK_a + 1; *mp++ = -1; *movp = move; return 1; } return -1; } void flw_free () { flw_curx = flw_cury = -1; } gtkboard/src/flwords.h000066400000000000000000001146721153150217100153020ustar00rootroot00000000000000#ifndef _FLWORDS_H_ #define _FLWORDS_H_ /* This list was generated using $ egrep -x [a-z]{4} webster.wl */ static const char *flwords[] = { "abac", "abas", "abed", "abet", "abey", "abir", "able", "ably", "abox", "abut", "acca", "ache", "achy", "acid", "acle", "acme", "acne", "acor", "acre", "acta", "actu", "acyl", "adad", "adat", "adaw", "aday", "adda", "adet", "adit", "admi", "adry", "adze", "aeon", "aero", "aery", "afar", "affa", "affy", "agal", "agar", "aged", "agee", "agen", "ager", "agha", "agio", "agla", "agog", "agon", "agre", "agua", "ague", "ahem", "ahey", "ahoy", "ahum", "aide", "aiel", "aile", "aint", "aion", "aire", "airt", "airy", "ajar", "ajog", "akee", "akey", "akia", "akin", "akov", "akra", "alan", "alar", "alas", "alba", "albe", "alco", "alec", "alee", "alef", "alem", "alen", "alfa", "alga", "alif", "alin", "alit", "alky", "ally", "alma", "alme", "alms", "alod", "aloe", "alop", "alow", "also", "alto", "alum", "amah", "amar", "amba", "ambo", "amen", "amic", "amid", "amil", "amin", "amir", "amla", "amli", "amma", "ammo", "ammu", "amok", "amor", "amra", "amyl", "anal", "anam", "anan", "anay", "anba", "anda", "anes", "anew", "ango", "anil", "anis", "ankh", "anna", "anoa", "anon", "ansa", "ansu", "anta", "ante", "anti", "antu", "anus", "apar", "aper", "apex", "apii", "apio", "apod", "apse", "aqua", "aquo", "arad", "arar", "arba", "arca", "arch", "ardu", "area", "ared", "argo", "aria", "arid", "aril", "arms", "army", "arna", "arni", "arow", "arse", "arty", "arui", "aryl", "asak", "asci", "asem", "ashy", "asok", "asop", "asor", "asse", "assi", "asta", "atap", "atef", "ates", "atip", "atis", "atle", "atma", "atmo", "atom", "atop", "atry", "atta", "atwo", "aube", "auca", "auge", "augh", "aula", "auld", "aulu", "aune", "aunt", "aura", "ausu", "aute", "auto", "aval", "aver", "avid", "avow", "awag", "awat", "away", "awee", "awfu", "awin", "awny", "awry", "axal", "axed", "axes", "axil", "axis", "axle", "axon", "ayah", "ayin", "azon", "azox", "baal", "baar", "baba", "babe", "babu", "baby", "bach", "back", "bade", "baff", "baft", "baga", "bago", "baho", "baht", "bail", "bain", "bait", "baka", "bake", "baku", "bald", "bale", "bali", "balk", "ball", "balm", "balu", "banc", "band", "bane", "bang", "bani", "bank", "bant", "bara", "barb", "bard", "bare", "bari", "bark", "barm", "barn", "baru", "base", "bash", "bask", "bass", "bast", "bate", "bath", "bats", "batt", "batz", "baud", "baul", "baun", "bawd", "bawl", "bawn", "baya", "baze", "bead", "beak", "beal", "beam", "bean", "bear", "beat", "beau", "beck", "beef", "beek", "been", "beer", "bees", "beet", "bego", "behn", "bela", "beld", "bell", "belt", "bely", "bema", "bena", "bend", "bene", "beng", "beni", "benj", "benn", "beno", "bent", "bere", "berg", "berm", "besa", "best", "beta", "beth", "bevy", "bhat", "bhoy", "bhut", "bias", "bibb", "bibi", "bice", "bick", "bide", "bien", "bier", "biff", "biga", "bigg", "bija", "bike", "bikh", "bile", "bilk", "bill", "bilo", "bind", "bine", "bing", "binh", "bink", "bino", "bint", "biod", "bion", "bios", "bird", "biri", "birk", "birl", "birn", "birr", "bite", "biti", "bito", "bitt", "biwa", "bizz", "blab", "blad", "blae", "blah", "blan", "blas", "blat", "blaw", "blay", "bleb", "blee", "bleo", "blet", "blip", "blob", "bloc", "blot", "blow", "blub", "blue", "blup", "blur", "boar", "boat", "boba", "bobo", "boce", "bock", "bode", "body", "boga", "bogo", "bogy", "boho", "boid", "boil", "bojo", "boke", "bola", "bold", "bole", "bolk", "boll", "bolo", "bolt", "boma", "bomb", "bond", "bone", "bong", "bonk", "bony", "boob", "bood", "boof", "book", "bool", "boom", "boon", "boor", "boot", "bora", "bord", "bore", "borg", "borh", "born", "boro", "bort", "bose", "bosh", "bosk", "bosn", "boss", "bota", "bote", "both", "bott", "boud", "bouk", "boun", "bout", "bouw", "bowk", "bowl", "boxy", "boza", "bozo", "brab", "brad", "brae", "brag", "bran", "brat", "braw", "bray", "bred", "bree", "brei", "bret", "brew", "brey", "brig", "brim", "brin", "brit", "brob", "brod", "brog", "broo", "brot", "brow", "brut", "bual", "buba", "bubo", "buck", "buda", "buff", "bufo", "buhl", "buhr", "bukh", "bulb", "bulk", "bull", "bult", "bump", "buna", "bund", "bung", "bunk", "bunt", "buoy", "burd", "bure", "burg", "buri", "burl", "burn", "buro", "burp", "burr", "burt", "bury", "bush", "busk", "buss", "bust", "busy", "butt", "buzz", "byee", "bygo", "byon", "byre", "byth", "caam", "caba", "cack", "cade", "cadi", "cafh", "cage", "caid", "cain", "cake", "caky", "calf", "calk", "call", "calm", "calp", "calx", "camb", "came", "camp", "cand", "cane", "cank", "cant", "cany", "cape", "caph", "card", "care", "cark", "carl", "carp", "carr", "cart", "case", "cash", "cask", "cass", "cast", "cate", "cauk", "caul", "caum", "caup", "cava", "cave", "cavy", "cawk", "caza", "cede", "ceil", "cell", "celt", "cent", "cepa", "cepe", "ceps", "cere", "cern", "cero", "cess", "cest", "ceti", "chaa", "chab", "chad", "chai", "chal", "cham", "chao", "chap", "char", "chat", "chaw", "chay", "chee", "chef", "chew", "chia", "chic", "chid", "chih", "chil", "chin", "chip", "chit", "chob", "chol", "chop", "chow", "chub", "chug", "chum", "chun", "chut", "cine", "cion", "cipo", "cise", "cist", "cite", "city", "cive", "clad", "clag", "clam", "clan", "clap", "clat", "claw", "clay", "cled", "clee", "clef", "cleg", "clem", "clep", "clew", "clip", "clit", "clod", "clog", "clop", "clot", "clow", "cloy", "club", "clue", "coak", "coal", "coat", "coax", "coca", "cock", "coco", "coda", "code", "codo", "coed", "coff", "coft", "coho", "coif", "coil", "coin", "coir", "coke", "coky", "cola", "cold", "cole", "coli", "colk", "coll", "colp", "colt", "coly", "coma", "comb", "come", "cond", "cone", "conk", "conn", "cony", "coof", "cook", "cool", "coom", "coon", "coop", "coot", "copa", "cope", "copr", "copy", "cora", "cord", "core", "corf", "cork", "corm", "corn", "corp", "cosh", "coss", "cost", "cosy", "cote", "coth", "coto", "coue", "coul", "coup", "cove", "cowl", "cowy", "coxa", "coxy", "coyo", "coze", "cozy", "crab", "crag", "cram", "cran", "crap", "craw", "crea", "cree", "crew", "crib", "cric", "crig", "crin", "croc", "crop", "crow", "croy", "crum", "crus", "crux", "cube", "cubi", "cuck", "cuff", "cuir", "cuke", "cull", "culm", "cult", "cump", "curb", "curd", "cure", "curl", "curn", "curr", "curt", "cush", "cusk", "cusp", "cuss", "cute", "cuvy", "cuya", "cyan", "cyke", "cyma", "cyme", "cyst", "czar", "dabb", "dace", "dada", "dade", "dado", "daer", "daff", "daft", "dags", "dain", "dais", "dale", "dali", "dalk", "dalt", "dama", "dame", "damn", "damp", "dand", "dang", "dank", "dare", "darg", "dari", "dark", "darn", "darr", "dart", "dash", "dasi", "data", "date", "daub", "daud", "daut", "dauw", "davy", "dawn", "days", "daze", "dazy", "dead", "deaf", "deal", "dean", "dear", "debt", "deck", "dedo", "deed", "deem", "deep", "deer", "deft", "defy", "degu", "dele", "delf", "dell", "deme", "demi", "demy", "dene", "dent", "deny", "depa", "dere", "derm", "dern", "desi", "desk", "dess", "deul", "deva", "dewy", "dhai", "dhak", "dhan", "dhaw", "dhow", "dial", "dian", "dibs", "dice", "dich", "dick", "dieb", "diem", "dier", "diet", "digs", "dika", "dike", "dill", "dilo", "dime", "dine", "ding", "dink", "dint", "diol", "dird", "dire", "dirk", "dirl", "dirt", "disc", "dish", "disk", "diss", "dita", "dite", "diva", "dive", "dixy", "doab", "doat", "dobe", "doby", "dock", "dodd", "dodo", "doer", "does", "doff", "doge", "dogs", "dogy", "doit", "doke", "dola", "dole", "doli", "doll", "dolt", "dome", "domn", "domy", "done", "dong", "dont", "doob", "dook", "dool", "doom", "doon", "door", "dopa", "dope", "dorm", "dorn", "dorp", "dory", "dosa", "dose", "doss", "dote", "doty", "douc", "doum", "doup", "dour", "dout", "dove", "dowd", "dowf", "dowl", "down", "dowp", "doxa", "doxy", "doze", "dozy", "drab", "drag", "dram", "drat", "draw", "dray", "dree", "dreg", "drew", "drib", "drip", "drop", "drow", "drub", "drug", "drum", "duad", "dual", "dubb", "dubs", "duck", "duct", "dude", "duel", "duer", "duet", "duff", "duim", "duit", "duke", "dull", "dult", "duly", "duma", "dumb", "dump", "dune", "dung", "dunk", "dunt", "duny", "dupe", "dura", "dure", "durn", "duro", "dush", "dusk", "dust", "duty", "dyad", "dyce", "dyer", "dyke", "dyne", "each", "earl", "earn", "ease", "east", "easy", "eats", "eave", "eboe", "ebon", "ecad", "eche", "echo", "ecru", "eddo", "eddy", "edea", "edge", "edgy", "edit", "eely", "egad", "eggy", "egma", "egol", "eheu", "ejoo", "eker", "ekka", "elle", "elmy", "elod", "else", "emir", "emit", "emma", "empt", "emyd", "enam", "enol", "enow", "ense", "envy", "eoan", "epee", "epha", "epic", "epos", "eral", "eria", "eric", "erne", "eros", "erth", "eruc", "esca", "esne", "espy", "etch", "etna", "etua", "etui", "etym", "euge", "even", "ever", "evil", "evoe", "ewer", "ewry", "exam", "exes", "exit", "exon", "eyah", "eyas", "eyed", "eyen", "eyer", "eyey", "eyne", "eyot", "eyra", "eyre", "ezba", "face", "fack", "fact", "facy", "fade", "fady", "faff", "fage", "fail", "fain", "fair", "fake", "faky", "fall", "falx", "fame", "fana", "fand", "fang", "fant", "faon", "fare", "farl", "farm", "faro", "fash", "fass", "fast", "fate", "faun", "favn", "fawn", "faze", "feak", "feal", "fear", "feat", "feck", "feed", "feel", "feer", "feif", "feil", "feis", "fell", "fels", "felt", "feme", "fend", "fent", "feod", "ferk", "fern", "feru", "fess", "fest", "feud", "fiar", "fiat", "fice", "fico", "fide", "fife", "fifo", "fike", "file", "fill", "film", "filo", "fils", "find", "fine", "fink", "fire", "firk", "firm", "firn", "fisc", "fise", "fish", "fist", "five", "fizz", "flag", "flak", "flam", "flan", "flap", "flat", "flaw", "flax", "flay", "flea", "fled", "flee", "flet", "flew", "flex", "fley", "flip", "flit", "flix", "flob", "floc", "floe", "flog", "flop", "flot", "flow", "flub", "flue", "flux", "foal", "foam", "foci", "fogo", "fogy", "foil", "fold", "fole", "folk", "fono", "fons", "font", "food", "fool", "foot", "fora", "forb", "ford", "fore", "fork", "form", "fort", "fosh", "foud", "foul", "foun", "four", "fowk", "fowl", "foxy", "fozy", "frab", "frae", "frap", "frat", "fray", "free", "fret", "frib", "frig", "frim", "frit", "friz", "froe", "frog", "from", "frot", "frow", "fuci", "fuel", "fuff", "fugu", "fuji", "fulk", "full", "fume", "fumy", "fund", "funk", "funt", "furl", "fury", "fusc", "fuse", "fuss", "fust", "fute", "fuye", "fuze", "fuzz", "fyke", "fyrd", "gabi", "gaby", "gade", "gaen", "gaet", "gaff", "gage", "gain", "gair", "gait", "gala", "gale", "gali", "gall", "galp", "galt", "gamb", "game", "gamp", "gamy", "gane", "gang", "gant", "gaol", "gapa", "gape", "gapo", "gapy", "gara", "garb", "gare", "garn", "gash", "gasp", "gast", "gata", "gate", "gaub", "gaud", "gaum", "gaun", "gaup", "gaur", "gaus", "gaut", "gave", "gawk", "gawm", "gawn", "gaze", "gazi", "gazy", "geal", "gean", "gear", "geat", "geck", "geek", "geet", "gegg", "gein", "geld", "gell", "gelt", "gena", "gene", "gens", "gent", "genu", "gerb", "germ", "gers", "gest", "geta", "geum", "ghat", "ghee", "gibe", "gied", "gien", "gift", "gild", "gill", "gilo", "gilt", "gimp", "ging", "gink", "gird", "girl", "girn", "giro", "girr", "girt", "gish", "gist", "gith", "give", "gizz", "glad", "glam", "glar", "glee", "gleg", "glen", "glia", "glib", "glom", "glop", "glor", "glow", "gloy", "glub", "glue", "glug", "glum", "glut", "gnar", "gnat", "gnaw", "goad", "goaf", "goal", "goat", "gobi", "gobo", "goby", "gode", "goel", "goer", "goes", "goff", "gogo", "gola", "gold", "golf", "goli", "gone", "gong", "gony", "good", "goof", "gook", "gool", "goon", "gora", "gorb", "gore", "gory", "gosh", "gote", "goup", "gout", "gove", "gowf", "gowk", "gowl", "gown", "grab", "grad", "gram", "grat", "gray", "gree", "grew", "grey", "grid", "grig", "grim", "grin", "grip", "gris", "grit", "grog", "gros", "grot", "grow", "grub", "grue", "grum", "grun", "guan", "guao", "guar", "gude", "gufa", "guff", "gugu", "guhr", "guib", "gula", "gule", "gulf", "gull", "gulp", "gump", "guna", "gunj", "gunk", "gunl", "gurk", "gurl", "gurr", "gurt", "guru", "gush", "guss", "gust", "gutt", "guze", "gwag", "gyle", "gyne", "gype", "gyps", "gyre", "gyri", "gyro", "gyte", "gyve", "haab", "haaf", "habu", "hack", "hade", "hadj", "haec", "haem", "haet", "haff", "haft", "hagi", "haik", "hail", "hain", "hair", "haje", "hake", "hako", "haku", "hala", "hale", "half", "hall", "halo", "hals", "halt", "hame", "hami", "hand", "hank", "hant", "hapu", "hard", "hare", "hark", "harl", "harm", "harn", "harp", "harr", "hart", "hash", "hask", "hasp", "hate", "hath", "hatt", "haul", "have", "hawk", "hawm", "haya", "hayz", "haze", "hazy", "head", "heaf", "heal", "heap", "hear", "heat", "hech", "heck", "heed", "heel", "heer", "heft", "heii", "heir", "hele", "hell", "helm", "help", "heme", "heml", "hemp", "hend", "hent", "herb", "herd", "here", "herl", "hern", "hero", "hers", "hest", "hevi", "hewn", "hewt", "hexa", "hick", "hide", "high", "hike", "hill", "hilt", "himp", "hind", "hing", "hint", "hipe", "hire", "hiro", "hish", "hisn", "hiss", "hist", "hive", "hizz", "hoar", "hoax", "hobo", "hock", "hoer", "hoga", "hoin", "hoit", "hoju", "hold", "hole", "holl", "holm", "holt", "holy", "home", "homo", "homy", "hone", "hong", "honk", "hood", "hoof", "hook", "hoon", "hoop", "hoot", "hope", "hopi", "hora", "horn", "hory", "hose", "host", "hoti", "hour", "hove", "howe", "howk", "howl", "hubb", "huck", "hued", "huer", "huff", "huge", "huia", "huke", "hula", "hulk", "hull", "hulu", "hump", "hung", "hunh", "hunk", "hunt", "hura", "hure", "hurl", "hurr", "hurt", "huse", "hush", "husk", "huso", "huss", "huzz", "hyke", "hyle", "hymn", "hyne", "hypo", "iamb", "ibex", "ibid", "ibis", "iced", "icho", "ichu", "icon", "idea", "ides", "idic", "idle", "idly", "idol", "idyl", "iffy", "iiwi", "ijma", "ikat", "ikey", "ikra", "ilex", "ilia", "ilka", "illy", "ilot", "imam", "imbe", "immi", "impi", "impy", "inbe", "inby", "inch", "inde", "indy", "inks", "inky", "inly", "inro", "into", "iodo", "iota", "ipid", "ipil", "irid", "iris", "irok", "iron", "isba", "isle", "ismy", "itch", "item", "iter", "itmo", "ivin", "iwis", "izar", "izle", "jack", "jacu", "jade", "jady", "jail", "jake", "jako", "jama", "jamb", "jami", "jane", "jank", "jann", "jaob", "jape", "jara", "jarg", "jarl", "jass", "jati", "jato", "jauk", "jaun", "jaup", "jawy", "jazz", "jean", "jeel", "jeep", "jeer", "jeff", "jehu", "jell", "jerk", "jerl", "jerm", "jert", "jess", "jest", "jete", "jhow", "jibe", "jibi", "jiff", "jilt", "jimp", "jina", "jing", "jink", "jinn", "jinx", "jiti", "jiva", "jive", "jobo", "joch", "jock", "jocu", "joey", "join", "joke", "joky", "joll", "jolt", "joom", "josh", "joss", "jota", "joug", "jouk", "jowl", "juba", "jube", "juck", "judo", "juju", "juke", "jump", "june", "junk", "junt", "jupe", "jure", "jury", "just", "jute", "jynx", "kago", "kagu", "kaha", "kahu", "kaid", "kaik", "kail", "kaka", "kaki", "kala", "kale", "kali", "kalo", "kame", "kana", "kang", "kans", "kapa", "kapp", "karo", "kasa", "kasm", "kath", "kava", "kayo", "kazi", "keck", "keek", "keel", "keen", "keep", "keet", "keld", "kele", "kelk", "kell", "kelp", "kelt", "kemb", "kemp", "kend", "keno", "kent", "kepi", "kept", "kerf", "kern", "keta", "keto", "keup", "kexy", "khan", "khar", "khat", "khet", "khir", "khot", "kibe", "kiby", "kick", "kiel", "kier", "kike", "kiki", "kiku", "kill", "kiln", "kilo", "kilp", "kilt", "kina", "kind", "king", "kink", "kino", "kipe", "kiri", "kirk", "kirn", "kish", "kiss", "kist", "kite", "kith", "kiva", "kivu", "kiwi", "kiyi", "klam", "klip", "klom", "klop", "kmet", "knab", "knag", "knap", "knar", "knee", "knet", "knew", "knez", "knit", "knob", "knop", "knot", "know", "knub", "knur", "knut", "koae", "kobi", "kobu", "koda", "koel", "koff", "koft", "kohl", "koil", "koko", "koku", "kola", "kolo", "kona", "koph", "kopi", "kora", "kore", "kori", "koto", "kozo", "kral", "kran", "kras", "kuan", "kuba", "kudu", "kuei", "kuge", "kuku", "kula", "kulm", "kung", "kunk", "kusa", "kwan", "kyah", "kyar", "kyat", "kyle", "kyte", "lace", "lack", "lacy", "lade", "lady", "laet", "laic", "laid", "lain", "lair", "lake", "laky", "lall", "lalo", "lama", "lamb", "lame", "lamp", "land", "lane", "lank", "lant", "lanx", "lard", "lari", "lark", "lasa", "lash", "lask", "lass", "last", "lata", "late", "lath", "laud", "laun", "laur", "lava", "lave", "lawk", "lawn", "laze", "lazy", "lead", "leaf", "leak", "leal", "leam", "lean", "leap", "lear", "leat", "lech", "leck", "lede", "leed", "leek", "leep", "leer", "lees", "leet", "left", "lehr", "lend", "lene", "leno", "lens", "lent", "lepa", "lerp", "less", "lest", "lete", "leud", "leuk", "levo", "levy", "lewd", "liar", "lich", "lick", "lied", "lief", "lien", "lier", "lieu", "life", "lifo", "lift", "liin", "lija", "like", "lile", "lill", "lilt", "lily", "limb", "lime", "limn", "limp", "limu", "limy", "lina", "line", "ling", "link", "linn", "lino", "lint", "liny", "lion", "lipa", "lira", "lire", "lish", "lisk", "lisp", "liss", "list", "lite", "lith", "litz", "live", "llyn", "load", "loaf", "loam", "loan", "lobe", "lobo", "loca", "loch", "loci", "lock", "loco", "lode", "loft", "loge", "logy", "loin", "loir", "loka", "loke", "loll", "loma", "lone", "long", "lood", "loof", "look", "loom", "loon", "loop", "loot", "lope", "lora", "lord", "lore", "lori", "lorn", "loro", "lors", "lory", "lose", "losh", "loss", "lost", "lota", "lote", "lots", "loud", "louk", "loup", "lour", "lout", "love", "lowa", "lown", "lowy", "lube", "luce", "luck", "lucy", "ludo", "lues", "luff", "luge", "luke", "lull", "lulu", "lump", "luna", "lune", "lung", "lunn", "lunt", "lupe", "lura", "lure", "lurg", "lurk", "lush", "lusk", "lust", "lute", "luxe", "lyam", "lynx", "lyra", "lyre", "lyse", "maam", "mabi", "mace", "mack", "maco", "made", "mado", "mage", "magi", "maha", "maid", "mail", "maim", "main", "majo", "make", "maki", "mako", "mala", "male", "mali", "mall", "malm", "malo", "malt", "mamo", "mana", "mand", "mane", "mang", "mani", "mank", "mano", "mant", "many", "mapo", "marc", "mare", "mark", "marl", "marm", "maro", "mart", "maru", "mary", "masa", "mash", "mask", "mass", "mast", "masu", "mate", "math", "maty", "maud", "maul", "maun", "maux", "mawk", "mawp", "maya", "maza", "maze", "mazy", "mead", "meak", "meal", "mean", "meat", "meed", "meek", "meet", "mein", "meio", "mela", "meld", "mele", "mell", "melt", "memo", "mend", "meng", "menu", "meny", "mere", "merk", "merl", "mero", "mesa", "mese", "mesh", "meso", "mess", "meta", "mete", "mewl", "mian", "mias", "mica", "mice", "mick", "mico", "mide", "mids", "mien", "miff", "mijl", "mike", "mila", "mild", "mile", "milk", "mill", "milo", "milt", "mima", "mime", "mimp", "mina", "mind", "mine", "ming", "mink", "mino", "mint", "minx", "miny", "mird", "mire", "mirk", "miro", "miry", "mise", "miss", "mist", "mite", "mitt", "mity", "mixy", "moan", "moat", "mock", "mode", "moff", "mogo", "moha", "moho", "mohr", "moil", "moio", "moit", "mojo", "moke", "moki", "moko", "moky", "mola", "mold", "mole", "molt", "moly", "mome", "momo", "mona", "mone", "mong", "monk", "mono", "mood", "mool", "moon", "moop", "moor", "moot", "mope", "moph", "mora", "more", "morg", "morn", "moro", "mort", "moss", "most", "mote", "moth", "mott", "moud", "moul", "moup", "mout", "move", "mown", "mowt", "moxa", "moyo", "much", "muck", "mudd", "muff", "muga", "mugg", "muid", "muir", "mule", "mulk", "mull", "mult", "mump", "mund", "mung", "munj", "munt", "mura", "mure", "murk", "muse", "mush", "musk", "muss", "must", "muta", "mute", "muth", "mutt", "muzz", "myal", "myna", "myst", "myth", "myxa", "myxo", "naam", "nabk", "nabs", "nace", "nach", "nael", "naga", "naid", "naif", "naig", "naik", "nail", "nain", "naio", "nais", "nake", "nako", "name", "nana", "nane", "nant", "naos", "napa", "nape", "napu", "nard", "nark", "narr", "nary", "nash", "nasi", "nast", "natr", "naut", "nave", "navy", "nawt", "naze", "neal", "neap", "neat", "neck", "need", "neem", "neep", "neer", "neet", "neif", "nema", "neon", "nese", "nesh", "ness", "nest", "nete", "neth", "neti", "neve", "nevo", "news", "newt", "next", "ngai", "nibs", "nice", "nick", "nide", "nidi", "nife", "nigh", "nimb", "nine", "niog", "nipa", "nito", "nizy", "nobs", "nock", "node", "nodi", "noel", "noil", "noir", "noll", "nolo", "noma", "nome", "none", "nook", "noon", "noop", "nope", "nori", "norm", "nose", "nosy", "note", "noun", "noup", "nous", "nova", "nowt", "nowy", "noxa", "nude", "nuke", "null", "numb", "oaky", "oary", "oast", "oath", "oaty", "oban", "obex", "obey", "obit", "oboe", "obol", "ocht", "odal", "odds", "odel", "odic", "odor", "odso", "odum", "odyl", "ogam", "ogee", "ogle", "ogre", "ogum", "ohia", "ohoy", "oily", "oime", "oint", "okee", "oket", "okia", "okra", "olam", "oleo", "olid", "olio", "olla", "olpe", "omao", "omen", "omer", "omit", "onca", "once", "ondy", "oner", "only", "onto", "onus", "onym", "onyx", "onza", "oofy", "ooid", "oons", "oont", "oord", "ooze", "oozy", "opah", "opal", "open", "opsy", "opus", "orad", "oral", "orby", "ordu", "orgy", "orle", "orlo", "orna", "osse", "otic", "otto", "ouch", "ough", "ours", "oust", "oval", "oven", "over", "ovey", "ovum", "ower", "owly", "owse", "oxan", "oxea", "oxen", "oxer", "oxyl", "oyer", "paal", "paar", "paca", "pace", "pack", "paco", "pact", "paga", "page", "paha", "pahi", "paho", "paik", "pail", "pain", "paip", "pair", "pais", "pale", "pali", "pall", "palm", "palp", "palt", "paly", "pand", "pane", "pang", "pank", "pant", "paon", "papa", "pape", "para", "pard", "pare", "pari", "park", "parr", "part", "pash", "pasi", "pass", "past", "pata", "pate", "path", "pato", "patu", "paty", "paup", "paut", "pave", "pavy", "pawk", "pawl", "pawn", "peag", "peai", "peak", "peal", "pean", "pear", "peat", "peba", "pech", "peck", "peda", "peed", "peek", "peel", "peen", "peep", "peer", "pega", "peho", "pelf", "pell", "pelt", "pelu", "pend", "penk", "pent", "peon", "pepo", "peri", "perk", "perm", "pern", "pert", "pesa", "peso", "pess", "pest", "pete", "peto", "pewy", "pfui", "phew", "phit", "phiz", "phoh", "phon", "phoo", "phos", "phot", "phut", "pial", "pian", "pica", "pice", "pick", "pico", "pict", "pied", "pien", "pier", "piet", "piff", "pika", "pike", "piki", "piky", "pile", "pili", "pill", "pilm", "pily", "pimp", "pina", "pind", "pine", "ping", "pink", "pino", "pint", "piny", "pipa", "pipe", "pipi", "pipy", "pirl", "pirn", "pirr", "pise", "pish", "pisk", "piso", "piss", "pist", "pita", "pith", "pity", "pixy", "pize", "plak", "plan", "plap", "plat", "play", "plea", "pleb", "pled", "plew", "plex", "plim", "plod", "plop", "plot", "plow", "ploy", "plud", "plug", "plum", "plup", "plus", "pobs", "pock", "poco", "poem", "poet", "pogy", "poha", "poil", "poke", "poky", "pole", "polk", "poll", "polo", "polt", "poly", "pome", "pomp", "pond", "pone", "pong", "pont", "pony", "pooa", "poof", "pooh", "pook", "pool", "poon", "poop", "poor", "poot", "pope", "pore", "pork", "porr", "port", "pory", "pose", "posh", "poss", "post", "posy", "pote", "pott", "pouf", "pour", "pout", "poxy", "prad", "pram", "prat", "prau", "pray", "prep", "prey", "prig", "prim", "proa", "prob", "prod", "prof", "prog", "proo", "prop", "prow", "pruh", "prut", "psha", "puan", "puce", "puck", "pudu", "puff", "pugh", "puja", "puka", "puke", "puku", "puky", "pule", "puli", "pulk", "pull", "pulp", "pulu", "puly", "puma", "pump", "puna", "pung", "punk", "punt", "puny", "pupa", "pure", "purl", "purr", "push", "puss", "putt", "puxy", "pyal", "pyic", "pyin", "pyke", "pyla", "pyre", "pyro", "qere", "qeri", "qoph", "quab", "quad", "quag", "quan", "quar", "quat", "quaw", "quay", "quei", "quet", "quey", "quib", "quid", "quin", "quip", "quis", "quit", "quiz", "quod", "quop", "quot", "raad", "race", "rach", "rack", "racy", "rada", "raff", "raft", "raga", "rage", "raia", "raid", "rail", "rain", "rais", "raja", "rake", "rakh", "raki", "raku", "rame", "rami", "ramp", "rana", "rand", "rane", "rang", "rani", "rank", "rann", "rant", "rape", "rapt", "rare", "rasa", "rase", "rash", "rasp", "rata", "rate", "rath", "rauk", "raun", "rave", "raya", "raze", "razz", "read", "reak", "real", "ream", "reap", "rear", "reck", "rect", "redd", "rede", "redo", "reed", "reef", "reek", "reel", "reem", "reen", "reet", "reft", "reif", "reim", "rein", "reis", "reit", "rely", "rend", "renk", "rent", "repp", "reps", "resh", "resp", "rest", "reve", "rhea", "rial", "ribe", "rice", "rich", "rick", "ride", "riem", "rier", "rife", "riff", "rift", "rikk", "rile", "rill", "rima", "rime", "rimu", "rimy", "rind", "rine", "ring", "rink", "riot", "ripa", "ripe", "rise", "risk", "risp", "rist", "rita", "rite", "riva", "rive", "rixy", "road", "roam", "roan", "roar", "robe", "rock", "rodd", "rode", "roed", "roer", "roey", "roid", "roil", "roit", "roka", "roke", "roky", "role", "roll", "romp", "rond", "rone", "rood", "roof", "rook", "rool", "room", "roon", "root", "rope", "ropp", "ropy", "rory", "rose", "ross", "rosy", "rota", "rote", "roto", "roub", "roud", "roue", "roun", "roup", "rout", "rove", "rowy", "roxy", "royt", "ruby", "ruck", "rudd", "rude", "ruen", "ruer", "ruff", "ruga", "ruin", "rukh", "rule", "rull", "rump", "rune", "rung", "runt", "rupa", "ruru", "ruse", "rush", "rusk", "rust", "ruth", "ryal", "ryen", "ryme", "rynd", "rynt", "ryot", "rype", "sabe", "sack", "saco", "sade", "sadh", "sado", "sadr", "safe", "saft", "saga", "sage", "sago", "sagy", "sahh", "saic", "said", "sail", "saim", "sain", "saip", "sair", "sake", "saki", "sale", "salp", "salt", "same", "samh", "samp", "sand", "sane", "sang", "sank", "sans", "sant", "sapa", "sapo", "sard", "sare", "sari", "sark", "sart", "sasa", "sash", "sate", "sauf", "saum", "saur", "saut", "save", "sawn", "sawt", "saya", "scab", "scad", "scam", "scan", "scap", "scar", "scat", "scaw", "scho", "scob", "scog", "scot", "scow", "scry", "scud", "scug", "scum", "scun", "scup", "scur", "scut", "scye", "scyt", "seah", "seak", "seal", "seam", "sear", "seat", "seax", "sech", "seck", "sect", "seed", "seek", "seel", "seem", "seen", "seep", "seer", "sego", "seit", "sele", "self", "sell", "selt", "seme", "semi", "send", "sent", "seps", "sept", "sera", "sere", "serf", "sero", "sert", "sess", "seta", "seth", "sett", "sewn", "sext", "sexy", "shab", "shad", "shag", "shah", "sham", "shan", "shap", "shat", "shaw", "shay", "shea", "shed", "shee", "sher", "shih", "shim", "shin", "ship", "shiv", "shod", "shoe", "shog", "shoo", "shop", "shoq", "shor", "shot", "shou", "show", "shug", "shul", "shun", "shut", "siak", "sial", "sice", "sick", "side", "sidi", "sidy", "sier", "sife", "sift", "sigh", "sign", "sika", "sike", "sile", "silk", "sill", "silo", "silt", "sima", "sime", "simp", "sina", "sind", "sine", "sing", "sinh", "sink", "siol", "sion", "sipe", "sire", "sise", "sish", "sisi", "siss", "sist", "site", "sith", "siva", "size", "sizy", "sizz", "skag", "skal", "skat", "skaw", "skee", "skeg", "skel", "sken", "skeo", "skep", "sker", "skew", "skey", "skid", "skil", "skim", "skin", "skip", "skit", "skiv", "skoo", "skua", "skun", "slab", "slad", "slae", "slag", "slam", "slap", "slat", "slaw", "slay", "sled", "slee", "slew", "sley", "slid", "slim", "slip", "slit", "slob", "slod", "sloe", "slog", "slon", "sloo", "slop", "slot", "slow", "slub", "slud", "slue", "slug", "slum", "slur", "slut", "smee", "smew", "smit", "smog", "smug", "smur", "smut", "snab", "snag", "snap", "snaw", "sneb", "sned", "snee", "snew", "snib", "snig", "snip", "snob", "snod", "snog", "snop", "snot", "snow", "snub", "snug", "snum", "snup", "snur", "soak", "soam", "soap", "soar", "soce", "sock", "soco", "soda", "sody", "sofa", "soft", "soho", "soil", "soja", "soka", "soke", "sola", "sold", "sole", "soli", "solo", "soma", "some", "sond", "song", "sonk", "sons", "sook", "sool", "soon", "soot", "sope", "soph", "sora", "sorb", "sore", "sori", "sorn", "sort", "sory", "sosh", "soso", "soss", "sots", "soud", "soul", "soum", "soup", "sour", "sowl", "sown", "sowt", "soya", "spad", "spae", "spak", "span", "spar", "spat", "spay", "spec", "sped", "spet", "spew", "spex", "spig", "spin", "spit", "spiv", "spor", "spot", "spry", "spud", "spug", "spun", "spur", "sput", "stab", "stag", "stam", "stap", "star", "staw", "stay", "steg", "stem", "sten", "step", "stet", "stew", "stey", "stib", "stid", "stim", "stir", "stoa", "stob", "stod", "stof", "stog", "stop", "stot", "stow", "stra", "stre", "stub", "stud", "stue", "stug", "stum", "stun", "stut", "such", "suck", "sudd", "suds", "suer", "suet", "suff", "sugh", "sugi", "suid", "suit", "suji", "suld", "sulk", "sull", "sump", "sune", "sung", "sunk", "sunn", "sunt", "supa", "supe", "sura", "surd", "sure", "surf", "susi", "susu", "suum", "suwe", "swab", "swad", "swag", "swam", "swan", "swap", "swat", "sway", "swep", "swig", "swim", "swiz", "swob", "swom", "swot", "swow", "swum", "syce", "sync", "syne", "syre", "syrt", "taar", "tabu", "tach", "tack", "tact", "tade", "tael", "taen", "taft", "taha", "tahr", "tail", "tain", "tait", "take", "takt", "taky", "tala", "talc", "tald", "tale", "tali", "talk", "tall", "tame", "tamp", "tana", "tane", "tang", "tanh", "tank", "tapa", "tape", "taps", "tapu", "tara", "tare", "tari", "tarn", "taro", "tarp", "tarr", "tars", "tart", "tash", "task", "tass", "tasu", "tate", "tath", "tatu", "taum", "taun", "taur", "taut", "tave", "tawa", "tawn", "taws", "taxi", "taxy", "tche", "tchu", "tead", "teak", "teal", "team", "tean", "teap", "tear", "teat", "teca", "tech", "teck", "teel", "teem", "teen", "teer", "teet", "teff", "teil", "teju", "tele", "teli", "tell", "telt", "temp", "tend", "teng", "tent", "tera", "term", "tern", "terp", "test", "tete", "teth", "teuk", "text", "than", "thar", "that", "thaw", "theb", "thee", "them", "then", "thew", "they", "thig", "thin", "thio", "thir", "this", "thob", "thof", "thon", "thoo", "thou", "thow", "thro", "thud", "thug", "thus", "tiao", "tiar", "tice", "tick", "tide", "tidy", "tied", "tien", "tier", "tiff", "tift", "tige", "tile", "till", "tilt", "time", "tind", "tine", "ting", "tink", "tint", "tiny", "tipe", "tire", "tirl", "tirr", "tite", "titi", "tivy", "tiza", "toad", "toat", "tobe", "toby", "tock", "toco", "tode", "tody", "toed", "toff", "toft", "tofu", "toga", "togs", "togt", "toho", "toil", "toit", "toke", "toko", "told", "tole", "toll", "tolt", "tolu", "tomb", "tome", "tone", "tong", "tonk", "tony", "took", "tool", "toom", "toon", "toop", "toot", "tope", "toph", "topi", "topo", "tops", "tora", "torc", "tore", "torn", "toro", "tort", "toru", "tory", "tosh", "toss", "tost", "tosy", "tote", "toto", "toty", "toug", "toup", "tour", "tout", "towd", "town", "towy", "toxa", "toze", "trag", "trah", "tram", "trap", "tray", "tree", "tref", "trek", "tret", "trey", "trig", "trim", "trin", "trio", "trip", "trod", "trog", "tron", "trot", "trow", "troy", "trub", "true", "trug", "trun", "tryp", "tryt", "tsar", "tsia", "tsun", "tuan", "tuba", "tube", "tuck", "tufa", "tuff", "tuft", "tuik", "tuke", "tula", "tule", "tume", "tump", "tuna", "tund", "tune", "tung", "tunk", "tuno", "tunu", "tuny", "turb", "turd", "turf", "turk", "turm", "turn", "turp", "turr", "tush", "tusk", "tute", "tuth", "tuts", "tutu", "tuwi", "tuza", "twae", "twal", "twas", "twat", "tway", "twee", "twig", "twin", "twit", "tyee", "tyke", "tymp", "tynd", "type", "typo", "typp", "typy", "tyre", "tyro", "uang", "udal", "ugly", "uily", "ulex", "ulla", "ulmo", "ulna", "ulua", "umbo", "umph", "unal", "unau", "unbe", "unca", "unci", "unco", "unde", "undo", "undy", "unie", "unio", "unit", "unto", "untz", "unze", "upas", "updo", "upgo", "upla", "upon", "ural", "uran", "urao", "urde", "urea", "urge", "uric", "urna", "urus", "urva", "usar", "used", "usee", "user", "utai", "utas", "utch", "utum", "uval", "uvea", "uvic", "uvid", "uzan", "vade", "vady", "vage", "vail", "vain", "vair", "vale", "vali", "vall", "vamp", "vane", "vang", "vara", "vare", "vari", "vary", "vasa", "vase", "vast", "vasu", "veal", "veen", "veep", "veer", "veil", "vein", "vela", "vell", "velo", "vend", "vent", "vera", "verb", "verd", "veri", "vert", "very", "vest", "veta", "veto", "vext", "vial", "vice", "vier", "view", "viga", "vila", "vile", "vill", "vina", "vine", "vino", "vint", "viny", "viol", "vire", "virl", "visa", "vise", "vita", "viva", "vive", "vlei", "voar", "voet", "void", "vole", "volt", "vota", "vote", "vuln", "waag", "waar", "wabe", "wace", "wack", "wade", "wadi", "waeg", "waer", "waff", "waft", "wage", "waif", "waik", "wail", "wain", "wait", "waka", "wake", "wakf", "waky", "wale", "wali", "walk", "wall", "walt", "wame", "wamp", "wand", "wane", "wang", "want", "wany", "wapp", "ward", "ware", "warf", "wark", "warl", "warm", "warn", "warp", "wart", "wary", "wase", "wash", "wasp", "wast", "wath", "watt", "wauf", "waul", "waup", "waur", "wave", "wavy", "wawa", "waxy", "ways", "weak", "weal", "weam", "wean", "wear", "wede", "weed", "week", "weel", "ween", "weep", "weet", "weft", "weir", "weka", "weki", "weld", "welk", "well", "wels", "welt", "wend", "wene", "went", "wept", "were", "werf", "weri", "wert", "wese", "west", "weta", "weve", "wham", "whan", "whap", "whar", "what", "whau", "whee", "when", "whet", "whew", "whey", "whid", "whig", "whim", "whin", "whip", "whir", "whit", "whiz", "whoa", "whom", "whoo", "whop", "whud", "whun", "whup", "whuz", "whyo", "wice", "wick", "wide", "widu", "wife", "wild", "wile", "wilk", "will", "wilt", "wily", "wime", "wind", "wine", "wing", "wink", "wint", "winy", "wipe", "wips", "wird", "wire", "wirl", "wirr", "wiry", "wise", "wish", "wisp", "wiss", "wist", "wite", "with", "wive", "woad", "woak", "woan", "wode", "woft", "woke", "wold", "wolf", "womb", "wone", "wong", "wont", "wood", "woof", "wool", "woom", "woon", "wops", "word", "wore", "work", "worm", "worn", "wort", "wote", "wots", "wouf", "wove", "wowt", "wran", "wrap", "wraw", "wren", "wrig", "writ", "wrox", "wudu", "wugg", "wulk", "wull", "wush", "wusp", "wuss", "wust", "wuzu", "wyde", "wyke", "wyle", "wynd", "wyne", "wynn", "wype", "wyss", "wyve", "xyla", "xyst", "yaba", "yabu", "yade", "yaff", "yagi", "yair", "yaje", "yalb", "yale", "yali", "yamp", "yang", "yank", "yapa", "yapp", "yarb", "yard", "yare", "yark", "yarl", "yarm", "yarn", "yarr", "yate", "yati", "yaud", "yava", "yawl", "yawn", "yawp", "yaws", "yawy", "yaya", "ycie", "yday", "yeah", "yean", "year", "yeat", "yede", "yeel", "yees", "yegg", "yeld", "yelk", "yell", "yelm", "yelp", "yelt", "yeni", "yerb", "yerd", "yere", "yerk", "yern", "yese", "yeso", "yest", "yeta", "yeth", "yeuk", "yigh", "yill", "yilt", "yird", "yirk", "yirm", "yirn", "yirr", "yite", "yobi", "yock", "yodh", "yoga", "yogh", "yogi", "yoke", "yoky", "yolk", "yond", "yont", "yook", "yoop", "yore", "york", "yote", "youd", "youl", "youp", "your", "yowl", "yowt", "yuan", "yuca", "yuck", "yuft", "yule", "yurt", "yutu", "zain", "zant", "zany", "zarf", "zarp", "zati", "zeal", "zebu", "zeed", "zein", "zemi", "zenu", "zero", "zest", "zeta", "zimb", "zinc", "zing", "zink", "zira", "zizz", "zobo", "zoea", "zogo", "zoic", "zoid", "zoll", "zone", "zoom", "zoon", "zuza", "zyga", "zyme", }; static const int num_flwords = sizeof (flwords) / sizeof (flwords[0]); #endif gtkboard/src/game.h000066400000000000000000000461621153150217100145310ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ #ifndef _GAME_H_ #define _GAME_H_ #include /** \file game.h \brief Header file that must be included by all games. This is the only file that the games need to include. */ //! Both moves and positions are arrays of bytes #ifndef byte #define byte gint8 #endif //! Used in a two player game to represent whose move it is. /* White is always the player that moves first. Internally they are always called white and black even if the game wants the user to see them as red and blue, or Bob and Sue etc.*/ typedef enum {WHITE, BLACK} Player; //! Used for representing the type of user input in game_getmove() and game_getmove_kb() /** This layer of abstraction exists so that to write a game it will not be necessary to have the g[dt]k headers */ typedef enum { GTKBOARD_BUTTON_PRESS = 1, GTKBOARD_BUTTON_RELEASE, GTKBOARD_MOTION_NOTIFY, GTKBOARD_LEAVE_NOTIFY, GTKBOARD_KEY_PRESS, GTKBOARD_KEY_RELEASE, GTKBOARD_GAME_START, GTKBOARD_HUMAN_MOVE, GTKBOARD_MACHINE_MOVE, GTKBOARD_HISTORY_MOVE } GtkboardEventType; //! Abstraction of a user event typedef struct { //! Type of event GtkboardEventType type; //! (For mouse events) x coordinate of the *cell* -- ranges from 0 to board_wid int x; // y coordinate of the cell int y; //! Actual x coordinate int pixel_x; //! Actual y coordinate int pixel_y; //! The key that was pressed int key; //! The move (when type is GTKBOARD_{HUMAN,MACHINE,HISTORY}_MOVE) byte *move; } GtkboardEvent; //! Used for representing the result of game_who_won() typedef enum { //! White won RESULT_WHITE, //! Black won RESULT_BLACK, //! Draw RESULT_TIE, //! Game not over yet RESULT_NOTYET, //! User completed the game successfully (single player game) RESULT_WON, //! User failed to complete game (single player game) /** eg: exhausted all rows in mastermind (mastermind_who_won()) */ RESULT_LOST, //! Anything else RESULT_MISC } ResultType; //! The return type of game_event_handler() typedef enum { INPUT_ILLEGAL = -1, INPUT_NOTYET = 0, INPUT_LEGAL = 1 } InputType; //! The move and all the info. associated with it typedef struct { //! The move. /** This is a sequence of the form [x_1, y_1, v_1, x_2, y_2, v_2, ... x_n, y_n, v_n, -1] where [x_i, y_i, v_i] says that the value of the square (x_i, y_i) should change to v_i. */ byte *move; //! (Only client side) the rendering info. associated with this move int *rmove; //! Any game-specific custom information associated with this move. /** The purpose of having this is that it will be sent from UI to engine and engine to UI */ gchar *custom; //! (Only client side) Help message gchar *help_message; //! The human-readable version of the move eg: "e4" in chess gchar *human_readable; }MoveInfo; //! the completion status of the game /** This is the type of #game_doc_about_status. At the moment it only matters if the status is STATUS_COMPLETE or not */ typedef enum { //! don't use this STATUS_NONE, //! unplayable STATUS_UNPLAYABLE, //! partial STATUS_PARTIAL, //! complete STATUS_COMPLETE } CompletionStatus; //! values of #game_file_label and #game_rank_label typedef enum { FILERANK_LABEL_TYPE_NONE, FILERANK_LABEL_TYPE_NUM, FILERANK_LABEL_TYPE_ALPHA, FILERANK_LABEL_TYPE_ALPHA_CAPS } FILERANK_LABEL_TYPE; #define FILERANK_LABEL_TYPE_MASK 0x3 //! if #game_file_label or #game_rank_label is ORed with this the order of file/rank labels will be reversed #define FILERANK_LABEL_DESC (1 << 2) //! The return value of game_eval() should be larger than GAME_EVAL_INFTY in absolute value to indicate that the game is over. #define GAME_EVAL_INFTY (1.0e10) //! Indicates whether the square (x, y) is legal #define ISINBOARD(x,y) ((x)>=0 && (y)>=0 && (x)x #define GAME_DEFAULT_URL(x) "http://gtkboard.sourceforge.net/games" struct _Game; //! The Game struct gives essential information about the game /** Only information that must be provided by every game is declared here. Of course, there are many other variables and functions that can be used to customize the game. These must be set in the function game_init(). The good thing is that you can get your game running first and only use new features as you need them.*/ typedef struct _Game { //! The size of each square on the board in pixels int cell_size; //! The number of rows in the board int board_wid; //! The number of columns in the board int board_heit; //! The number of types of pieces that the game uses /** (12 for chess (chess.c), for instance -- 6 white and 6 black). The maximum value is 127. In several games, like mastermind (mastermind.c), the value of num_pieces is more than the actual number of pieces that the user sees. This is because several logical pieces are mapped to the same image and the value of the piece is used to encode some state information about that square.*/ int num_pieces; //! An array which gives the colors for the squares of the board char *colors; //! The initial position int * init_pos; //! An array of pixmaps representing the pieces char *** pixmaps; //! Name of the game char *name; //! Which group does this game belong to. /** In the menu, the game will be nested within this group. Use NULL for no group. */ char *group; //! A pointer to the function that will be called when initializing the game void (*game_init) (struct _Game *); }Game; //! How to render a square typedef enum { //! Just use the default pixmap RENDER_NONE, //! Draw a colored border around the square. See #game_highlight_colors RENDER_HIGHLIGHT1, RENDER_HIGHLIGHT2, RENDER_HIGHLIGHT3, //! Shade the square. Not yet implemented RENDER_SHADE1, RENDER_SHADE2, RENDER_SHADE3, //! Make the square look like a button RENDER_BUTTONIZE, //! Hide the square (show the background color) RENDER_HIDE, //! Use a different pixmap. /** The pixmap must be specified in the 8-15th bits, i.e, if you want to use the pixmap of the piece p, then you must set the render value to p << 8 | RENDER_REPLACE */ RENDER_REPLACE, } RenderType; //! A struct describing a position in a game. typedef struct { //! Which game is going on Game *game; //! An array representing the pieces of each square. /** The size of the array is #board_wid * #board_heit. For each pair (x, y), board[y * board_wid + x] is a value between 0 and num_pieces inclusive which gives the piece at the square (x, y). 0 always indicates an empty square. The origin of the coordinates is at the bottom left. */ byte *board; //! Additional information about how to render the square /** For example, highlight, shade, hide etc. See #RenderType*/ /* A note on why this is int* while board is byte*: the latter will be used by the engine, and so size is important. But render can be big because it will be used only by the engine which will have only once instance of Pos*/ int *render; //! Which player has the move. Player player; //! State information required to completely describe the position /** Some games are stateful, which means that the position can not be completely described by the state of the board alone. In chess (chess.c), for example, we need to keep track of whether either player can castle, etc. The variable state points to a struct which is defined by the game. It is modified using the function game_newstate().*/ void *state; //! Client-side state information () (currently unused) void *ui_state; //! The number of moves that have been made to reach the current position. /** In two-player games, it represents the number of ply.*/ int num_moves; //! (engine only) If this position has been generated during search, how deep from the root node is it. int search_depth; }Pos; //! If you have implemented more than one evaluation function then you put them in an array of structs of type HeurTab. Its unlikely that you'll need to know about this. See #game_htab for more details. typedef struct { //! The user-visible name of the evaluation function. char *name; //! A pointer to the function. See game_eval(). float (*eval_fun) (Pos *, int); //! A description of the function so that the user can know what its about. char *comment; //! Currently unused. char *args; }HeurTab; typedef struct { //! The name to show in the Levels menu char *name; //! Pointer to the Game (Each level is treated as a separate Game) Game *game; }GameLevel; //! A pointer to the game's evaluation function. /** Only for two player games. It must be implemented if you want the computer to be able to play the game. */ extern ResultType (*game_eval) (Pos *pos, Player player, float *eval); //! A pointer to the game's incremental evaluation function. /** Only for two player games. This is an advanced feature: if you feel that being forced to look at the whole board for each call to game_eval is inefficient, you can write an incremental evaluation function which takes a position and the move being made and returns the difference in the eval of the original and final positions. Note that you still need to implement game_eval even if you implement this function. Since premature optimization is the root of all evil, it is highly recommended that you get your game working and stable before you think of implementing this function :)*/ extern ResultType (*game_eval_incr) (Pos *pos, byte *move, float *eval); //! Should we use the incr eval function extern gboolean (*game_use_incr_eval) (Pos *pos); //! A function to search and return the best move - for games for which minimax is not appropriate extern void (*game_search) (Pos *pos, byte **move); //! A pointer to the game's move generation function. /** Only for two player games. It must be implemented if you want the computer to be able to play the game. It returns a list of moves possible in a given position. See move.h for documentation of the MOVLIST format. Plot4's movegen function (plot4_movegen()) is a good example of a simple movegen function. The move list (array) should be malloc'd inside this function and will be freed by the caller. */ extern byte * (*game_movegen) (Pos *); //! This takes a mouse click and returns the move that it corresponds to. /** @param pos @param x x coordinate of the square that was clicked @param y y coordinate of the square that was clicked @param type type of event @param to_play whose turn is it @param movp a pointer to store the move in if the move is valid @param returns: >0 if move is valid, 0 if more information is needed, -1 if move is illegal // TODO: there should be an enum for this pentaline_getmove() is a good example of a minimal getmove function. */ extern int (*game_getmove) (Pos *pos, int x, int y, GtkboardEventType type, Player to_play, byte ** movp, int **renderp); //! The all-in-one function that makes game_getmove and game_getmove_kb deprecated /** */ extern InputType (*game_event_handler) (Pos *pos, GtkboardEvent *event, MoveInfo *move_info_p); //! Takes a keypress and returns the move that it corresponds to. /** @param pos @param key the key that the user pressed @param to_play @param movp a pointer to the move. The game must allocate memory for this (statically). @param rmovp pointer to rendering change */ extern int (*game_getmove_kb) (Pos *pos, int key, byte ** movp, int **rmovp); //! Checks if the game is over, and if so, who has won /** This function is called after every move, both for single player and two player games. @param scorep pointer to the "score". If game_who_won sets this, the score will be displayed in the score field of the statusbar. */ extern ResultType (*game_who_won) (Pos *pos, Player player, char ** scorep); //! Pointer to function which sets the game's initial position. /** In some games such as maze (maze.c), the initial position is not constant but randomly generated. Such functions use game_set_init_pos. The function is expected to set the value of pos->board.*/ extern void (*game_set_init_pos) (Pos *pos); //! Sets the initial state of the rendering hints extern void (*game_set_init_render) (Pos *pos); //! The rendering hints associated with the move extern void (*game_get_render) (Pos *pos, byte *move, int **rmovp); //! Returns the pixmap for a piece. /** In many games, the pixmaps are generated at runtime (see aaball.c). Such games use this function. The second argument color is 0 or 1 depending on whether the piece will be shown on a light square or a dark square. If your pixmap is antialiased you need this.*/ extern char ** (*game_get_pixmap) (int piece, int color); //! Same as game_get_pixmap() but returns a rgbmap instead of pixmap. extern guchar * (*game_get_rgbmap) (int piece, int color); //! Pointer to animation callback which will be called periodically extern int (*game_animate) (Pos *pos, byte ** movp); //! Pointer to function which will compute the new state from the current position and the move /** The returned state should be a pointer to a statically declared structure. */ extern void * (*game_newstate) (Pos *pos, byte * move); //! Called at the end of every game. extern void (*game_free) (); //! The default value of game_set_init_pos() //extern void game_set_init_pos_def (Pos *); //! This is called after each move the user completes /** The user may have made some clicks which do not complete a move and then clicked the back button, for example. Then the game must forget the saved clicks.*/ extern void (*game_reset_uistate) (); //! Globals for convenience. extern int board_wid, board_heit, cell_size, num_pieces; //! Are we a single player game or a two-player game? DEFAULT: FALSE. extern int game_single_player; //! Is the user allowed to undo move and still get on the highscores (only for single player games; default: FALSE) extern gboolean game_allow_undo; //! Determines how frequently to call the game's animation callback function (game_animate()). Default: 0. extern int game_animation_time; //! Whether or not to consider animations "moves". Default: TRUE. extern gboolean game_animation_use_movstack; //! Are we a stateful game. Default: FALSE extern gboolean game_stateful; //! Should the lines between the rows and columns be drawn. Default: FALSE. /** Example of game which draws boundaries: pentaline (pentaline.c) Example of game which doesn't draw boundaries: memory (memory.c) */ extern gboolean game_draw_cell_boundaries; //! Colors to use for highlighting squares. extern char *game_highlight_colors; //! Should we allow the user to move back and forward in the game. Default: TRUE /** You should not set this to FALSE unless you have a compelling reason to do so. Don't worry about the user cheating and getting a highscore that they don't deserve -- if the user ever clicks back, highscores will be disabled for that game :-) Currently only tetris (tetris.c) sets this to FALSE, because of some complex client-server related issues.*/ extern gboolean game_allow_back_forw; //! Should the user's clock start ticking as soon as the game is selected. Default: FALSE. /** Doesn't make a lot of sense for two player games. In games like maze (maze.c), the user can solve the maze without even making a move, so it would be unfair to let them look at the maze without starting the clock. */ extern gboolean game_start_immediately; //! (Only for two player games) Is Settings->Flip Board active. For single player games it is always inactive. extern gboolean game_allow_flip; //! How to display names of rows and columns. This should be of type FILERANK_LABEL_TYPE, optionally ORed with FILERANK_LABEL_DESC extern gboolean game_file_label, game_rank_label; //! Size of the Pos::state structure /** For stateful games, you need to specify the size of the state structure (as defined by the sizeof operator.) */ extern int game_state_size; extern GameLevel *game_levels; //! Array of structs representing evaluation functions. extern HeurTab *game_htab; //! The text to be shown in the About dialog for the game (Help->GameName->About). extern gchar *game_doc_about; //! The text to be shown in the Rules dialog for the game (Help->GameName->Rules). extern gchar *game_doc_rules; //! The text to be shown in the Strategy dialog for the game (Help->GameName->Strategy). extern gchar *game_doc_strategy; //! The text to be shown in the History dialog for the game (Help->GameName->History). extern gchar *game_doc_history; //! Completion status of the game extern CompletionStatus game_doc_about_status; //! User visible labels for white and black extern gchar *game_white_string, *game_black_string; //! Background image for the board extern char ** game_bg_pixmap; //! The columns that will be shown in the highscores. /** SCORE_FIELD_NONE acts as a NULL terminator for the #game_score_fields array. Note that highscores make sense only for single player games.*/ typedef enum { SCORE_FIELD_NONE, SCORE_FIELD_RANK, SCORE_FIELD_USER, SCORE_FIELD_SCORE, SCORE_FIELD_TIME, SCORE_FIELD_DATE, SCORE_FIELD_MISC1, SCORE_FIELD_MISC2 } SCORE_FIELD; //! Used to override the default highscore columns. /** By default, the columns shown in the highscores are User, Score, Time and Date. This sequence can be overridden by specifying a game_score_fields array terminated by #SCORE_FIELD_NONE. #SCORE_FIELD_MISC1 and #SCORE_FIELD_MISC2 are used to specify some field which is none of the 5 available by default. The MISC functionality is currently unimplemented */ extern SCORE_FIELD * game_score_fields; //! The names of the column titles in the highscores. /** If you set #game_score_fields you also have to set game_score_field_names which gives the titles to use for the respective columns. */ extern gchar **game_score_field_names; //! Pointer to the comparison function used to order highscores. /** Highscores work by applying the comparison function on the score string returned by game_who_won(). Three defaults are availble (see below), one of which will likely fit what you want. If not you can write your own function and set this pointer to it.*/ extern int (*game_scorecmp) (gchar *, int, gchar*, int); //! Default highscore comparison function: decreasing order of Score field. extern int (*game_scorecmp_def_dscore) (gchar *, int, gchar*, int); //! Default highscore comparison function: increasing order of Score field. extern int (*game_scorecmp_def_iscore) (gchar *, int, gchar*, int); //! Default highscore comparison function: increasing order of Time field. extern int (*game_scorecmp_def_time) (gchar *, int, gchar*, int); #endif gtkboard/src/hash.c000066400000000000000000000152721153150217100145340ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ #include #include #include #include #include #include "move.h" /** \file hash.c \brief hash table which implements transposition tables. A hash entry stores the following information: value of the node depth to which it has been explored verification code (secondary hash value) if there is a collision and the table is less than (say) 75% full, search sequentially till an empty cell is found otherwise just kick out the previous entry (if depth of the current entry is smaller than the earlier entry, search sequentially till a shallower node is found and kick it out) When used with DFID, if l levels were completed on the previous move, l-2 levels (ply) will be completed almost instantly on this move. Even if we are unable to complete level l on this move, it mattereth not, for the partial information will be there in the hash table and will be useful for the next move. */ #ifndef uint #define uint unsigned #endif #ifndef byte #define byte gint8 #endif // FIXME: write a function called debug or something instead of doing it this way extern int opt_verbose; /* TODO: use a secondary hash fn of 16 bits to use as increment in case of collision. Also use it for 16 of the 48 bits of the check field */ /* TODO: hash the state also. games like chess will need it */ typedef struct { guint32 check; /* should this be 32 or 64 ? */ /* hmm.. maybe 48: that would fit nicely into 3 words */ float eval; int num_moves:16; int depth:8; int free:1; int stale:1; byte *best_move; } hash_t; static int hash_table_size = 1 << 16; static int hash_table_max = 3 * 1 << 14; static int num_hash_coeffts = 1024; static uint *hash_coeffts = NULL; static hash_t *hash_table = NULL; static int hash_filled = 0; static int hash_eval_hits = 0, hash_eval_misses = 0; static int hash_move_hits = 0, hash_move_misses = 0; static void hash_init () /* malloc the stuff */ // FIXME: Do we need to free this? { int i; if (hash_coeffts) return; hash_coeffts = (uint *) malloc (num_hash_coeffts * sizeof (uint)); assert (hash_coeffts); for (i=0; i= hash_table_max) continue; hash_filled++; break; } if (hash_table[idx].stale) break; /* even if the same position is already there it should be overwritten with the new depth */ if (hash_table[idx].check == check) break; if (hash_filled >= hash_table_max && depth > hash_table[idx].depth) break; } if (hash_table[idx].free == 0 && hash_table[idx].best_move) free (hash_table[idx].best_move); hash_table[idx].free = 0; hash_table[idx].check = check; hash_table[idx].num_moves = num_moves; hash_table[idx].eval = eval; hash_table[idx].depth = depth; hash_table[idx].stale = 0; hash_table[idx].best_move = (move ? movdup (move) : NULL); } int hash_get_eval (byte *pos, int poslen, int num_moves, int depth, float *evalp) /* get the eval of a pos if it is there in the hash table retval = was it found eval = answer*/ { uint idx = get_hash (pos, poslen) % hash_table_size; uint check = get_check (pos, poslen); for (; hash_table[idx].free == 0; idx = (idx+1) % hash_table_size) { if (hash_table[idx].check == check) /* found it */ { /* don't compare 2 evals at different depths*/ if (hash_table[idx].depth == depth && hash_table[idx].num_moves == num_moves) { if (evalp) *evalp = hash_table[idx].eval; hash_table[idx].stale = 0; hash_eval_hits++; return 1; } break; } } /* found a free slot before encountering this pos */ hash_eval_misses++; return 0; } byte * hash_get_move (byte *pos, int poslen, int num_moves) { uint idx = get_hash (pos, poslen) % hash_table_size; uint check = get_check (pos, poslen); for (; hash_table[idx].free == 0; idx = (idx+1) % hash_table_size) { if (hash_table[idx].check == check) /* found it */ { if (hash_table[idx].num_moves == num_moves) { hash_table[idx].stale = 0; hash_move_hits++; return hash_table[idx].best_move; } break; } } /* found a free slot before encountering this pos */ hash_move_misses++; return NULL; } void hash_clear () { int i; for (i=0; i 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 USA */ #include #include #include #include #include #include "game.h" #include "aaball.h" #define HIQ_CELL_SIZE 54 #define HIQ_NUM_PIECES 5 #define HIQ_BOARD_WID 7 #define HIQ_BOARD_HEIT 7 #define abs(x) ((x) < 0 ? -(x):(x)) char hiq_colors[6] = {170, 170, 170, 170, 170, 170}; int hiq_init_pos [HIQ_BOARD_WID*HIQ_BOARD_HEIT] = { 3 , 3 , 1 , 1 , 1 , 3 , 3 , 3 , 3 , 1 , 1 , 1 , 3 , 3 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 4 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 3 , 3 , 1 , 1 , 1 , 3 , 3 , 3 , 3 , 1 , 1 , 1 , 3 , 3 , }; #define HIQ_EMPTY 0 #define HIQ_RP 1 #define HIQ_BP 2 #define HIQ_UNUSED 3 #define HIQ_HOLE 4 static char * grey_square_54_xpm [] = { "54 54 1 1", ". c #d7d7d7", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", "......................................................", }; void hiq_init (); Game Hiq = { HIQ_CELL_SIZE, HIQ_BOARD_WID, HIQ_BOARD_HEIT, HIQ_NUM_PIECES, hiq_colors, hiq_init_pos, NULL, "Hiq", "Logic puzzles", hiq_init}; typedef struct { int score; }Hiq_state; InputType hiq_event_handler (Pos *pos, GtkboardEvent *event, MoveInfo *move_info_p); ResultType hiq_who_won (Pos *, Player , char **); char ** hiq_get_pixmap (int , int); void hiq_reset_uistate (); void hiq_init () { game_single_player = 1; // game_getmove = hiq_getmove; game_event_handler = hiq_event_handler; game_who_won = hiq_who_won; game_get_pixmap = hiq_get_pixmap; game_who_won = hiq_who_won; game_scorecmp = game_scorecmp_def_iscore; game_reset_uistate = hiq_reset_uistate; game_doc_about_status = STATUS_COMPLETE; game_doc_about = "Hiq\n" "Single player game\n" "Status: Fully implemented\n" "URL: "GAME_DEFAULT_URL ("hiq"); game_doc_rules = "The objective is to eliminate as many balls as possible.\n" "\n" "Each move consists of clicking on a filled square and then clicking on an empty square with exactly one square in between, which must be filled. The ball on the original square goes to the empty square and the middle ball disappears. Diagonal moves are not allowed.\n" "\n" "If you have managed to leave only a single ball remaining then try the problem of leaving only a single ball on the center square.\n"; game_doc_strategy = "Get the balls out of the edges as soon as possible."; } char ** hiq_get_pixmap (int idx, int color) { int bg, i, fg, rad, grad; char *colors; static char pixbuf[HIQ_CELL_SIZE * (HIQ_CELL_SIZE+1)]; if (idx == HIQ_UNUSED) return grey_square_54_xpm; colors = hiq_colors; if (color == BLACK) colors += 3; for(i=0, bg=0;i<3;i++) { int col = colors[i]; if (col<0) col += 256; bg += col * (1 << (16-8*i));} fg = (idx == HIQ_RP ? 0xff << 16 : 0xd0d0d0); rad = (idx == HIQ_RP ? 16 : 18); grad = (idx == HIQ_RP ? 24 : 36); return pixmap_ball_gen(54, pixbuf, fg, bg, rad, grad); } ResultType hiq_who_won (Pos *pos, Player player, char **commp) { static char comment [32]; int i, j, k; int found = 0, count = 0; int incx [] = { 0, 0, -1, 1 }; int incy [] = { -1, 1, 0, 0 }; for (i=0; iboard [j * board_heit + i] != HIQ_RP) continue; count++; for (k=0; k<4; k++) { int x = i + incx[k]; int y = j + incy[k]; if (x < 0 || y < 0 || x >= board_wid || y >= board_heit) continue; if (pos->board [y * board_heit + x] != HIQ_RP) continue; x += incx[k]; y += incy[k]; if (x < 0 || y < 0 || x >= board_wid || y >= board_heit) continue; if (pos->board [y * board_heit + x] != HIQ_HOLE) continue; found = 1; } } if (!found) { snprintf (comment, 32, "%s %d %s left", count == 1 ? "Congrats!" : "Game over.", count, count == 1 ? "ball" : "balls"); *commp = comment; return RESULT_WON; } snprintf (comment, 32, "%d balls left", 32 - pos->num_moves); *commp = comment; return RESULT_NOTYET; } static int oldx = -1, oldy = -1; void hiq_reset_uistate () { oldx = oldy = -1; } InputType hiq_event_handler (Pos *pos, GtkboardEvent *event, MoveInfo *move_info_p) { static byte move[10]; static int rmove[10]; int diffx, diffy, x, y; x = event->x; y = event->y; if (event->type != GTKBOARD_BUTTON_RELEASE) return INPUT_NOTYET; if (oldx == -1) { if (hiq_init_pos[y * board_wid + x] == HIQ_UNUSED || pos->board [y * board_wid + x] == HIQ_HOLE) { move_info_p->help_message = "You must click on a ball."; return INPUT_ILLEGAL; } oldx = x; oldy = y; rmove[0] = x; rmove[1] = y; rmove[2] = RENDER_HIGHLIGHT1; rmove[3] = -1; move_info_p->rmove = rmove; return INPUT_NOTYET; } rmove[0] = oldx; rmove[1] = oldy; rmove[2] = RENDER_NONE; rmove[3] = -1; move_info_p->rmove = rmove; if (hiq_init_pos[y * board_wid + x] == HIQ_UNUSED) { oldx = oldy = -1; move_info_p->help_message = "You must jump over a ball."; return INPUT_ILLEGAL; } if (x == oldx && y == oldy) { oldx = -1; oldy = -1; return INPUT_NOTYET; } if (pos->board [y * board_wid + x] != HIQ_HOLE) { oldx = oldy = -1; move_info_p->help_message = "You must click on an empty square."; return INPUT_ILLEGAL; } diffx = abs (x - oldx); diffy = abs (y - oldy); if ((diffx != 2 && diffy != 2) || diffx * diffy != 0) { oldx = oldy = -1; move_info_p->help_message = "You must jump over a ball."; return INPUT_ILLEGAL; } move[0] = oldx; move[1] = oldy; move[2] = HIQ_HOLE; move[3] = x; move[4] = y; move[5] = pos->board [oldy * board_wid + oldx]; move[6] = (x+oldx)/2; move[7] = (y+oldy)/2; move[8] = HIQ_HOLE; move[9] = -1; oldx = -1; oldy = -1; move_info_p->move = move; return INPUT_LEGAL; } gtkboard/src/infiltrate.c000066400000000000000000000126731153150217100157540ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ #include #include #include #include #include "game.h" #include "aaball.h" #define INFILTRATE_CELL_SIZE 40 #define INFILTRATE_NUM_PIECES 2 #define INFILTRATE_BOARD_WID 5 #define INFILTRATE_BOARD_HEIT 5 #define INFILTRATE_EMPTY 0 #define INFILTRATE_WP 1 #define INFILTRATE_BP 2 char infiltrate_colors[] = {180, 180, 180, 200, 200, 200}; int infiltrate_init_pos[] = { 2 , 2 , 2 , 2 , 2 , 2 , 0 , 0 , 0 , 2 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , }; static int infiltrate_max_moves = 200; void infiltrate_init (); int infiltrate_getmove (Pos *, int, int, GtkboardEventType, Player, byte **, int **); //ResultType infiltrate_who_won (byte *, int, char **); byte *infiltrate_movegen (Pos *); ResultType infiltrate_eval (Pos *, Player, float *); guchar * infiltrate_get_rgbmap (int idx, int color); void infiltrate_reset_uistate (); Game Infiltrate = { INFILTRATE_CELL_SIZE, INFILTRATE_BOARD_WID, INFILTRATE_BOARD_HEIT, INFILTRATE_NUM_PIECES, infiltrate_colors, infiltrate_init_pos, NULL, "Infiltrate", NULL, infiltrate_init}; void infiltrate_init () { game_getmove = infiltrate_getmove; game_movegen = infiltrate_movegen; //game_who_won = infiltrate_who_won; game_eval = infiltrate_eval; game_get_rgbmap = infiltrate_get_rgbmap; game_reset_uistate = infiltrate_reset_uistate; game_doc_about_status = STATUS_PARTIAL; game_doc_about = "Infiltrate\n" "Two player game\n" "Status: Partially implemented\n" "URL: "GAME_DEFAULT_URL ("infiltrate"); game_doc_rules = "The pieces move diagonally, one square at a time. The objective is to get all your pieces to the starting squares of your opponent's pieces.\n"; } byte * infiltrate_movegen (Pos *pos) { int i, j, diffx, diffy; byte movbuf [256]; byte *movlist, *mp = movbuf; byte *board = pos->board; Player player = pos->player; for (i=0; iboard [j * board_wid + i]) sum += j; *eval = sum; return RESULT_NOTYET; } static int oldx = -1, oldy = -1; void infiltrate_reset_uistate () { oldx = -1, oldy = -1; } int infiltrate_getmove (Pos *pos, int x, int y, GtkboardEventType type, Player to_play, byte **movp, int ** rmovep) { static byte move[10]; byte *mp = move; byte *board = pos->board; if (type != GTKBOARD_BUTTON_RELEASE) return 0; if (oldx < 0) { int val = board [y * board_wid + x]; if ((val != INFILTRATE_BP && !(to_play == WHITE)) || (val != INFILTRATE_WP && !(to_play == BLACK))) return -1; oldx = x; oldy = y; return 0; } else { int diffx, diffy; diffx = x - oldx; diffy = y - oldy; if (abs (diffx) != 1 || abs (diffy) != 1) { oldx = -1; oldy = -1; return -1; } if (board [y * board_wid + x] != INFILTRATE_EMPTY) { oldx = -1; oldy = -1; return -1; } *mp++ = oldx; *mp++ = oldy; *mp++ = 0; *mp++ = x; *mp++ = y; *mp++ = board [oldy * board_wid + oldx]; *mp++ = -1; *movp = move; oldx = oldy = -1; return 1; } } guchar *infiltrate_get_rgbmap (int idx, int color) { static guchar rgbbuf[3*INFILTRATE_CELL_SIZE*INFILTRATE_CELL_SIZE]; int fg, bg, i; char *colors; colors = infiltrate_colors; fg = (idx == INFILTRATE_WP ? 0xffffff : 0x0000ff); if (color == BLACK) colors += 3; for(i=0, bg=0;i<3;i++) { int col = colors[i]; if (col<0) col += 256; bg += col * (1 << (16-8*i));} rgbmap_ball_shadow_gen(INFILTRATE_CELL_SIZE, rgbbuf, fg, bg, 8, 24, 2); return rgbbuf; } /* char ** infiltrate_get_pixmap (int idx, int color) { int bg; int i; static char pixbuf[INFILTRATE_CELL_SIZE * (INFILTRATE_CELL_SIZE+1)]; for(i=0, bg=0;i<3;i++) { int col = infiltrate_colors[i]; if (col<0) col += 256; bg += col * (1 << (16-8*i));} return pixmap_ball_gen (INFILTRATE_CELL_SIZE, pixbuf, idx == INFILTRATE_WP ? 0xffffff : 0x0000ff, bg, 8, 24); } */ gtkboard/src/knights.c000066400000000000000000000242561153150217100152620ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ #include #include #include #include #include "game.h" #include "gdk/gdkkeysyms.h" #include "../pixmaps/chess.xpm" #include "../pixmaps/misc.xpm" #define KNIGHTS_CELL_SIZE 54 #define KNIGHTS_NUM_PIECES 3 #define KNIGHTS_BOARD_WID 7 #define KNIGHTS_BOARD_HEIT 7 #define KNIGHTS_EMPTY 0 #define KNIGHTS_CLOSED 1 #define KNIGHTS_WN 2 #define KNIGHTS_BN 3 char knights_colors[] = {200, 200, 130, 0, 140, 0}; int knights_initpos [KNIGHTS_BOARD_WID*KNIGHTS_BOARD_HEIT] = { 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 , 2 , }; char ** knights_pixmaps [] = { grey_square_54_xpm, chess_wn_54_xpm, chess_bn_54_xpm, }; typedef struct { int num_pauses; }Knights_state; static int knights_getmove (Pos *, int, int, GtkboardEventType, Player, byte **, int **); static int knights_getmove_kb (Pos *, int, byte ** , int **); void knights_init (); static ResultType knights_who_won (Pos *, Player, char **); static ResultType knights_eval (Pos *, Player, float *eval); static ResultType knights_eval_real (Pos *, Player, float *eval, gboolean); static byte * knights_movegen (Pos *); static void *knights_newstate (Pos *, byte *); Game Knights = { KNIGHTS_CELL_SIZE, KNIGHTS_BOARD_WID, KNIGHTS_BOARD_HEIT, KNIGHTS_NUM_PIECES, knights_colors, knights_initpos, knights_pixmaps, "Balanced Joust", "Nimlike games", knights_init}; void knights_init () { game_getmove = knights_getmove; game_getmove_kb = knights_getmove_kb; game_who_won = knights_who_won; game_eval = knights_eval; game_movegen = knights_movegen; game_stateful = TRUE; game_state_size = sizeof (Knights_state); game_newstate = knights_newstate; game_draw_cell_boundaries = TRUE; game_file_label = FILERANK_LABEL_TYPE_ALPHA; game_rank_label = FILERANK_LABEL_TYPE_NUM | FILERANK_LABEL_DESC; game_doc_about_status = STATUS_COMPLETE; game_doc_rules = "Two players take turns in moving their respective knights on a 7x7 chessboard. Squares that have been visited are considered \"eaten\" and cannot be revisited. When the knights are attacking each other, the player to move can pass by hitting Space. If both players pass in the same position, the game is a draw. The goal is to be the last player to make a move."; game_doc_strategy = "As the game progresses, there will eventually appear a single square, which, if eaten, will partition the board into two, such that a knight cannot move from one part to the other. The player who eats this square is often at an advantage because they can choose which part to move to."; } static int incx[] = { -2, -2, -1, -1, 1, 1, 2, 2}; static int incy[] = { -1, 1, -2, 2, -2, 2, -1, 1}; static void *knights_newstate (Pos *pos, byte *move) { static Knights_state state; if (!pos->state) { state.num_pauses = 0; return &state; } if (move[0] == -1) state.num_pauses = ((Knights_state *)pos->state)->num_pauses + 1; else state.num_pauses = 0; return &state; } static void get_cur_pos (byte *board, Player player, int *x, int *y) { int i=0, j=0; for (i=0; iboard[j * board_wid + i] == KNIGHTS_WN) wx = i, wy = j; if (pos->board[j * board_wid + i] == KNIGHTS_BN) bx = i, by = j; } if (abs ((wx - bx) * (wy - by)) != 2) return -1; *movp = move; return 1; } int knights_getmove (Pos *pos, int x, int y, GtkboardEventType type, Player player, byte **movp, int **rmovp) { int curx = -1, cury = -1; static byte move[128]; byte *mp = move; if (type != GTKBOARD_BUTTON_RELEASE) return 0; if (pos->board[y * board_wid + x] == (player == WHITE ? KNIGHTS_WN : KNIGHTS_BN)) return 0; if (pos->board[y * board_wid + x] != KNIGHTS_EMPTY) return -1; get_cur_pos (pos->board, player, &curx, &cury); if (abs ((curx - x) * (cury - y)) != 2) return -1; *mp++ = x; *mp++ = y; *mp++ = (player == WHITE ? KNIGHTS_WN : KNIGHTS_BN); *mp++ = curx; *mp++ = cury; *mp++ = KNIGHTS_CLOSED; *mp++ = -1; *movp = move; return 1; } byte * knights_movegen (Pos *pos) { int i, j, k; byte movbuf [64]; byte *movlist, *movp = movbuf; Player player = pos->player; get_cur_pos (pos->board, player, &i, &j); for (k=0; k<8; k++) { int x = i + incx[k], y = j + incy[k]; int val; if (!ISINBOARD (x, y)) continue; if ((val = pos->board[y * board_wid + x]) == KNIGHTS_EMPTY) { *movp++ = i; *movp++ = j; *movp++ = KNIGHTS_CLOSED; *movp++ = x; *movp++ = y; *movp++ = (player == WHITE ? KNIGHTS_WN : KNIGHTS_BN); *movp++ = -1; } else if (val == KNIGHTS_WN || val == KNIGHTS_BN) { *movp++ = -1; } } *movp++ = -2; movlist = (byte *) (malloc (movp - movbuf)); memcpy (movlist, movbuf, (movp - movbuf)); return movlist; } static gboolean eval_disconnected (byte *theboard) { byte board[KNIGHTS_BOARD_WID * KNIGHTS_BOARD_HEIT]; int stack[KNIGHTS_BOARD_WID * KNIGHTS_BOARD_HEIT]; int stack_top = 0; int i, curx, cury, x, y; for (i=0; i 0) { stack_top--; curx = stack[stack_top] % board_wid; cury = stack[stack_top] / board_wid; for (i=0; i<8; i++) { x = curx + incx[i]; y = cury + incy[i]; if (!ISINBOARD (x, y)) continue; if (board[y * board_wid + x] == KNIGHTS_BN) return FALSE; if (board[y * board_wid + x] != KNIGHTS_EMPTY) continue; board[y * board_wid + x] = KNIGHTS_CLOSED; stack[stack_top++] = y * board_wid + x; } } return TRUE; } // exhaustive DFS to solve the position exactly static int eval_max_path_len (byte *theboard, Player player) { byte board[KNIGHTS_BOARD_WID * KNIGHTS_BOARD_HEIT]; int stack [KNIGHTS_BOARD_WID * KNIGHTS_BOARD_HEIT]; int current [KNIGHTS_BOARD_WID * KNIGHTS_BOARD_HEIT]; int stack_top = 0; int i, curx, cury, x, y; int max_len = 0; for (i=0; i= 0) { if (stack_top > max_len) max_len = stack_top; i = current[stack_top]++; if (i == 8) { stack_top--; continue; } curx = stack[stack_top] % board_wid; cury = stack[stack_top] / board_wid; x = curx + incx[i]; y = cury + incy[i]; if (!ISINBOARD (x, y)) continue; if (board[y * board_wid + x] != KNIGHTS_EMPTY) continue; board[y * board_wid + x] = KNIGHTS_CLOSED; stack_top++; current[stack_top] = 0; stack[stack_top] = y * board_wid + x; } return max_len; } // We may want to continue the game even when a result is apparent. The // parameter strict is for this. who_won() sets it to TRUE and eval() to FALSE. static ResultType knights_eval_real (Pos *pos, Player player, float *eval, gboolean strict) { int i, j, k; int wcnt = 0, bcnt = 0; static int disconn_cnt [2 * KNIGHTS_BOARD_WID * KNIGHTS_BOARD_HEIT] = {0}; static int total_cnt [2 * KNIGHTS_BOARD_WID * KNIGHTS_BOARD_HEIT] = {0}; if (pos->state && ((Knights_state *)pos->state)->num_pauses >= 2) { *eval = 0; return RESULT_TIE; } if (!strict && eval_disconnected (pos->board)) { int wlen = 0, blen = 0; disconn_cnt [pos->num_moves]++; total_cnt[pos->num_moves]++; wlen = eval_max_path_len (pos->board, WHITE); blen = eval_max_path_len (pos->board, BLACK); *eval = 2 * (wlen - blen) + (player == WHITE ? -1 : 1); if (wlen > blen) return RESULT_WHITE; else if (wlen < blen) return RESULT_BLACK; else return player == WHITE ? RESULT_BLACK : RESULT_WHITE; } total_cnt[pos->num_moves]++; // if (total_cnt[pos->num_moves] % 10000 == 0) printf ("Ply: %d;\t total: %d;\t disc: %d\n", pos->num_moves, total_cnt[pos->num_moves], disconn_cnt[pos->num_moves]); get_cur_pos (pos->board, WHITE, &i, &j); for (k=0; k<8; k++) { int x = i + incx[k], y = j + incy[k]; if (!ISINBOARD (x, y)) continue; if (pos->board[y * board_wid + x] == KNIGHTS_EMPTY) wcnt++; } get_cur_pos (pos->board, BLACK, &i, &j); for (k=0; k<8; k++) { int x = i + incx[k], y = j + incy[k]; if (!ISINBOARD (x, y)) continue; if (pos->board[y * board_wid + x] == KNIGHTS_EMPTY) bcnt++; } *eval = wcnt - bcnt; if (player == WHITE && wcnt == 0) { if (bcnt == 0) *eval -= 1; *eval *= GAME_EVAL_INFTY; return RESULT_BLACK; } if (player == BLACK && bcnt == 0) { if (wcnt == 0) *eval += 1; *eval *= GAME_EVAL_INFTY; return RESULT_WHITE; } return RESULT_NOTYET; } ResultType knights_eval (Pos *pos, Player player, float *eval) { return knights_eval_real (pos, player, eval, FALSE); } gtkboard/src/kttour.c000066400000000000000000000163301153150217100151350ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ #include #include #include #include #include #include "game.h" #include "aaball.h" #include "../pixmaps/chess.xpm" #include "../pixmaps/misc.xpm" #define KTTOUR_CELL_SIZE 54 #define KTTOUR_NUM_PIECES 4 #define KTTOUR_BOARD_WID 8 #define KTTOUR_BOARD_HEIT 8 #define KTTOUR_EMPTY 0 #define KTTOUR_CUR 1 #define KTTOUR_START 2 #define KTTOUR_USED 3 #define KTTOUR_HINT 4 char kttour_colors[6] = {200, 200, 160, 200, 200, 160}; void kttour_init (); Game Kttour = { KTTOUR_CELL_SIZE, KTTOUR_BOARD_WID, KTTOUR_BOARD_HEIT, KTTOUR_NUM_PIECES, kttour_colors, NULL, /*kttour_pixmaps,*/ NULL, "Knight's Tour", NULL, kttour_init}; SCORE_FIELD kttour_score_fields[] = {SCORE_FIELD_RANK, SCORE_FIELD_USER, SCORE_FIELD_TIME, SCORE_FIELD_DATE, SCORE_FIELD_NONE}; char *kttour_score_field_names[] = {"Rank", "User", "Time", "Date", NULL}; static int kttour_getmove (Pos *, int, int, GtkboardEventType, Player, byte **, int **); static ResultType kttour_who_won (Pos *, Player, char **); static char **kttour_get_pixmap (int , int); void kttour_init () { game_single_player = 1; game_getmove = kttour_getmove; game_get_pixmap = kttour_get_pixmap; game_who_won = kttour_who_won; game_scorecmp = game_scorecmp_def_time; game_score_fields = kttour_score_fields; game_score_field_names = kttour_score_field_names; game_draw_cell_boundaries = TRUE; game_allow_undo = TRUE; game_doc_about_status = STATUS_COMPLETE; game_doc_about = "Kttour\n" "Single player game\n" "Status: Partially implemented\n" "URL: "GAME_DEFAULT_URL("kttour"); game_doc_rules = " Complete the knight's tour of the chessboard.\n" "\n" " In the initial position click on any square to start the tour on that square. " "Next click on the square you want the knight to move to, and so on. " "The square where you started will be shown in green and the other squares in the tour will be grey. " "At any point you can click on the green square to make it the current square, in which case the current square will become the \"start\" square. " "\n\n" " The objective is to fill all 64 squares in such a way that the last square is one knight-move away from the first, in as little time as possible. " "In this game, you can undo your moves freely. This won't prevent you from getting a highscore. " "\n\n" " The blue balls that you see are hints. They are there to make your life easier, but you don't have to necessarily click on a ball." ; } static char **kttour_get_pixmap (int idx, int color) { static char pixbuf[KTTOUR_CELL_SIZE*(KTTOUR_CELL_SIZE+1)]; int i, bg; for(i=0, bg=0;i<3;i++) { int col = kttour_colors[i]; if (col<0) col+=256; bg += col * (1 << (16-8*i));} switch (idx) { case KTTOUR_CUR: return chess_wn_54_xpm; // simulate square using ball of large radius case KTTOUR_START: return pixmap_ball_gen (KTTOUR_CELL_SIZE, pixbuf, 0x80ff80, bg, KTTOUR_CELL_SIZE, 1); case KTTOUR_USED: return pixmap_ball_gen (KTTOUR_CELL_SIZE, pixbuf, 0x808080, bg, KTTOUR_CELL_SIZE, 1); case KTTOUR_HINT: return pixmap_ball_gen (KTTOUR_CELL_SIZE, pixbuf, 0x8080ff, bg, KTTOUR_CELL_SIZE/4, 30.0); default: return NULL; } } #define abs(x) ((x)<0?-(x):(x)) static gboolean are_nbrs (int x1, int y1, int x2, int y2) { return abs ((x1 - x2) * (y1 - y2)) == 2 ? TRUE : FALSE; } /* TODO: this should be implemented in game_common.c or something like that so that all games can access it */ static void find_xy (byte *board, int *x, int *y, int val) { int i, j; *x = -1; *y = -1; for (i=0; iboard [i] == KTTOUR_EMPTY) return RESULT_NOTYET; find_xy (pos->board, &x1, &y1, KTTOUR_CUR); find_xy (pos->board, &x2, &y2, KTTOUR_START); return are_nbrs (x1, y1, x2, y2) ? RESULT_WON : RESULT_NOTYET; } static int incx[] = {-2, -2, -1, -1, 1, 1, 2, 2}; static int incy[] = {-1, 1, -2, 2, -2, 2, -1, 1}; #define IS_FREE(x) ((x) == KTTOUR_EMPTY || (x) == KTTOUR_HINT) static int get_degree (byte *board, int i, int j) { int k, x, y; int count = 0; for (k=0; k<8; k++) { x = i + incx[k]; y = j + incy[k]; if (ISINBOARD (x, y) && IS_FREE(board [y * board_wid + x])) count++; } return count; } static int get_min_degree (byte *board, int i, int j) { int k, x, y; int min_deg = 8; for (k=0; k<8; k++) { int deg; x = i + incx[k]; y = j + incy[k]; if (ISINBOARD (x, y) && IS_FREE(board [y * board_wid + x])) if ((deg = get_degree (board, x, y)) < min_deg) min_deg = deg; } return min_deg; } static void add_hints (byte *board, int new_x, int new_y, byte **mp) { int min_deg_new, min_deg_old; int k, x, y; min_deg_new = get_min_degree (board, new_x, new_y); for (k=0; k<8; k++) { x = new_x + incx[k]; y = new_y + incy[k]; if (!ISINBOARD (x, y) || board [y * board_wid + x] != KTTOUR_EMPTY) continue; if (get_degree (board, x, y) == min_deg_new) { *(*mp)++ = x; *(*mp)++ = y; *(*mp)++ = KTTOUR_HINT; } } for (x=0; xboard[y * board_wid + x]; if (val == KTTOUR_CUR) return 0; if (val == KTTOUR_USED) return -1; find_xy (pos->board, &cur_x, &cur_y, KTTOUR_CUR); if (val == KTTOUR_START) { *mp++ = x; *mp++ = y; *mp++ = KTTOUR_CUR; *mp++ = cur_x; *mp++ = cur_y; *mp++ = KTTOUR_START; add_hints (pos->board, x, y, &mp); *mp++ = -1; *movp = move; return 1; } if (cur_x >= 0 && !are_nbrs (cur_x, cur_y, x, y)) return -1; *mp++ = x; *mp++ = y; *mp++ = KTTOUR_CUR; if (cur_x >= 0) { *mp++ = cur_x; *mp++ = cur_y; *mp++ = pos->num_moves == 1 ? KTTOUR_START : KTTOUR_USED; } add_hints (pos->board, x, y, &mp); *mp++ = -1; *movp = move; return 1; } gtkboard/src/mastermind.c000066400000000000000000000342241153150217100157520ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ /** \file mastermind.c */ #include #include #include #include #include #include "game.h" #include "aaball.h" #include "../pixmaps/misc.xpm" #define MASTERMIND_CELL_SIZE 40 #define MASTERMIND_NUM_PIECES 28 #define MASTERMIND_BOARD_WID 8 #define MASTERMIND_BOARD_HEIT 11 #define MASTERMIND_EMPTY 0 #define MASTERMIND_MAIN_COL_START 2 #define MASTERMIND_MAIN_COL_END 5 #define MASTERMIND_ARROW 27 #define MASTERMIND_RETURN 28 #define MASTERMIND_RIGHT_ROW_START 2 #define MASTERMIND_RIGHT_ROW_END 7 #define MASTERMIND_GET_SELECTION(x,y) (((x)==7&&(y)>=MASTERMIND_RIGHT_ROW_START&&(y)<(MASTERMIND_RIGHT_ROW_START+6))?(y):-1) #define MASTERMIND_IS_MAIN_COL(x) ((x)>1&&(x)<6) char mastermind_colors[9] = {200, 200, 200, 200, 200, 200, 0, 0, 0}; char mastermind_highlight_colors[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; static char * arrow_blue_return_40_xpm[]= { "40 40 2 1", ". c blue", " c none", " ", " ", " ", " ", " ", " ", " ", " ", " .... ", " .... ", " .... ", " .... ", " .... ", " .... ", " .... ", " . .... ", " .. .... ", " ... .... ", " .... .... ", " ..... .... ", " ...... .... ", " ....................... ", " ........................ ", " ........................ ", " ....................... ", " ...... ", " ..... ", " .... ", " ... ", " .. ", " . ", " ", " ", " ", " ", " ", " ", " ", " ", " ", }; static char * arrow_blue_left_40_xpm[]= { "40 40 2 1", ". c blue", " c none", " ", " ", " ", " ", " ", " ", " ", " ", " ", " . ", " .. ", " ... ", " .... ", " ..... ", " ...... ", " ....... ", " ........ ", " ......... ", " ............................ ", " ............................. ", " ............................. ", " ............................ ", " ......... ", " ........ ", " ....... ", " ...... ", " ..... ", " .... ", " ... ", " .. ", " . ", " ", " ", " ", " ", " ", " ", " ", " ", " ", }; int mastermind_init_pos [MASTERMIND_BOARD_WID*MASTERMIND_BOARD_HEIT] = { 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,27, 0, }; SCORE_FIELD mastermind_score_fields[] = {SCORE_FIELD_USER, SCORE_FIELD_SCORE, SCORE_FIELD_TIME, SCORE_FIELD_DATE, SCORE_FIELD_NONE}; char *mastermind_score_field_names[] = {"User", "Tries", "Time", "Date", NULL}; void mastermind_init (); char ** mastermind_get_pixmap (int idx, int color); Game Mastermind = { MASTERMIND_CELL_SIZE, MASTERMIND_BOARD_WID, MASTERMIND_BOARD_HEIT, MASTERMIND_NUM_PIECES, mastermind_colors, NULL, NULL, "Mastermind", NULL, mastermind_init}; static ResultType mastermind_who_won (Pos *, Player, char **); static void mastermind_set_init_pos (Pos *pos); int mastermind_getmove (Pos *, int, int, GtkboardEventType, Player, byte**, int **); int mastermind_getmove_kb (Pos *, int, byte **, int **); void mastermind_reset_uistate (); int mastermind_get_cur_row (byte *); void mastermind_set_init_render (Pos *); void mastermind_free (); void mastermind_init () { game_getmove = mastermind_getmove; game_getmove_kb = mastermind_getmove_kb; game_who_won = mastermind_who_won; game_set_init_pos = mastermind_set_init_pos; game_get_pixmap = mastermind_get_pixmap; game_single_player = TRUE; game_reset_uistate = mastermind_reset_uistate; game_draw_cell_boundaries = TRUE; game_scorecmp = game_scorecmp_def_iscore; game_score_fields = mastermind_score_fields; game_score_field_names = mastermind_score_field_names; game_highlight_colors = mastermind_highlight_colors; game_set_init_render = mastermind_set_init_render; game_free = mastermind_free; game_doc_about_status = STATUS_COMPLETE; game_doc_about = "Mastermind\n" "Single player game\n" "Status: Completely implemented\n" "URL: "GAME_DEFAULT_URL ("mastermind"); game_doc_rules = "The objective is to find the colors of 4 hidden squares in as few tries as possible.\n\n" "Select a color by clicking on one of the balls on the extreme right. Place any 4 colors of your choice on the middle 4 squares of the bottom row and hit enter. You will get two numbers on the left. The number of black balls indicates how many balls you've got in the correct position. The number of white balls indicates how many balls you've got n the wrong position. Now try again on the second row. Repeat until you get all four black balls."; // TODO: complete this } void mastermind_set_init_render (Pos *pos) { pos->render [MASTERMIND_RIGHT_ROW_START * board_wid + board_wid - 1] = RENDER_HIGHLIGHT1; } ResultType mastermind_who_won (Pos *pos, Player to_play, char **commp) { static char comment[32]; int j; gboolean over = FALSE; char *scorestr; /* pos->board [(board_heit - 1) * board_wid+ MASTERMIND_MAIN_COL_START] <= 8 ? TRUE : FALSE; */ for (j=0; jboard[j * board_wid] == 20) // FIXME: don't hard code over = TRUE; scorestr = over ? "You won! Tries:" : "Tries:"; if (!over && mastermind_get_cur_row (pos->board) == board_heit - 1) { snprintf (comment, 32, "You lost. Tries: %d", board_heit - 1); *commp = comment; return RESULT_LOST; } for (j=0; jboard[j * board_wid]) break; snprintf (comment, 32, "%s %d", scorestr, j); *commp = comment; return over ? RESULT_WON : RESULT_NOTYET; } int mastermind_get_cur_row (byte *board) { int j; for (j=board_heit-2; j>=0; j--) { if (board [j * board_wid + 0] || board [j * board_wid + 1]) return j+1; } return 0; } void mastermind_set_init_pos (Pos *pos) { int i, j; for (i=0; iboard [j * board_wid + i] = mastermind_init_pos [(board_heit - 1 - j) * board_wid + i]; for (i=MASTERMIND_MAIN_COL_START; i<=MASTERMIND_MAIN_COL_END; i++) pos->board [(board_heit - 1) * board_wid + i] = 9 + random() % 6; } char ** mastermind_get_pixmap (int idx, int color) { int fg = 0, bg = 0, i; char *colors; static char pixbuf[MASTERMIND_CELL_SIZE*(MASTERMIND_CELL_SIZE)+1]; static char dice_pixbuf[MASTERMIND_CELL_SIZE*(MASTERMIND_CELL_SIZE)+1]; static gboolean first = TRUE; colors = mastermind_colors; if (idx == MASTERMIND_ARROW) return arrow_blue_left_40_xpm; else if (idx == MASTERMIND_RETURN) return arrow_blue_return_40_xpm; if (idx < 16) { fg += (idx & 1); fg += (idx & 2 ? 256 : 0); fg += (idx & 4 ? 65536 : 0); fg *= 255; if (idx >= 9 && idx <= 14) fg = 100 * 0x10101; if (color == BLACK) colors += 3; for(i=0, bg=0;i<3;i++) { int col = colors[i]; if (col<0) col += 256; bg += col * (1 << (16-8*i));} if (first) { first = FALSE; return pixmap_ball_gen (MASTERMIND_CELL_SIZE, pixbuf, fg, bg, 10.0, 30.0); } return pixmap_header_gen (MASTERMIND_CELL_SIZE, pixbuf, fg, bg); } else if (idx < 25) { int num = (idx <= 20 ? idx - 16 : idx - 20); for(i=0, bg=0;i<3;i++) { int col = colors[i]; if (col<0) col += 256; bg += col * (1 << (16-8*i));} fg = (idx <= 20 ? 0 : 0xffffff); return pixmap_die_gen(MASTERMIND_CELL_SIZE, dice_pixbuf, fg, bg, 3.0, 30.0, num); } else return red_X_40_xpm; return NULL; } static int active = MASTERMIND_RIGHT_ROW_START; void mastermind_free () { active = MASTERMIND_RIGHT_ROW_START; } void mastermind_reset_uistate () { } int mastermind_getmove (Pos *pos, int x, int y, GtkboardEventType type, Player to_play, byte **movp, int ** rmovep) { static int rmove[7]; int *rp = rmove; int tmp; int i, found; static byte move[7]; byte *mp = move; if (type != GTKBOARD_BUTTON_RELEASE) return 0; tmp = MASTERMIND_GET_SELECTION(x,y); if (tmp > 0) { int j; active = tmp; for (j=0; jrender [j * board_wid + (board_wid - 1)] == RENDER_HIGHLIGHT1) { if (j == y) break; *rp++ = board_wid - 1; *rp++ = j; *rp++ = 0; break; } *rp++ = board_wid - 1; *rp++ = y; *rp++ = RENDER_HIGHLIGHT1; *rp++ = -1; *rmovep = rmove; return 0; } if (active < 1) return -1; if (!MASTERMIND_IS_MAIN_COL(x)) return -1; if (y == board_heit -1) return -1; if (y != mastermind_get_cur_row (pos->board)) return -1; *mp++ = x; *mp++ = y; *mp++ = active - MASTERMIND_RIGHT_ROW_START + 1; if (movp) *movp = move; for (found = 0, i=MASTERMIND_MAIN_COL_START;i<=MASTERMIND_MAIN_COL_END;i++) { if (pos->board [y * board_wid + i] == MASTERMIND_EMPTY && i != x) { found = 1; break; } } if (!found) { *mp++ = MASTERMIND_MAIN_COL_END + 1; *mp++ = y; *mp++ = MASTERMIND_RETURN; } *mp++ = -1; return 1; } int mastermind_getmove_kb (Pos *pos, int key, byte **movp, int **rmovp) { static byte move[32]; static int rmove[7]; byte *mp = move; int *rp = rmove; int i, j, nblack = 0, nwhite = 0, seen[4] = { 0 }; byte *board = pos->board; int cur_row; if (key == GDK_Up) { *rp++ = board_wid - 1; *rp++ = active; *rp++ = 0; if (++active > MASTERMIND_RIGHT_ROW_END) active = MASTERMIND_RIGHT_ROW_START; *rp++ = board_wid - 1; *rp++ = active; *rp++ = RENDER_HIGHLIGHT1; *rp++ = -1; *rmovp = rmove; return 0; } if (key == GDK_Down) { *rp++ = board_wid - 1; *rp++ = active; *rp++ = 0; if (--active < MASTERMIND_RIGHT_ROW_START) active = MASTERMIND_RIGHT_ROW_END; *rp++ = board_wid - 1; *rp++ = active; *rp++ = RENDER_HIGHLIGHT1; *rp++ = -1; *rmovp = rmove; return 0; } if (key != GDK_Return) return 0; if (active < 0) return 0; cur_row = mastermind_get_cur_row (board); if (cur_row == board_heit - 1) return -1; for (i=MASTERMIND_MAIN_COL_START;i<=MASTERMIND_MAIN_COL_END;i++) { if (board [cur_row * board_wid + i] == MASTERMIND_EMPTY) return 0; } *mp++ = MASTERMIND_MAIN_COL_END + 1; *mp++ = cur_row; *mp++ = MASTERMIND_EMPTY; if (cur_row < board_heit - 2) { *mp++ = MASTERMIND_MAIN_COL_END + 1; *mp++ = cur_row+1; *mp++ = MASTERMIND_ARROW; } nblack = 0; for (i=MASTERMIND_MAIN_COL_START;i<=MASTERMIND_MAIN_COL_END;i++) if (board [cur_row * board_wid + i] == (board [(board_heit - 1) * board_wid + i] & 7)) nblack++; for (i=MASTERMIND_MAIN_COL_START;i<=MASTERMIND_MAIN_COL_END;i++) { for (j=MASTERMIND_MAIN_COL_START;j<=MASTERMIND_MAIN_COL_END;j++) if (board [cur_row * board_wid + i] == (board [(board_heit - 1) * board_wid + j] & 7) && !seen[j - MASTERMIND_MAIN_COL_START]) { nwhite++; seen[j - MASTERMIND_MAIN_COL_START] = 1; break; } } assert (nwhite >= nblack); nwhite -= nblack; *mp++ = 0; *mp++ = cur_row; *mp++ = (nblack ? nblack + 16 : 25); *mp++ = 1; *mp++ = cur_row; *mp++ = (nwhite ? nwhite + 20 : 25); if (nblack == 4 || cur_row == board_heit - 2) for (i=MASTERMIND_MAIN_COL_START;i<=MASTERMIND_MAIN_COL_END;i++) { *mp++ = i; *mp++ = board_heit - 1; *mp++ = board [(board_heit - 1) * board_wid + i] & 7; } *mp++ = -1; if (movp) *movp = move; cur_row++; return 1; } gtkboard/src/maze.c000066400000000000000000000170731153150217100145460ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ #include #include #include #include #include #include #include "game.h" #include "aaball.h" #define MAZE_CELL_SIZE 8 #define MAZE_NUM_PIECES 127 #define MAZE_BOARD_WID 60 #define MAZE_BOARD_HEIT 60 char maze_colors[6] = {100, 150, 200, 100, 150, 200}; int * maze_init_pos = NULL; static int maze_maze[MAZE_BOARD_WID][MAZE_BOARD_HEIT] = {{0}}; #define MAZE_WALL 2 #define MAZE_CUR 1 #define CORNER_SIZE 3 void maze_init (); SCORE_FIELD maze_score_fields[] = {SCORE_FIELD_USER, SCORE_FIELD_TIME, SCORE_FIELD_DATE, SCORE_FIELD_NONE}; char *maze_score_field_names[] = {"User", "Time", "Date", NULL}; Game Maze = { MAZE_CELL_SIZE, MAZE_BOARD_WID, MAZE_BOARD_HEIT, MAZE_NUM_PIECES, maze_colors, NULL, NULL, "Maze", "Maze", maze_init}; static void maze_set_init_pos (Pos *pos); static char ** maze_get_pixmap (int idx, int color); static int maze_getmove_kb (Pos *cur_pos, int key, byte **move, int **); ResultType maze_who_won (Pos *, Player, char **); void maze_init () { game_single_player = TRUE; game_set_init_pos = maze_set_init_pos; game_get_pixmap = maze_get_pixmap; game_getmove_kb = maze_getmove_kb; game_who_won = maze_who_won; game_start_immediately = TRUE; game_scorecmp = game_scorecmp_def_time; game_score_fields = maze_score_fields; game_score_field_names = maze_score_field_names; game_doc_about_status = STATUS_COMPLETE; game_doc_about = "Maze\n" "Single player game\n" "Status: Partially implemented (playable)\n" "URL: "GAME_DEFAULT_URL ("maze"); game_doc_rules = "Your objective is to lead the man (or mouse or whatever) trapped in the maze from the lower left corner to the upper right.\n" "\n" "The maze is randomly generated, and is currently not very good at generating particularly hard-to-solve mazes.\n"; } ResultType maze_who_won (Pos *pos, Player to_play, char **commp) { static char comment[32]; int i, j; gboolean over = FALSE; for (i=0; iboard [(board_heit - 1 - j) * board_wid + (board_wid - 1 - i)] == MAZE_CUR) over = TRUE; // gboolean over = (pos->board [board_wid * board_heit - 1] == MAZE_CUR); snprintf (comment, 32, "%sMoves: %d", over ? "You won. " : "", pos->num_moves); *commp = comment; return over ? RESULT_WON : RESULT_NOTYET; } void maze_get_cur_pos (byte *pos, int *x, int *y) { int i, j; for (i=0; iboard, &curx, &cury); g_assert (curx >= 0 && cury >= 0); switch (key) { case GDK_Up: incx = 0; incy = 1; break; case GDK_Down: incx = 0; incy = -1; break; case GDK_Right: incx = 1; incy = 0; break; case GDK_Left: incx = -1; incy = 0; break; default: return -1; } x = curx + incx; y = cury + incy; if (x < 0 || y < 0 || x >= board_wid || y >= board_heit) return -1; if (pos->board[y * board_wid + x] == MAZE_WALL) return -1; move[0] = curx; move[1] = cury; move[2] = 0; move[3] = x; move[4] = y; move[5] = MAZE_CUR; move[6] = -1; *movp = move; return 1; } int maze_checknbrs(int x, int y) { int i, j; int incx[] = {1, 1, 1, 0, -1, -1, -1, 0}; int incy[] = {1, 0, -1, -1, -1, 0, 1, 1}; if (x < 0 || y < 0 || x >= board_wid || y >= board_heit) return 0; for (i=1; i<=7; i+=2) { int found = 0; for (j=0; j<3; j++) { int k = (i+j)%8; int newx = x + incx[k], newy = y + incy[k]; if (newx < 0 || newy < 0 || newx >= board_wid || newy >= board_heit) continue; if (maze_maze[newx][newy] == MAZE_WALL) found = 1; } if (!found) return 0; } return 1; } static void recursive_pathgen (byte *board, int x, int y, int val) { static int incx[4] = {-1, 0, 0, 1}; static int incy[4] = {0, -1, 1, 0}; int i; if (!ISINBOARD(x, y)) return; if (board[y * board_wid + x] == val) return; if (board[y * board_wid + x] == MAZE_WALL) return; board [y * board_wid + x] = val; for (i=0; i<4; i++) recursive_pathgen (board, x+incx[i], y+incy [i], val); } static void mazegen () { int x, y, npts = 0; for (x=0; xboard [j * board_wid + i] = maze_maze[i][j]; for (i=0; iboard [j * board_wid + i] = 0; for (i=board_wid-CORNER_SIZE; iboard [j * board_wid + i] = 0; recursive_pathgen (pos->board, 0, 0, -1); } while (pos->board [board_wid * board_heit - 1] != -1); for (i=0; iboard [j * board_wid + i] == -1) pos->board [j * board_wid + i] = 0; pos->board[0] = MAZE_CUR; /*while(1) { i = random()%board_wid; j = random()%board_heit; if (pos->board [j*board_wid+i] == 0) { pos->board [j * board_wid + i] = 1; break; } }*/ } char ** maze_pixmap_square_gen (int idx, char *col) { int i, j; char **pixmap; char *line = " "; pixmap = g_new(char *, MAZE_CELL_SIZE + 2); pixmap[0] = "8 8 1 1"; pixmap[1] = g_strdup_printf (" c %s", col); for (i=0; i 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 USA */ #include #include #include #include #include #include #include "game.h" #include "../pixmaps/memory.xpm" #define MEMORY_CELL_SIZE 48 #define MEMORY_NUM_PIECES 72 #define MEMORY_BOARD_WID 9 #define MEMORY_BOARD_HEIT 8 #define MEMORY_EMPTY 0 #define MEMORY_ISOPEN(x) ((x)>MEMORY_NUM_PIECES/2) #define MEMORY_FLIP(x) ((x)>MEMORY_NUM_PIECES/2?\ (x)-MEMORY_NUM_PIECES/2:(x)+MEMORY_NUM_PIECES/2) char ** memory_pixmaps [] = { memory_blank_xpm, memory_blank_xpm, memory_blank_xpm, memory_blank_xpm, memory_blank_xpm, memory_blank_xpm, memory_blank_xpm, memory_blank_xpm, memory_blank_xpm, memory_blank_xpm, memory_blank_xpm, memory_blank_xpm, memory_blank_xpm, memory_blank_xpm, memory_blank_xpm, memory_blank_xpm, memory_blank_xpm, memory_blank_xpm, memory_blank_xpm, memory_blank_xpm, memory_blank_xpm, memory_blank_xpm, memory_blank_xpm, memory_blank_xpm, memory_blank_xpm, memory_blank_xpm, memory_blank_xpm, memory_blank_xpm, memory_blank_xpm, memory_blank_xpm, memory_blank_xpm, memory_blank_xpm, memory_blank_xpm, memory_blank_xpm, memory_blank_xpm, memory_blank_xpm, memory1_xpm, memory2_xpm, //memory3_xpm, memory4_xpm, memory5_xpm, memory6_xpm, memory7_xpm, memory8_xpm, //memory9_xpm, memory10_xpm, //memory11_xpm, memory12_xpm, memory13_xpm, memory14_xpm, memory15_xpm, memory16_xpm, memory17_xpm, memory18_xpm, memory19_xpm, //memory20_xpm, memory21_xpm, memory22_xpm, memory23_xpm, //memory24_xpm, memory25_xpm, memory26_xpm, memory27_xpm, memory28_xpm, memory29_xpm, memory30_xpm, memory31_xpm, //memory32_xpm, memory33_xpm, memory34_xpm, memory35_xpm, memory36_xpm, memory37_xpm, memory38_xpm, memory39_xpm, memory40_xpm, memory41_xpm, memory42_xpm, }; char memory_colors[9] = {220, 220, 180, 220, 220, 180, 0, 0, 0}; int * memory_init_pos = NULL; void memory_init (); Game Memory = { MEMORY_CELL_SIZE, MEMORY_BOARD_WID, MEMORY_BOARD_HEIT, MEMORY_NUM_PIECES, memory_colors, NULL, memory_pixmaps, "Memory", NULL, memory_init}; typedef struct { int num_moves; int num_found; } Memory_state; static Memory_state state = {0, 0}; static int memory_getmove (Pos *, int, int, GtkboardEventType, Player, byte **, int **); static int memory_animate (Pos *pos, byte **movp); static void memory_set_init_pos (Pos *pos); void *memory_newstate (Pos *, byte *); ResultType memory_who_won (Pos *, Player, char **); void memory_free (); void memory_init () { game_single_player = TRUE; game_set_init_pos = memory_set_init_pos; game_getmove = memory_getmove; game_animate = memory_animate; game_animation_time = 100; game_stateful = TRUE; game_state_size = sizeof (Memory_state); game_newstate = memory_newstate; game_who_won = memory_who_won; game_free = memory_free; game_draw_cell_boundaries = FALSE; game_allow_back_forw = FALSE; game_scorecmp = game_scorecmp_def_iscore; game_doc_about_status = STATUS_COMPLETE; game_doc_about = "Memory\n" "Single player game\n" "Status: Fully implemented\n" "URL: "GAME_DEFAULT_URL("memory"); game_doc_rules = "There are 36 pairs of images. Your goal is to match these pairs in as few turns as possible.\n" "In each turn you click on two squares. If they match they stay uncovered for the rest of the game. If not they go back to being hidden."; } static int waiting = 0; void memory_free () { waiting = 0; } void *memory_newstate (Pos *pos, byte *move) { int i, j, found; state.num_moves = pos->state ? ((Memory_state *)pos->state)->num_moves : 0; state.num_found = pos->state ? ((Memory_state *)pos->state)->num_found : 0; if (move[2] <= MEMORY_NUM_PIECES/2) state.num_moves = pos->state ? ((Memory_state *)pos->state)->num_moves + 1 : 1; else for (i=0, found=0; iboard [j * board_wid + i] == move[2]) { state.num_found = pos->state ? ((Memory_state *)pos->state)->num_found + 1 : 1; found = 1; break; } } if (found) break; } return &state; } ResultType memory_who_won (Pos *pos, Player to_play, char **commp) { static char comment[32]; int found = pos->state ? ((Memory_state *)pos->state)->num_found : 0; snprintf (comment, 32, "%s %d; %s %d", "Missed:", pos->state ? ((Memory_state *)pos->state)->num_moves : 0, "Found:", found); *commp = comment; return (found == board_wid * board_heit / 2) ? RESULT_WON : RESULT_NOTYET; } int memory_animate (Pos *pos, byte **movp) { static byte move[10]; static int count = 0; byte *mp = move; int val; int i, j; int pair [MEMORY_BOARD_HEIT * MEMORY_BOARD_WID/2+1]; if (waiting > 0) waiting ++; if (waiting == 10) { waiting = 0; for (i=0; i<=MEMORY_BOARD_WID * MEMORY_BOARD_HEIT/2; i++) pair [i] = 0; for (i=0; iboard [j * board_wid + i])) pair [MEMORY_FLIP (val)] ++; for (i=0; iboard [j * board_wid + i]) && pair [MEMORY_FLIP (val)] == 1) { *mp++ = i; *mp++ = j; *mp++ = MEMORY_FLIP(val); } } } else return -1; *mp++ = -1; *movp = move; return 1; } void memory_set_init_pos (Pos *pos) { int i, j, tmp; int size = board_wid * board_heit; int swaps = 0; byte *board = pos->board; for (i=0; i 0) return 0; if ((val = pos->board [y * board_wid + x]) == MEMORY_EMPTY) return 0; if (MEMORY_ISOPEN (val)) return 0; *mp++ = x; *mp++ = y; num = board_wid * board_heit / 2; if (val <= num) val += num; else val -= num; *mp++ = val; *mp++ = -1; *movp = move; for (i=0; iboard [j * board_wid + i])) { found++; if (pos->board [j * board_wid + i] == val) pair = TRUE; } } if (!pair && (found %2 == 1)) waiting = 1; return 1; } gtkboard/src/menu.c000066400000000000000000001101571153150217100145530ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ #include #include #include #include "config.h" #include "ui.h" #include "menu.h" #include "move.h" #include "ui_common.h" #include "aaball.h" #include "board.h" #include "prefs.h" #include "sound.h" #ifdef HAVE_GNOME #include "libgnome/libgnome.h" #include "libgnomeui/libgnomeui.h" #include "../pixmaps/logo48.xpm" #endif GtkWidget *sb_message_label, *sb_game_label, *sb_score_label, *sb_who_label, *sb_player_label, *sb_time_label, *sb_turn_image, *menu_main, *menu_info_bar, *menu_info_separator, *menu_warning_bar; GtkWidget *sb_game_separator, *sb_who_separator, *sb_score_separator, *sb_player_separator, *sb_time_separator, *sb_turn_separator, *sb_warning_separator; #define SB_MESSAGE_STRLEN 64 gchar sb_message_str[SB_MESSAGE_STRLEN] = ""; #define SB_SCORE_STRLEN 32 gchar sb_score_str[SB_SCORE_STRLEN] = ""; GtkItemFactory *menu_factory = NULL; void sb_messagebar_message (gchar *); void menu_cleanup_var_menus (); static char * menu_paths_sens_machine_thinking[] = { // "/File/Load game", // "/File/Save game", "/Game/Start", "/Game/New", "/Game/Select Game", "/Settings", "/Move/Back", "/Move/Forward", }; static char * menu_paths_sens_no_game[] = { "/Game/Start", "/Game/Pause", "/Game/New", "/Game/Highscores", "/Game/Zap Highscores", // "/File/Save game", "/Move/Back", "/Move/Forward", "/Settings/Flip Board", "/Settings/Player", }; static char * menu_paths_sens_no_back_forw[] = { "/Move/Back", "/Move/Forward", }; static char *menu_paths_sens_single_player[] = { "/Settings/Player", "/Settings/Flip Board", // "/Settings/Eval function", }; static char *menu_paths_sens_two_players[] = { "/Game/Highscores", "/Game/Zap Highscores", }; static char *menu_paths_sens_ui_stopped[] = { "/Game/Pause", }; static char *menu_paths_sens_machine_not_thinking[] = { "/Move/Move Now", }; static char *menu_paths_sens_eval_function[] = { // "/Settings/Eval function", }; void sb_set_score (gchar *score) { strncpy (sb_score_str, score, SB_SCORE_STRLEN-1); sb_update (); } void menu_sensitize (int which, gboolean sens) { int i, num_paths = -1; char **menu_des_paths = NULL; if (!state_gui_active) return; switch (which) { case MENU_SENS_MACHINE_THINKING: menu_des_paths = menu_paths_sens_machine_thinking; num_paths = sizeof (menu_paths_sens_machine_thinking) / sizeof (menu_paths_sens_machine_thinking[0]); break; case MENU_SENS_MACHINE_NOT_THINKING: menu_des_paths = menu_paths_sens_machine_not_thinking; num_paths = sizeof (menu_paths_sens_machine_not_thinking) / sizeof (menu_paths_sens_machine_not_thinking[0]); break; case MENU_SENS_NO_GAME: menu_des_paths = menu_paths_sens_no_game; num_paths = sizeof (menu_paths_sens_no_game) / sizeof (menu_paths_sens_no_game[0]); break; case MENU_SENS_NO_BACK_FORW: menu_des_paths = menu_paths_sens_no_back_forw; num_paths = sizeof (menu_paths_sens_no_back_forw) / sizeof (menu_paths_sens_no_back_forw[0]); break; case MENU_SENS_SINGLE_PLAYER: menu_des_paths = menu_paths_sens_single_player; num_paths = sizeof (menu_paths_sens_single_player) / sizeof (menu_paths_sens_single_player[0]); break; case MENU_SENS_TWO_PLAYERS: menu_des_paths = menu_paths_sens_two_players; num_paths = sizeof (menu_paths_sens_two_players) / sizeof (menu_paths_sens_two_players[0]); break; case MENU_SENS_UI_STOPPED: menu_des_paths = menu_paths_sens_ui_stopped; num_paths = sizeof (menu_paths_sens_ui_stopped) / sizeof (menu_paths_sens_ui_stopped[0]); break; case MENU_SENS_EVAL_FUNCTION: menu_des_paths = menu_paths_sens_eval_function; num_paths = sizeof (menu_paths_sens_eval_function) / sizeof (menu_paths_sens_eval_function[0]); break; default: g_assert_not_reached (); } for (i=0; iwindow, NULL, NULL, pixmap_data); } gtk_image_set_from_pixmap (GTK_IMAGE (sb_turn_image), pixmaps[previndex = 6], NULL); first = 0; } if (opt_infile || !opt_game) index = 6; else { if (!game_single_player && ui_white == HUMAN && ui_black == HUMAN && cur_pos.player == BLACK) index = 4; else index = (player_to_play == HUMAN ? 0 : 2); if (ui_stopped) index++; } g_assert (index >= 0 && index <= 6); if (index == previndex) return; gtk_image_set_from_pixmap (GTK_IMAGE (sb_turn_image), pixmaps[previndex = index], NULL); #endif } static void sb_set_cursor () { static GdkCursor *cursor_normal = NULL, *cursor_busy = NULL, *cursor_inactive = NULL; // FIXME: is it ok to hard code the shape of the normal cursor? if (!cursor_normal) cursor_normal = gdk_cursor_new (GDK_LEFT_PTR); if (!cursor_busy) cursor_busy = gdk_cursor_new (GDK_WATCH); if (!cursor_inactive) cursor_inactive = gdk_cursor_new (GDK_XTERM); if (player_to_play == MACHINE && !ui_stopped) gdk_window_set_cursor (board_area->window, cursor_busy); else if (player_to_play == MACHINE && ui_stopped) gdk_window_set_cursor (board_area->window, cursor_inactive); else gdk_window_set_cursor (board_area->window, cursor_normal); } void menu_board_flip_cb () { if (game_single_player) { sb_error ("Can't flip board in single player game", TRUE); return; } if (!game_allow_flip) { sb_error ("This game doesn't allow the board to be flipped", TRUE); return; } state_board_flipped = state_board_flipped ? FALSE : TRUE; board_redraw (NULL, NULL); } static void menu_show_dialog_real (gchar *title, gchar *message, gboolean wrap) // A modal dialog with a label. Don't use it for showing large amounts of text { GtkWidget *dialog, *okay_button, *label; #if GTK_MAJOR_VERSION == 1 label = gtk_label_new (message); dialog = gtk_dialog_new(); gtk_window_set_title (GTK_WINDOW (dialog), title); gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (main_window)); gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); okay_button = gtk_button_new_with_label("OK"); gtk_signal_connect_object (GTK_OBJECT (okay_button), "clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy), (gpointer) dialog); gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->action_area), okay_button); #else label = gtk_label_new (NULL); gtk_label_set_markup (GTK_LABEL (label), message); dialog = gtk_dialog_new_with_buttons (title, GTK_WINDOW (main_window), GTK_DIALOG_MODAL, NULL); gtk_window_set_default_size (GTK_WINDOW (dialog), 300, 100); okay_button = gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_OK, GTK_RESPONSE_NONE); g_signal_connect_swapped (GTK_OBJECT (dialog), "response", G_CALLBACK (gtk_widget_destroy), GTK_OBJECT (dialog)); gtk_label_set_selectable (GTK_LABEL (label), TRUE); #endif gtk_label_set_line_wrap (GTK_LABEL (label), wrap); gtk_widget_grab_focus (okay_button); gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), label); gtk_widget_show_all (dialog); } void menu_show_dialog (gchar *title, gchar *message) { menu_show_dialog_real (title, message, FALSE); } void menu_show_dialog_wrap (gchar *title, gchar *message) { menu_show_dialog_real (title, message, TRUE); } void menu_pause_cb (GtkWidget *dialog) { gtk_widget_destroy (GTK_WIDGET (dialog)); menu_start_stop_game (NULL, MENU_START_GAME); } void menu_show_pause_dialog () // Game paused { GtkWidget *dialog, *okay_button, *label; gchar *title = "Game paused - gtkboard"; gchar *msg = "Game paused. Click OK to continue"; board_hide(); label = gtk_label_new (msg); #if GTK_MAJOR_VERSION == 1 dialog = gtk_dialog_new(); gtk_window_set_title (GTK_WINDOW (dialog), title); gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (main_window)); gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); okay_button = gtk_button_new_with_label("OK"); gtk_signal_connect_object (GTK_OBJECT (okay_button), "clicked", GTK_SIGNAL_FUNC (menu_pause_cb), (gpointer) dialog); gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->action_area), okay_button); gtk_widget_grab_focus (okay_button); gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), label); gtk_widget_show_all (dialog); #else dialog = gtk_message_dialog_new (GTK_WINDOW (main_window), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, msg); /* dialog = gtk_dialog_new_with_buttons (title, GTK_WINDOW (main_window), GTK_DIALOG_MODAL, NULL); gtk_window_set_default_size (GTK_WINDOW (dialog), 300, 100); okay_button = gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_OK, GTK_RESPONSE_NONE); gtk_label_set_selectable (GTK_LABEL (label), TRUE); */ #endif #if GTK_MAJOR_VERSION > 1 gtk_dialog_run (GTK_DIALOG (dialog)); menu_pause_cb (dialog); #endif } void menu_show_about_dialog (gpointer data) { #ifdef HAVE_GNOME GtkWidget *about; GdkPixmap *logo_pixmap; GdkPixbuf *logo_pixbuf; const gchar *authors[] = {"Arvind Narayanan ", "Ron Hale-Evans ", NULL}; gchar *logo_filename; logo_filename = g_strdup_printf ("%s/pixmaps/gtkboard.png", DATADIR); logo_pixbuf = gdk_pixbuf_new_from_file (logo_filename, NULL); if (!logo_pixbuf) { fprintf (stderr, "Warning: couldn't load icon from file %s\n", logo_filename); logo_pixmap = gdk_pixmap_create_from_xpm_d (main_window->window, NULL, NULL, logo48_xpm); logo_pixbuf = gdk_pixbuf_get_from_drawable (NULL, logo_pixmap, gdk_colormap_get_system (), 0, 0, 0, 0, -1, -1); gdk_pixmap_unref (logo_pixmap); } g_free (logo_filename); about = gnome_about_new (PACKAGE, VERSION, "Copyright (C) 2003 Arvind Narayanan", NULL, authors, NULL, NULL, logo_pixbuf); gtk_widget_show (about); #else menu_show_dialog ("About gtkboard", "gtkboard " VERSION "\n" "http://gtkboard.sourceforge.net/\n" "Maintainer: Arvind Narayanan \n" "Released under the GNU General Public License\n" "See the file COPYING for details\n" "\n" "The documentation is available in the doc/ directory\n" "of the source distribution or in the directory\n" "/usr/local/doc/gtkboard-" VERSION "/ if you installed from binary rpm.\n" "The latest documentation will always be available at\n" "http://gtkboard.sourceforge.net/doc/" ); #endif } void menu_show_begging_dialog (gpointer data) { menu_show_dialog_wrap ("Begging bowl", "Thanks for using gtkboard. I hope you liked it.\n\n" "The download counter on sourceforge is broken. " "They call it an \"inaccuracy\", but the fact of the matter is that it's firmly stuck at zero, which means that I have no idea how many people are downloading/using the software. So you see, I'm as lonely as a lark (or whatever it is that's supposed to be very lonely.) So if you have any comments or suggestions, or even just some kind words, it would be nice if you can mail them me. My email is arvindn@users.sourceforge.net. Thanks." ); } void menu_help_home_page (gpointer data) { #ifdef HAVE_GNOME if (!gnome_url_show ("http://gtkboard.sourceforge.net/", NULL)) sb_error ("Couldn't launch home page", TRUE); #else fprintf (stderr, "warning: menu_show_home_page() called even though gnome integration not compiled in\n"); #endif } void menu_put_player (); void menu_start_stop_game (gpointer data, guint what) { switch (what) { case MENU_START_GAME: if (!opt_game) break; if (!ui_stopped) break; board_show(); if (ui_gameover) { sb_error ("Game over", FALSE); break; } if (!impl_check()) { sb_error ("Not yet implemented", TRUE); break; } ui_stopped = FALSE; ui_send_make_move (); sb_update(); break; case MENU_STOP_GAME: if (!opt_game) break; if (ui_stopped) break; ui_stopped = TRUE; ui_cancel_move (); sb_update(); if (game_single_player && ui_white == HUMAN) menu_show_pause_dialog (); break; case MENU_RESET_GAME: { int saved_white = ui_white; int saved_black = ui_black; if (!opt_game) break; ui_terminate_game (); ui_start_game (); ui_white = saved_white; ui_black = saved_black; menu_put_player(FALSE); sb_reset_human_time (); ui_stopped = FALSE; ui_send_make_move (); sb_update(); break; } default: printf ("menu_start_stop_game: %d\n", what); assert (0); } } // set the menu corresponding to ui_white and ui_black // if first is TRUE use opt_white and opt_black void menu_put_player (gboolean first) { gchar *path, *paths[4] = { "/Settings/Player/Human-Human", "/Settings/Player/Human-Machine", "/Settings/Player/Machine-Human", "/Settings/Player/Machine-Machine"}; if (!state_gui_active) return; if (first) {ui_white = opt_white; ui_black = opt_black;} if (opt_infile) { gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gtk_item_factory_get_widget (menu_factory, "/Settings/Player/File")), TRUE); return; } else if (ui_white == HUMAN && ui_black == HUMAN) path = paths[0]; else if (ui_white == HUMAN && ui_black == MACHINE) path = paths[1]; else if (ui_white == MACHINE && ui_black == HUMAN) path = paths[2]; else if (ui_white == MACHINE && ui_black == MACHINE) path = paths[3]; else return; gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gtk_item_factory_get_widget (menu_factory, path)), TRUE); } void menu_put_game () { gchar path[128] = "/Game/Select Game/"; if (opt_game->group) { // FIXME: don't use strcat strncat (path, opt_game->group, 128); strncat (path, "/", 128); } strncat (path, opt_game->name, 128); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gtk_item_factory_get_widget (menu_factory, path)), TRUE); } GtkWidget *menu_selector; void menu_load_file (GtkFileSelection *selector, gpointer user_data) { gchar const *filename; static FILE *in; filename = gtk_file_selection_get_filename (GTK_FILE_SELECTION(menu_selector)); if (!(in = fopen (filename, "r"))) { gchar *tempstr = g_strdup_printf ("Could not open file \"%s\" for reading", filename); sb_error (tempstr, TRUE); g_free (tempstr); return; } if (opt_infile) fclose (opt_infile); opt_infile = in; // FIXME: shouldn't this be MACHINE ? ui_white = ui_black = NONE; menu_put_player (FALSE); cur_pos.player = WHITE; game_set_init_pos (&cur_pos); board_redraw_all (); sb_message ("Opened file", FALSE); } void menu_set_player (gpointer *data, guint what, GtkWidget *widget) { /* the callback for a radio button appears to be called TWICE, once when selected and once when something else is selected. */ if (!GTK_CHECK_MENU_ITEM(widget)->active) return; if (what >= 1 && what <= 4) if (opt_infile) { fclose (opt_infile); opt_infile = NULL; } ui_stopped = TRUE; switch (what) { case 1: ui_white = HUMAN; ui_black = HUMAN; break; case 2: ui_white = HUMAN; ui_black = MACHINE; break; case 3: ui_white = MACHINE; ui_black = HUMAN; break; case 4: ui_white = MACHINE; ui_black = MACHINE; break; default: ui_white = NONE; ui_black = NONE; break; } sb_update (); } void menu_save_file_dialog () { sb_error ("Not yet implemented", TRUE); } void menu_load_file_dialog () { if (game_single_player) { sb_error ("Can't load from file for single player game.", FALSE); return; } menu_selector = gtk_file_selection_new (""); g_assert (menu_selector); /*gtk_file_selection_complete ( GTK_FILE_SELECTION (menu_selector), "*.cbgf");*/ gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION(menu_selector)->ok_button), "clicked", GTK_SIGNAL_FUNC (menu_load_file), NULL); gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION(menu_selector)->ok_button), "clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy), (gpointer) menu_selector); gtk_signal_connect_object ( GTK_OBJECT (GTK_FILE_SELECTION(menu_selector)->cancel_button), "clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy), (gpointer) menu_selector); gtk_widget_show (menu_selector); } void menu_show_game_doc (gpointer data, guint which) { GtkWidget *dialog, *msgarea, *okay_button, *vbar, *hbox, *scrwin; char *impl; char *msgstr = "Nothing available"; // default char titlestr[64]; switch (which) { case MENU_DOC_ABOUT: switch (game_doc_about_status) { case STATUS_NONE: impl = ""; break; case STATUS_UNPLAYABLE: impl = "Partially implemented (unplayable)"; break; case STATUS_PARTIAL: impl = "Partially implemented (playable)"; break; case STATUS_COMPLETE: impl = "Fully implemented"; break; default: assert (0); } snprintf (titlestr, 64, "About %s - gtkboard", menu_get_game_name()); #if GTK_MAJOR_VERSION > 1 msgstr = g_strdup_printf ("%s %s\nStatus: %s\nURL: http://gtkboard.sourceforge.net/games/%s", #else msgstr = g_strdup_printf ("%s -- %s\nStatus: %s\nURL: http://gtkboard.sourceforge.net/games/%s", #endif opt_game->name, game_single_player ? "Single player game" : "Two player game", impl, opt_game->name ); menu_show_dialog (titlestr, msgstr); g_free (msgstr); return; case MENU_DOC_RULES: snprintf (titlestr, 64, "%s rules - gtkboard", menu_get_game_name()); if (game_doc_rules) msgstr = game_doc_rules; break; case MENU_DOC_STRATEGY: snprintf (titlestr, 64, "%s strategy - gtkboard", menu_get_game_name()); if (game_doc_strategy) msgstr = game_doc_strategy; break; case MENU_DOC_HISTORY: snprintf (titlestr, 64, "%s history - gtkboard", menu_get_game_name()); if (game_doc_history) msgstr = game_doc_history; break; default: assert (0); } vbar = gtk_vscrollbar_new(NULL); #if GTK_MAJOR_VERSION == 1 dialog = gtk_dialog_new(); gtk_window_set_title (GTK_WINDOW (dialog), titlestr); hbox = gtk_hbox_new (FALSE, 0); msgarea = gtk_text_new (NULL, gtk_range_get_adjustment (GTK_RANGE (vbar))); gtk_text_set_word_wrap (GTK_TEXT (msgarea), TRUE); gtk_text_insert (GTK_TEXT (msgarea), NULL, NULL, NULL, msgstr, -1); gtk_box_pack_start (GTK_BOX (hbox), msgarea, TRUE, TRUE, 10); gtk_box_pack_start (GTK_BOX (hbox), vbar, FALSE, FALSE, 0); okay_button = gtk_button_new_with_label(" OK "); gtk_signal_connect_object (GTK_OBJECT (okay_button), "clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy), (gpointer) dialog); gtk_box_pack_start (GTK_BOX (GTK_DIALOG(dialog)->action_area), okay_button, FALSE, FALSE, 0); gtk_widget_grab_focus (okay_button); // contributed by Paddu gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), hbox); #else dialog = gtk_dialog_new_with_buttons (titlestr, GTK_WINDOW (main_window), 0, GTK_STOCK_OK, GTK_RESPONSE_NONE, NULL); gtk_window_set_default_size (GTK_WINDOW (dialog), 400, 300); g_signal_connect_swapped (GTK_OBJECT (dialog), "response", G_CALLBACK (gtk_widget_destroy), GTK_OBJECT (dialog)); msgarea = gtk_text_view_new (); gtk_text_view_set_editable (GTK_TEXT_VIEW (msgarea), FALSE); gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (msgarea), GTK_WRAP_WORD); gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (msgarea), FALSE); gtk_text_buffer_set_text (gtk_text_view_get_buffer (GTK_TEXT_VIEW (msgarea)), msgstr, -1); scrwin = gtk_scrolled_window_new (NULL, gtk_range_get_adjustment (GTK_RANGE(vbar))); gtk_container_add (GTK_CONTAINER (scrwin), msgarea); gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), scrwin); #endif gtk_widget_show_all (dialog); } void menu_put_level (char *level_name) { gchar path[128] = "/Game/Levels/"; strcat (path, level_name); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gtk_item_factory_get_widget (menu_factory, path)), TRUE); } gchar *menu_get_game_name () { if (game_levels) return game_levels[0].game->name; else return opt_game->name; } gchar *menu_get_game_name_with_level () { static gchar name[128]; if (game_levels) { gchar *tempstr; GameLevel *level = game_levels; while (level->game != opt_game) { assert (level->name); level++; } tempstr = g_strdup_printf ("%s (%s)", game_levels[0].game->name, level->name); strncpy (name, tempstr, 127); return name; } else return opt_game->name; } void menu_set_level (gpointer data, guint which, GtkWidget *widget) { Game *old_game; if (!GTK_CHECK_MENU_ITEM(widget)->active) return; if (!state_gui_active) return; assert (game_levels); old_game = game_levels[which].game; ui_terminate_game (); opt_game = old_game; gtk_label_set_text (GTK_LABEL (sb_game_label), menu_get_game_name_with_level ()); ui_start_game(); } GtkWidget *menu_recent_widgets[NUM_RECENT_GAMES] = {NULL}; static void menu_recent_game_cb (GtkWidget *widget, gpointer gamename) { int i; gchar *name = gamename; Game *old_game = opt_game; for (i=0; iname, name)) { menu_cleanup_var_menus (); if (opt_game) ui_terminate_game (); opt_game = games[i]; if (old_game == opt_game) menu_start_game (); else menu_put_game (); } } } void menu_insert_game_item (gchar *gamename, int position) { GtkWidget * child; GtkMenu *game_menu; int offset = 1; // number of menu entries before start of recent items game_menu = (GtkMenu *) gtk_item_factory_get_widget (menu_factory, "/Game"); assert (game_menu); child = gtk_menu_item_new_with_label (gamename); gtk_menu_shell_insert (GTK_MENU_SHELL (game_menu), child, position - 1 + offset); gtk_widget_show(GTK_WIDGET (child)); menu_recent_widgets [position-1] = child; gtk_signal_connect (GTK_OBJECT (child), "activate", GTK_SIGNAL_FUNC (menu_recent_game_cb), (gpointer) gamename); } void menu_insert_recent_game (gchar *gamename) { int i, j; gchar *tmp; gchar *tmpname; for (i=0; i0; j--) { if (j == NUM_RECENT_GAMES) continue; tmpname = prefs_get_config_val (tmp = g_strdup_printf ("recent_game_%d", j)); g_free (tmp); prefs_set_config_val (tmp = g_strdup_printf ("recent_game_%d", j+1), tmpname); menu_recent_widgets [j] = menu_recent_widgets[j-1]; } prefs_set_config_val ("recent_game_1", gamename); menu_insert_game_item (gamename, 1); } void menu_start_game () { ui_start_game (); { int i; GtkItemFactoryEntry help_items [3]; help_items[0].path = g_strdup_printf ("/Help/%s", opt_game->name); help_items[0].accelerator = NULL; help_items[0].callback = NULL; help_items[0].item_type = ""; gtk_item_factory_create_item (menu_factory, help_items, NULL, 1); help_items[0].path = g_strdup_printf ("/Help/%s/_About", opt_game->name); help_items[0].callback_action = MENU_DOC_ABOUT; help_items[1].path = g_strdup_printf ("/Help/%s/_Rules", opt_game->name); help_items[1].callback_action = MENU_DOC_RULES; help_items[2].path = g_strdup_printf ("/Help/%s/_Strategy", opt_game->name); help_items[2].callback_action = MENU_DOC_STRATEGY; help_items[3].path = g_strdup_printf ("/Help/%s/_History", opt_game->name); help_items[3].callback_action = MENU_DOC_HISTORY; for (i=0; i<4; i++) { help_items[i].accelerator = NULL; help_items[i].callback = menu_show_game_doc; help_items[i].item_type = ""; } gtk_item_factory_create_items (menu_factory, 4, help_items, NULL); } gtk_label_set_text (GTK_LABEL (sb_game_label), menu_get_game_name_with_level()); if (game_levels) { int cnt, i; GtkItemFactoryEntry *level_items, level_item; for (cnt = 0; game_levels[cnt].name; cnt++) ; level_items = g_new0 (GtkItemFactoryEntry, cnt); /* level_item.path = "/Game/Levels"; level_item.accelerator = NULL; level_item.callback = NULL; level_item.item_type = ""; gtk_item_factory_create_item (menu_factory, &level_item, NULL, 1); */ gtk_widget_show (gtk_item_factory_get_item (menu_factory, "/Game/Levels")); for (i=0; i": g_strdup_printf ("/Game/Levels/%s", game_levels[0].name); // FIXME: possible memory leak here } gtk_item_factory_create_items (menu_factory, cnt, level_items, NULL); } menu_insert_recent_game (menu_get_game_name ()); } void menu_cleanup_var_menus () { gchar *tempstr; if (opt_game) { gchar *name = menu_get_game_name(); // FIXME: do we need to delete recursively? gtk_item_factory_delete_item (menu_factory, tempstr = g_strdup_printf ("/Help/%s", name)); g_free (tempstr); } if (game_levels) { gchar *tmp; int i; for (i = 0; game_levels[i].name; i++) { gtk_item_factory_delete_item (menu_factory, tmp = g_strdup_printf ("/Game/Levels/%s", game_levels[i].name)); g_free (tmp); } gtk_widget_hide (gtk_item_factory_get_widget (menu_factory, "/Game/Levels")); } } void menu_set_game (gpointer data, guint which, GtkWidget *widget) { if (!GTK_CHECK_MENU_ITEM(widget)->active) return; if (!state_gui_active) return; g_assert (which >= 0 && which < num_games); menu_cleanup_var_menus (); if (opt_game) ui_terminate_game (); opt_game = games[which]; menu_start_game (); sb_update (); } void menu_set_delay_cb (gpointer data, guint delay, GtkWidget *widget) { if (!GTK_CHECK_MENU_ITEM(widget)->active) return; if (move_fout) { fprintf (move_fout, "MSEC_PER_MOVE %d\n", opt_delay = delay); fflush (move_fout); } } void menu_back_forw (gpointer data, guint what) { byte *move; switch (what) { case MENU_BACK: if (!game_allow_back_forw) break; if (!opt_game) break; if (!game_allow_undo) ui_stopped = TRUE; if (move_fout) { fprintf (move_fout, "BACK_MOVE \n"); fflush (move_fout); } move = move_fread_ack (move_fin); if (!move) { sb_error ("Initial position. Can't go back.", FALSE); break; } board_apply_refresh (move, NULL); if (!game_single_player) cur_pos.player = (cur_pos.player == WHITE ? BLACK : WHITE); cur_pos.num_moves --; if (game_single_player && !game_allow_undo) { if (!ui_cheated && game_scorecmp) sb_message ("You cheated! No highscore for this game.", FALSE); ui_cheated = TRUE; } // FIXME: there should be only one round of communication // in which client gets both the move and who_won ui_check_who_won (); if (game_reset_uistate) game_reset_uistate(); sb_update (); break; case MENU_FORW: if (!game_allow_back_forw) break; if (!opt_game) break; if (move_fout) { fprintf (move_fout, "FORW_MOVE \n"); fflush (move_fout); } move = move_fread_ack (move_fin); if (!move) { sb_error ("Final position. Can't go forward.", FALSE); break; } board_apply_refresh (move, NULL); if (!game_single_player) cur_pos.player = (cur_pos.player == WHITE ? BLACK : WHITE); cur_pos.num_moves ++; ui_check_who_won (); if (game_reset_uistate) game_reset_uistate(); sb_update (); break; default: assert (0); } } //! This function is no longer used. Eval function should be set only from the command line. void menu_set_eval_function () { int i; GtkWidget *menu, *menuitem; GtkItemFactoryEntry heur_item; static HeurTab *oldtab = NULL; char *colors[2], **color, pathbuf[64]; return; colors[0] = game_white_string; colors[1] = game_black_string; for (color = colors; color <= colors+1; color++) { if (oldtab) for (i=0; oldtab[i].name; i++) { char *path = g_strdup_printf ("/Settings/Eval function/%s/%s", *color, oldtab[i].name); gtk_item_factory_delete_item (menu_factory, path); g_free (path); } if (game_htab) for (i=0; game_htab[i].name; i++) { heur_item.path = g_strdup_printf ("/Settings/Eval function/%s/%s", *color, game_htab[i].name); if (i == 0) strncpy (pathbuf, heur_item.path, 63); heur_item.accelerator = NULL; heur_item.callback = NULL; heur_item.callback_action = 0; heur_item.item_type = (i == 0 ? "" : pathbuf); gtk_item_factory_create_item (menu_factory, &heur_item, NULL, 1); g_free (heur_item.path); } } oldtab = game_htab; } void menu_enable_sound_cb (gpointer data, guint what) { sound_set_enabled (what == 0 ? FALSE : TRUE); sb_update (); } void sb_message_dialog_show (char *msg, gboolean error) { GtkWidget *dialog; #if GTK_MAJOR_VERSION > 1 dialog = gtk_message_dialog_new (GTK_WINDOW (main_window), GTK_DIALOG_MODAL, error ? GTK_MESSAGE_ERROR : GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "%s", msg); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); #else menu_show_dialog ("Error - gtkboard", msg); #endif } void sb_error (char *msg, gboolean serious) { if (!state_gui_active) { fprintf (stderr, "Fatal error: %s\n", msg); exit (2); } if (serious) //menu_show_dialog ("Error - gtkboard", msg); sb_message_dialog_show (msg, TRUE); else sb_messagebar_message (msg); } void sb_message (char *msg, gboolean serious) { if (!state_gui_active) fprintf (stderr, "%s\n", msg); else { if (serious) //sb_error (msg, serious); sb_message_dialog_show (msg, FALSE); else sb_messagebar_message (msg); } } gchar *sb_ftime(int temps) { static gchar ftime[10] = " : : "; ftime[6] = temps % 10 + '0'; temps /= 10; ftime[4] = temps % 10 + '0'; temps /= 10; ftime[3] = temps % 6 + '0'; temps /= 6; ftime[1] = temps % 10 + '0'; temps /= 10; ftime[0] = temps % 6 + '0'; temps /= 6; return ftime; } static int sb_human_time = 0; void sb_reset_human_time () { gchar *tempstr; sb_human_time = 0; if (!state_gui_active) return; gtk_label_set_text (GTK_LABEL(sb_time_label), tempstr = g_strdup_printf ("Time:%s", sb_ftime(sb_human_time))); g_free (tempstr); } int sb_get_human_time () { return sb_human_time; } static int sb_last_msg_time = -1; void sb_messagebar_message (gchar *msg) { sb_last_msg_time = 0; strncpy (sb_message_str, msg, SB_MESSAGE_STRLEN-1); sb_update (); } void menu_update () // first call all the sens and then all the desens { // FIXME: isn't there a more elegant way to do this? gboolean machine_thinking, machine_not_thinking, no_game, single_player, two_players, no_back_forw, eval_fn; machine_thinking = (!ui_stopped && player_to_play == MACHINE); machine_not_thinking = !machine_thinking; no_game = opt_game ? FALSE : TRUE; single_player = game_single_player; two_players = !single_player; no_back_forw = !game_allow_back_forw; eval_fn = game_htab ? FALSE : TRUE; if (!machine_thinking) menu_sensitize (MENU_SENS_MACHINE_THINKING, TRUE); if (!machine_not_thinking) menu_sensitize (MENU_SENS_MACHINE_NOT_THINKING, TRUE); if (!no_game) menu_sensitize (MENU_SENS_NO_GAME, TRUE); if (!single_player) menu_sensitize (MENU_SENS_SINGLE_PLAYER, TRUE); if (!two_players) menu_sensitize (MENU_SENS_TWO_PLAYERS, TRUE); if (!no_back_forw) menu_sensitize (MENU_SENS_NO_BACK_FORW, TRUE); if (!ui_stopped) menu_sensitize (MENU_SENS_UI_STOPPED, TRUE); if (!eval_fn) menu_sensitize (MENU_SENS_EVAL_FUNCTION, TRUE); if (machine_thinking) menu_sensitize (MENU_SENS_MACHINE_THINKING, FALSE); if (machine_not_thinking) menu_sensitize (MENU_SENS_MACHINE_NOT_THINKING, FALSE); if (no_game) menu_sensitize (MENU_SENS_NO_GAME, FALSE); if (single_player) menu_sensitize (MENU_SENS_SINGLE_PLAYER, FALSE); if (two_players) menu_sensitize (MENU_SENS_TWO_PLAYERS, FALSE); if (no_back_forw) menu_sensitize (MENU_SENS_NO_BACK_FORW, FALSE); if (ui_stopped) menu_sensitize (MENU_SENS_UI_STOPPED, FALSE); if (eval_fn) menu_sensitize (MENU_SENS_EVAL_FUNCTION, FALSE); // TODO: express this in data rather than code if (ui_stopped) { gtk_widget_show (gtk_item_factory_get_widget (menu_factory, "/Game/Start")); gtk_widget_hide (gtk_item_factory_get_widget (menu_factory, "/Game/Pause")); } else { gtk_widget_hide (gtk_item_factory_get_widget (menu_factory, "/Game/Start")); gtk_widget_show (gtk_item_factory_get_widget (menu_factory, "/Game/Pause")); } if (sound_get_enabled ()) { gtk_widget_show (gtk_item_factory_get_widget (menu_factory, "/Settings/Disable Sound")); gtk_widget_hide (gtk_item_factory_get_widget (menu_factory, "/Settings/Enable Sound")); } else { gtk_widget_hide (gtk_item_factory_get_widget (menu_factory, "/Settings/Disable Sound")); gtk_widget_show (gtk_item_factory_get_widget (menu_factory, "/Settings/Enable Sound")); } if (no_game) { gtk_widget_hide (menu_info_bar); gtk_widget_hide (menu_info_separator); } else { gtk_widget_show (menu_info_bar); gtk_widget_show (menu_info_separator); } if (game_levels) gtk_widget_show (gtk_item_factory_get_item (menu_factory, "/Game/Levels")); else gtk_widget_hide (gtk_item_factory_get_item (menu_factory, "/Game/Levels")); if (game_doc_about_status == STATUS_COMPLETE || game_doc_about_status == STATUS_NONE) { gtk_widget_hide (menu_warning_bar); gtk_widget_hide (sb_warning_separator); } else { gtk_widget_show (menu_warning_bar); gtk_widget_show (sb_warning_separator); } } //! NOTE: sb_update() is idempotent. When in doubt, call sb_update(). void sb_update () { char player[5] = "?/?"; if (!state_gui_active) return; menu_update (); if (game_single_player) { gtk_widget_hide (sb_player_label); gtk_widget_hide (sb_who_label); gtk_widget_hide (sb_player_separator); gtk_widget_hide (sb_who_separator); gtk_widget_show (sb_time_separator); gtk_widget_show (sb_time_label); } else { gtk_widget_show (sb_player_label); gtk_widget_show (sb_who_label); gtk_widget_show (sb_player_separator); gtk_widget_show (sb_who_separator); gtk_widget_hide (sb_time_separator); gtk_widget_hide (sb_time_label); if (ui_white == HUMAN) player[0] = 'H'; if (ui_white == MACHINE) player[0] = 'M'; if (ui_black == HUMAN) player[2] = 'H'; if (ui_black == MACHINE) player[2] = 'M'; gtk_label_set_text (GTK_LABEL(sb_player_label), ui_white != NONE ? player : "File"); gtk_label_set_text (GTK_LABEL(sb_who_label), cur_pos.player == WHITE ? game_white_string : game_black_string); } gtk_label_set_text (GTK_LABEL(sb_score_label), sb_score_str); sb_set_turn_image(); sb_set_cursor (); } gboolean sb_update_periodic () { static gboolean first = TRUE; if (!state_gui_active) return TRUE; if (sb_message_str[0] != '\0' && sb_last_msg_time < 0) sb_last_msg_time = 0; if (sb_message_str[0] == '\0') sb_last_msg_time = -1; if (sb_last_msg_time >= 0) sb_last_msg_time++; if (sb_last_msg_time >= 30) sb_message_str[0] = '\0'; gtk_label_set_text (GTK_LABEL(sb_message_label), sb_message_str); { gchar *tempstr = NULL; if (!ui_stopped && (player_to_play == HUMAN || game_single_player)) gtk_label_set_text (GTK_LABEL(sb_time_label), tempstr = g_strdup_printf ("Time:%s", sb_ftime(sb_human_time++))); if (first) gtk_label_set_text (GTK_LABEL(sb_time_label), tempstr = g_strdup_printf ("Time:%s", sb_ftime(sb_human_time))); if (tempstr) g_free (tempstr); } first = FALSE; return TRUE; } gtkboard/src/menu.h000066400000000000000000000054651153150217100145650ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ #ifndef _MENU_H_ #define _MENU_H_ #include #include #include #include "game.h" enum {MENU_START_GAME = 1, MENU_STOP_GAME, MENU_RESET_GAME}; enum {MENU_BACK = 1, MENU_FORW}; enum {MENU_SENS_MACHINE_THINKING = 1, MENU_SENS_MACHINE_NOT_THINKING, MENU_SENS_NO_GAME, MENU_SENS_NO_BACK_FORW, MENU_SENS_SINGLE_PLAYER, MENU_SENS_TWO_PLAYERS, MENU_SENS_UI_STOPPED, MENU_SENS_EVAL_FUNCTION}; enum {MENU_DOC_ABOUT, MENU_DOC_RULES, MENU_DOC_STRATEGY, MENU_DOC_HISTORY}; void menu_resensitize (int); void menu_desensitize (int); void menu_start_stop_game (gpointer , guint ); void menu_set_eval_function (); void menu_load_file_dialog (); void menu_save_file_dialog (); void menu_set_delay_cb (gpointer data, guint delay, GtkWidget *widget); void menu_back_forw (gpointer data, guint what); void menu_set_player (gpointer *, guint, GtkWidget *); void menu_put_player (gboolean); void menu_start_game (); void menu_put_game (); void menu_board_flip_cb (); void menu_set_game (gpointer, guint, GtkWidget *); void menu_insert_game_item (gchar *, int); void menu_put_level (char *); void menu_enable_sound_cb (gpointer data, guint what); void sb_set_score (gchar *score); void sb_update (); gboolean sb_update_periodic (); void sb_reset_human_time (); int sb_get_human_time (); void menu_help_home_page (gpointer); void menu_show_about_dialog (gpointer); void menu_show_begging_dialog (gpointer); void menu_show_dialog (gchar *, gchar *); void menu_show_game_doc (gpointer, guint); gchar *menu_get_game_name (); gchar *menu_get_game_name_with_level (); void sb_set_turn_image (); extern GtkWidget *sb_message_label, *sb_game_label, *sb_score_label, *sb_who_label, *sb_player_label, *sb_time_label, *sb_turn_image, *menu_main, *menu_info_bar, *menu_info_separator, *menu_warning_bar; extern GtkWidget *sb_game_separator, *sb_player_separator, *sb_who_separator, *sb_score_separator, *sb_time_separator, *sb_turn_separator, *sb_warning_separator; extern GtkItemFactory *menu_factory; #endif gtkboard/src/move.c000066400000000000000000000075531153150217100145620ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ #include "move.h" #include "game.h" #include #include #include #include #include extern int board_wid, board_heit; // FIXME: this is ugly /*extern void board_refresh_cell (int, int); extern void board_set_cell (int, int, byte); */ int movcpy (byte *dest, byte *src) { int i; for (i=0; i%3 || src[i] != -1; i++) dest[i] = src[i]; dest[i] = -1; return i; } gboolean movcmp_literal (byte *move1, byte *move2) { int i; assert (move1); assert (move2); for (i=0; ; i++) { if (move1[i] == -1 && move2[i] == -1) return TRUE; if (move1[i] != move2[i]) return FALSE; } } byte *movlist_next (byte *move) { while (*move != -1) move += 3; return move + 1; } void move_apply (byte *board, byte *move) { int i, x, y; if (!move) return; for (i=0; move[3*i] != -1; i++) { x = move[3*i]; y = move[3*i+1]; board [y * board_wid + x] = move [3*i+2]; } } void move_fwrite (byte *move, FILE *fout) { int i; if (!move) { fprintf (stderr, "move_fwrite got NULL arg\n"); return; } /* write in human friendly format -- start row and col num from 1 not 0*/ for (i=0; move[3*i] != -1; i++) fprintf (fout, "%d %d %d ", move[3*i] + 1, move[3*i+1] + 1, move[3*i+2]); fprintf (fout, "\n"); fflush (fout); } void move_fwrite_ack (byte *move, FILE *fout) { fprintf (fout, "ACK "); move_fwrite (move, fout); } void move_fwrite_nak (char *str, FILE *fout) { fprintf (fout, "NAK "); if (str) fprintf (fout, "%s", str); fprintf (fout, "\n"); fflush (fout); } byte *move_read (char *line) { static byte movbuf[1024]; byte *new, *tmp; int nc = 0; tmp = line; while (1) { movbuf[nc] = (byte) strtol (tmp, (char **) &new, 10); if (new == tmp) break; tmp = new; if (nc % 3 == 0) { assert (movbuf[nc] >= 1 && movbuf[nc] <= board_wid); movbuf[nc]--; } else if (nc % 3 == 1) { assert (movbuf[nc] >= 1 && movbuf[nc] <= board_heit); movbuf[nc]--; } nc++; } assert (nc % 3 == 0); movbuf[nc] = -1; return movbuf; } static byte linebuf [4096]; byte *move_fread (FILE *fin) { fgets (linebuf, 4096, fin); return move_read (linebuf); } byte *move_fread_ack (FILE *fin) { // FIXME: this is an ugly workaround for a bug which causes some junk data prefixing every move data. // Needs a real fix char *start; fgets (linebuf, 4096, fin); start = strstr (linebuf, "ACK"); if (!start) return NULL; return move_read (start + 4); /* fgets (linebuf, 4096, fin); //printf ("%s\n", linebuf); if (strncasecmp (linebuf, "ACK", 3)) return NULL; return move_read (linebuf + 4); */ } char *line_read (FILE *fin) { fgets (linebuf, 4096, fin); return linebuf; } byte *movdup (byte *move) { byte *newmov; int len; for (len=0; move[3*len] != -1; len++) ; newmov = (byte *) malloc (3 * len + 1); memcpy (newmov, move, 3 * len + 1); return newmov; } byte *mov_getinv (byte *board, byte *move) { int i; byte *inv = movdup (move); for (i=0; move[3*i] != -1; i++) { int x = move [3*i], y = move [3*i+1]; inv [3*i+2] = board [y * board_wid + x]; } return inv; } gtkboard/src/move.h000066400000000000000000000063051153150217100145610ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ #ifndef _MOVE_H_ #define _MOVE_H_ /** \file move.h \brief Operations on moves. A move is an array of bytes, which are simply gint8s. A move is a sequence of movelets terminated by -1. A movelet is a sequence of 3 bytes which describes what happens to a particular square in the board. Movelet format is "x y val" where val is the new value of the square (x, y). Thus the move corresponding to "1. e4" in chess is "4 1 0 4 3 6 -1" (i.e, square (4, 0), which means e2 becomes empty, and square (4, 3), which is e4, becomes 6, assuming that white pawn is represented by 6. Note that row and col numbers start from 0.) When the move is written to file or sent to the engine, it will be converted to a human friendly format. */ #include #include #ifndef byte #define byte gint8 #endif //! Make a copy of the move /** The new move is malloc()d and so must be free()d by the caller.*/ byte *movdup (byte *); //! Compares two moves byte by byte. Literal not semantic comparison. Returns TRUE if the moves are equal gboolean movcmp_literal (byte *move1, byte *move2); //! Makes the move src to the move dest. /** Memory is assumed to have already been allocated for dest. */ int movcpy (byte *dest, byte *src); //! Returns the inverse of a move in the given board /** The move format does not specify the old value of the squares. So it is not possible to go from the new #Pos to the old Pos. To be able to do this we need to get the "inverse" of the move using the current board*/ byte *mov_getinv (byte *, byte *); //! Applies the move to the board. void move_apply (byte *, byte *); //! Writes a move to the pipe in human friendly format void move_fwrite (byte *, FILE *); //! Parses a string into a move byte * move_read (char *); //! Reads a move from the pipe. byte *move_fread (FILE *); //! Same as move_fread(), except it expects the stream to begin with "ACK ". Returns NULL otherwise. byte *move_fread_ack (FILE *); //! Reads a line from the stream. char *line_read (FILE *); //! Same as move_fwrite(), but precedes line with "ACK ". void move_fwrite_ack (byte *, FILE *); //! Writes "NAK " followed by arbitrary error message. void move_fwrite_nak (char *, FILE *); //! Returns the next move in a movlist. /** A movlist is also an array of bytes. It is a sequence of moves terminated by -2 */ byte *movlist_next (byte *); #endif gtkboard/src/ninemm.c000066400000000000000000000165131153150217100150730ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ #include #include #include #include #include "game.h" #include "../pixmaps/ninemm_bg.xpm" #define NINEMM_CELL_SIZE 36 #define NINEMM_NUM_PIECES 2 #define NINEMM_BOARD_WID 7 #define NINEMM_BOARD_HEIT 7 char ninemm_colors[6] = {200, 200, 200, 140, 140, 140}; static char *ninemm_wp_xpm[] = { "36 36 2 1", " c none", ". c blue", " ", " ", " ", " ", " ", " ", " ", " ", " .................... ", " .................... ", " .................... ", " .................... ", " .................... ", " .................... ", " .................... ", " .................... ", " .................... ", " .................... ", " .................... ", " .................... ", " .................... ", " .................... ", " .................... ", " .................... ", " .................... ", " .................... ", " .................... ", " .................... ", " ", " ", " ", " ", " ", " ", " ", " ", }; static char *ninemm_bp_xpm[] = { "36 36 2 1", " c none", ". c red", " ", " ", " ", " ", " ", " ", " ", " ", " .................... ", " .................... ", " .................... ", " .................... ", " .................... ", " .................... ", " .................... ", " .................... ", " .................... ", " .................... ", " .................... ", " .................... ", " .................... ", " .................... ", " .................... ", " .................... ", " .................... ", " .................... ", " .................... ", " .................... ", " ", " ", " ", " ", " ", " ", " ", " ", }; static char ** ninemm_pixmaps[] = { ninemm_wp_xpm, ninemm_bp_xpm }; int ninemm_init_pos [NINEMM_BOARD_WID*NINEMM_BOARD_HEIT] = {0}; #define NINEMM_EMPTY 0 #define NINEMM_WP 1 #define NINEMM_BP 2 void ninemm_init (); int ninemm_getmove (Pos *, int, int, GtkboardEventType, Player, byte **, int **); void ninemm_reset_uistate (); Game Ninemm = { NINEMM_CELL_SIZE, NINEMM_BOARD_WID, NINEMM_BOARD_HEIT, NINEMM_NUM_PIECES, ninemm_colors, ninemm_init_pos, ninemm_pixmaps, "Nine Men's Morris", NULL, ninemm_init}; static int ninemm_allowed [] = { 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, }; static int ninemm_mills [][3][3] = { /* triples of squares that form mills The four rotations of these will produce all the mills */ { {0, 0}, {3, 0}, {6, 0} }, { {1, 1}, {3, 1}, {5, 1} }, { {2, 2}, {3, 0}, {4, 2} }, { {0, 0}, {1, 1}, {2, 2} }, }; void ninemm_init () { game_white_string = "Blue"; game_black_string = "Red"; game_bg_pixmap = ninemm_bg_xpm; game_getmove = ninemm_getmove; game_reset_uistate = ninemm_reset_uistate; game_doc_about_status = STATUS_UNPLAYABLE; game_doc_about = "Ninemm\n" "Two player game\n" "Status: Partially implemented\n" "URL: "GAME_DEFAULT_URL ("ninemm"); } static int curx = -1, cury = -1; // does the move (x, y) complete a mill for player static gboolean makes_mill (byte *board, Player player, int x, int y) { int i, j; int thepiece = player == WHITE ? NINEMM_WP : NINEMM_BP; for (i=x-2; i<=x; i++) { gboolean found = TRUE; if (i < 0 || i >= board_wid-2) continue; for (j=i; j<=i+2; j++) if (j != x && board [y * board_wid + j] != thepiece) found = FALSE; if (found) return TRUE; } for (i=y-2; i<=y; i++) { gboolean found = TRUE; if (i < 0 || i >= board_heit-2) continue; for (j=i; j<=i+2; j++) if (j != y && board [j * board_wid + x] != thepiece) found = FALSE; if (found) return TRUE; } return FALSE; } int ninemm_getmove (Pos *pos, int x, int y, GtkboardEventType type, Player to_play, byte **movp, int ** rmovep) { int val; static byte move[16]; static int rmove[16]; if (type != GTKBOARD_BUTTON_RELEASE) return 0; if (!ninemm_allowed [y * board_wid + x]) return -1; if (curx < 0) { if (pos->board [y * board_wid + x] != NINEMM_EMPTY) return -1; if (makes_mill (pos->board, to_play, x, y)) { curx = x; cury = y; rmove[0] = x; rmove[1] = y; rmove[2] = RENDER_REPLACE | ((to_play == WHITE ? NINEMM_WP : NINEMM_BP) << 8); rmove[3] = -1; *rmovep = rmove; return 0; } else { move[0] = x; move[1] = y; move[2] = (to_play == WHITE ? NINEMM_WP : NINEMM_BP); move[3] = -1; *movp = move; return 1; } } if (pos->board [y * board_wid + x] != (to_play == WHITE ? NINEMM_BP : NINEMM_WP)) return -1; rmove[0] = curx; rmove[1] = cury; rmove[2] = 0; rmove[3] = -1; *rmovep = rmove; move[0] = x; move[1] = y; move[2] = 0; move[3] = curx; move[4] = cury; move[5] = (to_play == WHITE ? NINEMM_WP : NINEMM_BP); move[6] = -1; *movp = move; curx = -1; cury = -1; return 1; } void ninemm_reset_uistate () { curx = cury = -1; } gtkboard/src/othello.c000066400000000000000000000365011153150217100152550ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ #include #include #include #include #include #include "game.h" #include "aaball.h" #define OTHELLO_CELL_SIZE 55 #define OTHELLO_NUM_PIECES 2 char othello_colors[6] = {200, 200, 200, 140, 140, 140}; int othello_init_pos [8*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 , 2 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 2 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , }; int othello6x6_init_pos [6*6] = { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 2 , 1 , 0 , 0 , 0 , 0 , 1 , 2 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , }; #define OTHELLO_WP 1 #define OTHELLO_BP 2 #define OTHELLO_EMPTY 0 int othello_getmove (Pos *, int, int, GtkboardEventType, Player, byte **, int **); int othello_getmove_kb (Pos *pos, int key, byte **movp, int **rmovp); void othello_init (); ResultType othello_who_won (Pos *, Player, char **); ResultType othello_eval (Pos *, Player, float *); ResultType othello_eval_incr (Pos *, byte *, float *); byte * othello_movegen (Pos *); char ** othello_get_pixmap (int, int); guchar *othello_get_rgbmap (int, int); gboolean othello_use_incr_eval (Pos *pos); Game Othello = { OTHELLO_CELL_SIZE, 8, 8, OTHELLO_NUM_PIECES, othello_colors, othello_init_pos, NULL, "Othello", "Othello", othello_init}; Game Othello6x6 = { OTHELLO_CELL_SIZE, 6, 6, OTHELLO_NUM_PIECES, othello_colors, othello6x6_init_pos, NULL, "Othello 6x6", "Othello", othello_init}; void othello_init (Game *game) { game_getmove = othello_getmove; game_getmove_kb = othello_getmove_kb; game_who_won = othello_who_won; game_eval = othello_eval; game_eval_incr = othello_eval_incr; game_use_incr_eval = othello_use_incr_eval; game_movegen = othello_movegen; game_get_rgbmap = othello_get_rgbmap; game_white_string = "Red"; game_black_string = "Blue"; game_file_label = FILERANK_LABEL_TYPE_ALPHA; game_rank_label = FILERANK_LABEL_TYPE_NUM | FILERANK_LABEL_DESC; game_doc_about_status = STATUS_COMPLETE; if (game == &Othello) game_doc_about = "Othello\n" "Two player game\n" "Status: Fully implemented\n" "URL: "GAME_DEFAULT_URL ("othello"); else game_doc_about = "Othello 6x6\n" "Two player game\n" "Status: Fully implemented\n" "URL: "GAME_DEFAULT_URL ("othello6x6"); game_doc_rules = "Two players take turns in placing balls of either color. The objective is to get as many balls of your color as possible.\n" "\n" "When you place a ball in such a way that two of your balls sandwich one or more of the opponent's balls along a line (horizontal, vertical, or diagonal), then the sandwiched balls change to your color. You must move in such a way that at least one switch happens.\n" "\n" "If you don't have a move, you pass by hitting space or clicking on an empty square." ; game_doc_strategy = "The number of balls of either color at a given time is, paradoxically, a _very_ poor indicator of who has the advantage. This is because balls can flip color en masse and wildly, especially during the last few moves.\n" "\n" "Indeed, in the beginning you should try to minimize the number of balls you have. The key is mobility. You must strive to maximize your number of legal moves so that you can try to force your opponent into making bad moves.\n" "\n" "The corners are key squares, because corner balls never flip. If your opponent blunders into giving you a corner before the final stages of the game, you are practically assured of a win.\n"; } char ** othello_get_pixmap (int idx, int color) { int fg, bg, i; char *colors; static char pixbuf[OTHELLO_CELL_SIZE*(OTHELLO_CELL_SIZE)+1]; colors = othello_colors; fg = (idx == OTHELLO_WP ? 0xee << 16 : 0xee); if (color == BLACK) colors += 3; for(i=0, bg=0;i<3;i++) { int col = colors[i]; if (col<0) col += 256; bg += col * (1 << (16-8*i));} return pixmap_ball_gen(55, pixbuf, fg, bg, 17.0, 30.0); } guchar *othello_get_rgbmap (int idx, int color) { static guchar rgbbuf[3*OTHELLO_CELL_SIZE*OTHELLO_CELL_SIZE]; int fg, bg, i; char *colors; colors = othello_colors; fg = (idx == OTHELLO_WP ? 0xee << 16 : 0xee); if (color == BLACK) colors += 3; for(i=0, bg=0;i<3;i++) { int col = colors[i]; if (col<0) col += 256; bg += col * (1 << (16-8*i));} rgbmap_ball_shadow_gen(OTHELLO_CELL_SIZE, rgbbuf, fg, bg, 17.0, 30.0, 3); return rgbbuf; } static int incx[] = { -1, -1, -1, 0, 0, 1, 1, 1}; static int incy[] = { -1, 0, 1, -1, 1, -1, 0, 1}; static int get_sandwich_len (Pos *pos, int x0, int y0, int dx, int dy, byte player) { int x = x0 + dx, y = y0+dy, len=0; byte state; for (; x >= 0 && y >= 0 && x < board_wid && y < board_heit; x+=dx, y+=dy, len++) { if ((state = pos->board[y * board_wid + x]) == 0) return -1; else if (state == player) return len; } return -1; } // does player have a move in this position static gboolean hasmove (Pos *pos, Player player) { int i, x, y, found = FALSE; for (x=0; xboard [y * board_wid + x] != OTHELLO_EMPTY) continue; for (i=0; i<8; i++) { if (get_sandwich_len (pos, x, y ,incx[i], incy[i], player == WHITE ? OTHELLO_WP : OTHELLO_BP) > 0) { found = TRUE; break; } } } return found; } int othello_getmove_kb (Pos *pos, int key, byte **movp, int **rmovp) { static byte move[1]; if (key != GDK_space) return -1; if (hasmove (pos, pos->player)) return -1; move[0] = -1; *movp = move; return 1; } int othello_getmove (Pos *pos, int x, int y, GtkboardEventType type, Player to_play, byte **movp, int ** rmovep) { int i, j, sw_len, found=0; static byte move[128]; byte *temp = move; byte our = to_play == WHITE ? OTHELLO_WP : OTHELLO_BP; if (type != GTKBOARD_BUTTON_RELEASE) return 0; if (pos->board [y * board_wid + x] != OTHELLO_EMPTY) return -1; for (i=0; i<8; i++) { sw_len = get_sandwich_len (pos, x, y ,incx[i], incy[i], to_play == WHITE ? OTHELLO_WP : OTHELLO_BP); if (sw_len > 0) found = 1; for (j=1; j<=sw_len; j++) { *temp++ = x + incx[i] * j; *temp++ = y + incy[i] * j; *temp++ = our; } } if (!found) { if (hasmove (pos, to_play)) return -1; *temp++ = -1; *movp = move; } *temp++ = x; *temp++ = y; *temp++ = our; *temp++ = -1; *movp = move; return 1; } ResultType othello_who_won (Pos *pos, Player to_play, char **commp) { static char comment[32]; int i, wscore = 0, bscore = 0, who_idx ,x, y; char *who_str [3] = { "Red won", "Blue won", "its a tie" }; int found = 0; for (i=0; iboard[i] == OTHELLO_WP) wscore++; else if (pos->board[i] == OTHELLO_BP) bscore++; if (! (wscore == 0 || bscore == 0 || wscore + bscore == board_wid * board_heit)) { snprintf (comment, 32, "%d : %d", wscore, bscore); *commp = comment; return RESULT_NOTYET; } if (wscore > bscore) who_idx = 0; else if (wscore < bscore) who_idx = 1; else who_idx = 2; snprintf (comment, 32, "%s (%d : %d)", who_str [who_idx], wscore, bscore); *commp = comment; if (wscore > bscore) return RESULT_WHITE; if (wscore < bscore) return RESULT_BLACK; return RESULT_TIE; } byte * othello_movegen (Pos *pos) { int i, j, x, y, sw_len; byte movbuf [4096]; byte *movlist, *movp = movbuf; Player player = pos->player; byte our = player == WHITE ? OTHELLO_WP : OTHELLO_BP; gboolean game_over = TRUE; for (x=0; xboard [y * board_wid + x] != OTHELLO_EMPTY) continue; game_over = FALSE; for (i=0; i<8; i++) { sw_len = get_sandwich_len (pos, x, y ,incx[i], incy[i], player == WHITE ? OTHELLO_WP : OTHELLO_BP); if (sw_len > 0) found = TRUE; for (j=1; j<=sw_len; j++) { *movp++ = x + incx[i] * j; *movp++ = y + incy[i] * j; *movp++ = our; } } if (!found) continue; *movp++ = x; *movp++ = y; *movp++ = our; *movp++ = -1; } /* if we want to pass, we must return an empty move, NOT no move */ if (movp == movbuf && !game_over) *movp++ = -1; *movp++ = -2; movlist = (byte *) (malloc (movp - movbuf)); memcpy (movlist, movbuf, (movp - movbuf)); return movlist; } static float othello_eval_count (Pos *pos) { int i, sum=0; for (i=0; iboard [i] == OTHELLO_WP) sum++; else if (pos->board [i] == OTHELLO_BP) sum--; return sum; } static int othello_eval_mobility_count (Pos *pos, int color) { int i, x, y, found, sum = 0; byte our = (color == WHITE ? OTHELLO_WP : OTHELLO_BP); for (x=0; xboard [y * board_wid + x] != our) continue; found = 0; for (i=0; i<8; i++) if (get_sandwich_len (pos, x, y ,incx[i], incy[i], our) > 0) { found = 1; break; } if (found) sum++; } return sum; } static float othello_eval_mobility (Pos *pos) { return othello_eval_mobility_count (pos, WHITE) - othello_eval_mobility_count (pos, BLACK); } //! Faster approxmiation for mobility static float othello_eval_liberty (Pos *pos) { int i, j, k; int liberty = 0; for (i=0; iboard [j * board_wid + i] != OTHELLO_EMPTY) continue; for (k=0; k<8; k++) { int x = i + incx[k], y = j + incy[k]; int val; if (!ISINBOARD (x, y)) continue; if ((val = pos->board [y * board_wid + x]) == OTHELLO_EMPTY) continue; liberty += (val == OTHELLO_WP ? -1 : 1); } } return liberty; } static int othello_eval_num_moves (Pos *pos) { int i, sum=0; for (i=0; iboard [i] != OTHELLO_EMPTY) sum++; return sum; } enum { SAFE, UNSAFE, UNKNOWN }; static byte * safe_cached; /* TODO recursion sucks. reimplement this */ static int othello_eval_is_safe (Pos *pos, int x, int y, byte our) { if (x < 0 || y < 0 || x >= board_wid || y >= board_heit) return SAFE; if (pos->board [y * board_wid + x] != our) { return (safe_cached [y * board_wid + x] = UNSAFE);} if (safe_cached [y * board_wid + x] != UNKNOWN) return safe_cached [y * board_wid + x]; /* crucial to avoid infinite recursion */ safe_cached [y * board_wid + x] = UNSAFE; if (othello_eval_is_safe (pos, x - 1, y - 1, our) == UNSAFE && othello_eval_is_safe (pos, x + 1, y + 1, our) == UNSAFE) { return (safe_cached [y * board_wid + x] = UNSAFE);} if (othello_eval_is_safe (pos, x + 1, y - 1, our) == UNSAFE && othello_eval_is_safe (pos, x - 1, y + 1, our) == UNSAFE) { return (safe_cached [y * board_wid + x] = UNSAFE);} if (othello_eval_is_safe (pos, x - 1, y, our) == UNSAFE && othello_eval_is_safe (pos, x + 1, y, our) == UNSAFE) { return (safe_cached [y * board_wid + x] = UNSAFE);} if (othello_eval_is_safe (pos, x, y - 1, our) == UNSAFE && othello_eval_is_safe (pos, x, y + 1, our) == UNSAFE) { return (safe_cached [y * board_wid + x] = UNSAFE);} return (safe_cached [y * board_wid + x] = SAFE); } static float othello_eval_safe (Pos *pos) { int i, x, y, sum=0; if (pos->board [0 * board_wid + 0] == OTHELLO_EMPTY && pos->board [0 * board_wid + board_wid - 1] == OTHELLO_EMPTY && pos->board [(board_heit - 1) * board_wid + 0] == OTHELLO_EMPTY && pos->board [(board_heit - 1) * board_wid + board_wid - 1] == OTHELLO_EMPTY ) return 0; safe_cached = (byte *) malloc (board_wid * board_heit); assert (safe_cached); for (i=0; iboard [y * board_wid + x] == OTHELLO_WP && othello_eval_is_safe (pos, x, y, OTHELLO_WP) == SAFE) sum++; else if (pos->board [y * board_wid + x] == OTHELLO_BP && othello_eval_is_safe (pos, x, y, OTHELLO_BP) == SAFE) sum --; free (safe_cached); return sum; } /*static float othello_eval_dangerous (Pos *pos) { int i, j; float danger = 0; for (i=1; i<=6; i+=5) for (j=1; j<=6; j+=5) { if (pos->board[j * board_wid + i] == OTHELLO_WP) danger++; else if (pos->board[j * board_wid + i] == OTHELLO_BP) danger--; } for (i=1; i<=6; i+=5) for (j=0; j<=7; j+=7) { if (pos->board[j * board_wid + i] == OTHELLO_WP) danger += 0.3; else if (pos->board[j * board_wid + i] == OTHELLO_BP) danger -= 0.3; } for (i=0; i<=7; i+=7) for (j=1; j<=6; j+=5) { if (pos->board[j * board_wid + i] == OTHELLO_WP) danger += 0.3; else if (pos->board[j * board_wid + i] == OTHELLO_BP) danger -= 0.3; } return -danger; }*/ static float othello_eval_material (Pos *pos) { int i, material = 0; for (i=0; iboard[i] == OTHELLO_WP) material++; else if (pos->board[i] == OTHELLO_BP) material--; } return material; } static float othello_eval_weights (Pos *pos) { static int weights8 [4][4] = { { 500, -240, 85, 69 }, { 0 , -130, 49, 23 }, { 0 , 0, 1, 9 }, { 0 , 0, 0, 32 }, }; // FIXME: find a decent weight set static int weights6 [3][3] = { { 500, -200, 80}, { 0 , -300, 50}, { 0 , 0, 20}, }; int i, j, wtsum = 0; for (i=0; iboard[j * board_wid + i]; int x = i, y = j; if (val == OTHELLO_EMPTY) continue; if (pos->game == &Othello) { if (x > 3) x = 7-x; if (y > 3) y = 7-y; } else //if (pos->game == Othello6x6) { if (x > 2) x = 5-x; if (y > 2) y = 5-y; } if (x > y) {int tmp = y; y = x; x = tmp;} wtsum += (pos->game == &Othello ? weights8 [x][y] : weights6[x][y]) * (val == OTHELLO_WP ? 1 : -1); } return wtsum; } ResultType othello_eval (Pos *pos, Player player, float *eval) { int i; gboolean found; if (pos->num_moves >= board_wid * board_heit) { for (i=0, found=FALSE; iboard [i] == OTHELLO_EMPTY) {found = TRUE; break;} if (!found) { *eval = othello_eval_material (pos); *eval *= GAME_EVAL_INFTY; if (*eval > 0) return RESULT_WHITE; if (*eval < 0) return RESULT_BLACK; return RESULT_NOTYET; } } *eval = 10 * othello_eval_liberty (pos) //10 * othello_eval_mobility (pos) + 100 * othello_eval_safe (pos) + othello_eval_weights (pos); return RESULT_NOTYET; } ResultType othello_eval_incr (Pos *pos, byte *move, float *eval) { int i; for (i=0; move[3*i] != -1; i++) ; if (i == 0) *eval = 0; else *eval = (pos->player == WHITE ? (2 * i - 1) : - (2 * i - 1)); return RESULT_NOTYET; } gboolean othello_use_incr_eval (Pos *pos) { // TODO: use different threshold for Othello6x6 return pos->num_moves > 50 ? TRUE : FALSE; } gtkboard/src/pacman.c000066400000000000000000000355331153150217100150520ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ #include #include #include #include #include #include #include "game.h" #include "aaball.h" #define PACMAN_CELL_SIZE 25 #define PACMAN_NUM_PIECES 48 #define PACMAN_BOARD_WID 26 #define PACMAN_BOARD_HEIT 25 char pacman_colors[6] = {100, 150, 200, 100, 150, 200}; int * pacman_init_pos = NULL; //#define PACMAN_WALL 1 #define PACMAN_FOOD 1 #define PACMAN_POWER 2 #define PACMAN_EMPTY 3 #define PACMAN_IS_EDIBLE(x) (x>=1 && x<=3) #define PACMAN_PAC_MIN 28 #define PACMAN_PAC_MAX 32 #define PACMAN_PAC_UP 28 #define PACMAN_PAC_DOWN 29 #define PACMAN_PAC_RIGHT 30 #define PACMAN_PAC_LEFT 31 #define PACMAN_IS_PAC(x) ((x) >= PACMAN_PAC_MIN && (x) < PACMAN_PAC_MAX) //#define PACMAN_GHOST_MASK 4 #define PACMAN_IS_GHOST(x) ((x) >= 4 && x < 20) #define PACMAN_GET_GHOST(x) ((x)-(x)%4) #define PACMAN_GET_GHOST_NUM(x) (PACMAN_GET_GHOST(x)/4-1) /*#define PACMAN_GHOST_INKY 5 #define PACMAN_GHOST_PINKY 6 #define PACMAN_GHOST_BLINKY 7 #define PACMAN_GHOST_SUE 8*/ //#define PACMAN_IS_GHOST(x) ((x) >= PACMAN_GHOST_INKY && (x) <= PACMAN_GHOST_SUE) #define PACMAN_WALL_MASK 32 #define PACMAN_WALL_UP 8 #define PACMAN_WALL_DOWN 4 #define PACMAN_WALL_LEFT 2 #define PACMAN_WALL_RIGHT 1 int pacman_maze[PACMAN_BOARD_HEIT][PACMAN_BOARD_WID] = { {32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32}, {32, 2, 1, 1, 1, 1, 1,32, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,32, 1, 1, 1, 1, 1, 2,32}, {32, 1,32,32,32,32, 1,32, 1,32,32,32,32,32,32,32,32, 1,32, 1,32,32,32,32, 1,32}, {32, 1,32,32,32,32, 1,32, 1,32,32,32,32,32,32,32,32, 1,32, 1,32,32,32,32, 1,32}, {32, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,32}, {32,32,32, 1,32,32, 1,32,32,32,32, 1,32,32, 1,32,32,32,32, 1,32,32, 1,32,32,32}, {32,32,32, 1,32,32, 1, 1, 1, 1, 1, 1,32,32, 1, 1, 1, 1, 1, 1,32,32, 1,32,32,32}, {32, 1, 1, 1,32,32,32,32, 1,32,32,32,32,32,32,32,32, 1,32,32,32,32, 1, 1, 1,32}, {32, 1, 1, 1,32,32,32,32, 1,32,32,32,32,32,32,32,32, 1,32,32,32,32, 1, 1, 1,32}, {32,32,32, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,32,32,32}, {32,32,32, 1,32,32,32,32, 1,32,32,32,32,32,32, 1,32, 1,32,32,32,32, 1,32,32,32}, {32,32,32, 1,32,32,32,32, 1,32, 7, 3,15, 3, 3, 3,32, 1,32,32,32,32, 1,32,32,32}, {32,32,32, 1,32,32, 1, 1, 1,32, 3,11, 3,19, 3, 3,32, 1, 1, 1,32,32, 1,32,32,32}, {32,32,32, 1,32,32, 1,32, 1,32,32,32,32,32,32,32,32, 1,32, 1,32,32, 1,32,32,32}, {32, 1, 1, 1, 1, 1, 1,32, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,32, 1, 1, 1, 1, 1, 1,32}, {32,32,32, 1,32,32,32,32,32,32,32, 1,32,32, 1,32,32,32,32,32,32,32, 1,32,32,32}, {32,32,32, 1, 1, 1, 1, 1, 1, 1, 1, 1,32,32, 1, 1, 1, 1, 1, 1, 1, 1, 1,32,32,32}, {32,32,32, 1,32,32,32,32, 1,32,32,32,32,32,32,32,32, 1,32,32,32,32, 1,32,32,32}, {32,32,32, 1,32,32,32,32, 1,32,32,32,32,32,32,32,32, 1,32,32,32,32, 1,32,32,32}, {32, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,28, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,32}, {32, 1,32,32,32, 1,32,32,32,32,32, 1,32,32, 1,32,32,32,32,32, 1,32,32,32, 1,32}, {32, 1,32,32,32, 1,32,32, 1, 1, 1, 1,32,32, 1, 1, 1, 1,32,32, 1,32,32,32, 1,32}, {32, 1,32,32,32, 1,32,32, 1,32,32,32,32,32,32,32,32, 1,32,32, 1,32,32,32, 1,32}, {32, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,32}, {32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32}, }; static char * brown_square_25_xpm[]= { "25 25 2 1", " c none", ". c #443333", ".........................", ".........................", ".........................", ".........................", ".........................", ".........................", ".........................", ".........................", ".........................", ".........................", ".........................", ".........................", ".........................", ".........................", ".........................", ".........................", ".........................", ".........................", ".........................", ".........................", ".........................", ".........................", ".........................", ".........................", ".........................", }; void pacman_init (); Game Pacman = { PACMAN_CELL_SIZE, PACMAN_BOARD_WID, PACMAN_BOARD_HEIT, PACMAN_NUM_PIECES, pacman_colors, NULL, NULL, "Pacman", "Arcade", pacman_init}; static void pacman_set_init_pos (Pos *pos); static char ** pacman_get_pixmap (int idx, int color); static int pacman_getmove_kb (Pos *cur_pos, int key, byte **move, int **); static int pacman_animate (Pos *pos, byte **movp); void pacman_init () { game_single_player = TRUE; game_set_init_pos = pacman_set_init_pos; game_get_pixmap = pacman_get_pixmap; game_getmove_kb = pacman_getmove_kb; game_animation_time = 100; game_animate = pacman_animate; game_doc_about_status = STATUS_UNPLAYABLE; game_doc_about = "Pacman\n" "Single player game\n" "Status: Partially implemented (currently unplayable)\n" "URL: "GAME_DEFAULT_URL ("pacman"); } void pacman_get_cur_pos (byte *pos, int *x, int *y) { int i, j; for (i=0; i= board_wid || y >= board_heit) return; if (pos[y * board_wid + x] & PACMAN_WALL_MASK) return; if (dist[x][y] >= 0 && dist[x][y] < val) return; dist[x][y] = val; pacman_recursive_dist (pos, x+1, y, val+1); pacman_recursive_dist (pos, x-1, y, val+1); pacman_recursive_dist (pos, x, y+1, val+1); pacman_recursive_dist (pos, x, y-1, val+1); } void pacman_set_dist (byte *pos) { int i, j; int curx, cury; pacman_get_cur_pos (pos, &curx, &cury); for (i=0; iboard; pacman_set_dist (board); for (i=0; i dist[i][j]) continue; if (!PACMAN_IS_EDIBLE(board [y * board_wid + x])) continue; { int found = 0, s; for (s=0; s= 0 && cury >= 0); switch ((oldboard = board [cury * board_wid + curx])) { case PACMAN_PAC_UP: incx = 0; incy = 1; break; case PACMAN_PAC_DOWN: incx = 0; incy = -1; break; case PACMAN_PAC_RIGHT: incx = 1; incy = 0; break; case PACMAN_PAC_LEFT: incx = -1; incy = 0; break; } if (incx == 0 && incy == 0) return -1; x = curx + incx; y = cury + incy; if (x >= 0 && y >= 0 && x < board_wid && y < board_heit && !(board [y * board_wid + x] & PACMAN_WALL_MASK)) { *mp++ = curx; *mp++ = cury; *mp++ = PACMAN_EMPTY; *mp++ = x; *mp++ = y; *mp++ = oldboard; *mp++ = -1; *movp = move; } *mp = -1; return mp > move ? 1 : -1; //return -1; } // TODO int pacman_getmove_kb (Pos *pos, int key, byte **movp, int **rmovp) { static byte move[10]; int curx = -1, cury = -1; int newpos; pacman_get_cur_pos (pos->board, &curx, &cury); g_assert (curx >= 0 && cury >= 0); switch (key) { case GDK_Up: newpos = PACMAN_PAC_UP; break; case GDK_Down: newpos = PACMAN_PAC_DOWN; break; case GDK_Right: newpos = PACMAN_PAC_RIGHT; break; case GDK_Left: newpos = PACMAN_PAC_LEFT; break; default: return -1; } move[0] = curx; move[1] = cury; move[2] = newpos; move[3] = -1; *movp = move; return 1; } void pacman_set_init_pos (Pos *pos) { int i, j, k; int incx[4] = {0, 0, 1, -1}; int incy[4] = {1, -1, 0, 0}; int wallmask[4] = {PACMAN_WALL_UP, PACMAN_WALL_DOWN, PACMAN_WALL_RIGHT, PACMAN_WALL_LEFT}; byte *board = pos->board; for (i=0; i= board_wid || y>= board_heit) continue; if (board [y * board_wid + x] & PACMAN_WALL_MASK) board [j * board_wid + i] |= wallmask[k]; } } } } static float get_angle (float x, float y) { float ang; if (x >= 0 && y == 0) return 0; if (x < 0 && y == 0) return M_PI; if (x == 0 && y > 0) return M_PI/2; if (x == 0 && y < 0) return 3 * M_PI/2; if (x > 0) { ang = atan(y/x); if (ang < 0) ang += 2 * M_PI; return ang;} return M_PI + atan(y/x); } static char **pacman_pixmap_ghost_gen(char *pixbuf) // FIXME: ghosts look like flowers :( { int i, j; static char *pixmap[PACMAN_CELL_SIZE+3]; pixmap[0] = "25 25 2 1"; pixmap[1] = " c none"; pixmap[2] = ". c #dddddd"; for (i=0; i= PACMAN_CELL_SIZE/3 && i < 2*PACMAN_CELL_SIZE/3) && (j >= PACMAN_CELL_SIZE/3 && j < 2*PACMAN_CELL_SIZE/3)) pixmap[i+3][j] = '.'; if ((i >= PACMAN_CELL_SIZE*2/3) && (j >= PACMAN_CELL_SIZE/3 && j < 2*PACMAN_CELL_SIZE/3) && idx & PACMAN_WALL_DOWN) pixmap[i+3][j] = '.'; if ((i < PACMAN_CELL_SIZE/3) && (j >= PACMAN_CELL_SIZE/3 && j < 2*PACMAN_CELL_SIZE/3) && idx & PACMAN_WALL_UP) pixmap[i+3][j] = '.'; if ((i >= PACMAN_CELL_SIZE/3 && i < 2*PACMAN_CELL_SIZE/3) && (j >= PACMAN_CELL_SIZE*2/3) && idx & PACMAN_WALL_RIGHT) pixmap[i+3][j] = '.'; if ((i >= PACMAN_CELL_SIZE/3 && i < 2*PACMAN_CELL_SIZE/3) && (j < PACMAN_CELL_SIZE/3) && idx & PACMAN_WALL_LEFT) pixmap[i+3][j] = '.'; } return pixmap; } char ** pacman_pixmap_pac_gen(float dir, float gap, char *pixbuf) { char **pixmap; float ang; float x0, y0; int i, j; pixmap = g_new(char *, 5 + PACMAN_CELL_SIZE); pixmap[0] = "25 25 4 1"; pixmap[1] = " c none"; pixmap[2] = "b c black"; pixmap[3] = "y c yellow"; pixmap[4] = "r c red"; ang = dir * M_PI / 2; x0 = cos(ang); y0 = sin(ang); for (i=0; i PACMAN_CELL_SIZE * PACMAN_CELL_SIZE/6) continue; tmp = sqrt(x*x+y*y); if (tmp > 0) { x /= tmp; y /= tmp; } if (x0 * x + y0 * y < cos (gap * M_PI / 180)) pixmap[i+5][j] = 'y'; if (x*x+y*y==0) pixmap[i+5][j] = 'y'; } } return pixmap; } char ** pacman_get_pixmap (int idx, int color) { int fg, bg, i; char *colors; static char pixbuf[PACMAN_CELL_SIZE*(PACMAN_CELL_SIZE+1)]; if (idx & PACMAN_WALL_MASK) return pacman_pixmap_wall_gen(idx, pixbuf); colors = pacman_colors; for(i=0, bg=0;i<3;i++) { int col = colors[i]; if (col<0) col += 256; bg += col * (1 << (16-8*i));} if (idx == PACMAN_FOOD) { fg = 200 << 8; return pixmap_ball_gen(PACMAN_CELL_SIZE, pixbuf, fg, bg, 4.0, 30.0); } else if (idx == PACMAN_EMPTY) { fg = 200 << 8; return pixmap_ball_gen(PACMAN_CELL_SIZE, pixbuf, fg, bg, 0, 1); } else if (idx == PACMAN_POWER) { fg = 200 << 16; return pixmap_ball_gen(PACMAN_CELL_SIZE, pixbuf, fg, bg, 6.0, 30.0); } else if (idx == PACMAN_PAC_UP) { return pacman_pixmap_pac_gen(2, 45, pixbuf); } else if (idx == PACMAN_PAC_DOWN) { return pacman_pixmap_pac_gen(0, 45, pixbuf); } else if (idx == PACMAN_PAC_RIGHT) { return pacman_pixmap_pac_gen(1, 45, pixbuf); } else if (idx == PACMAN_PAC_LEFT) { return pacman_pixmap_pac_gen(3, 45, pixbuf); } else if (PACMAN_IS_GHOST(idx)) { //fg = 50; return pacman_pixmap_ghost_gen (pixbuf); //pixmap_ball_gen(PACMAN_CELL_SIZE, pixbuf, fg, bg, 6.0, 24.0); } return NULL; } gtkboard/src/pentaline.c000066400000000000000000000337441153150217100155740ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ /** \file pentaline.c */ #include #include #include #include #include #include "game.h" #include "aaball.h" #define PENTALINE_CELL_SIZE 40 #define PENTALINE_NUM_PIECES 2 #define PENTALINE_BOARD_WID 12 #define PENTALINE_BOARD_HEIT 12 #define PENTALINE_RP 1 #define PENTALINE_BP 2 #define PENTALINE_EMPTY 0 char pentaline_colors[9] = {200, 220, 200, 200, 220, 200, 0, 0, 0}; void pentaline_init (); Game Pentaline = { PENTALINE_CELL_SIZE, PENTALINE_BOARD_WID, PENTALINE_BOARD_HEIT, PENTALINE_NUM_PIECES, pentaline_colors, NULL, NULL, "Pentaline", "k-in-a-row", pentaline_init}; static int pentaline_getmove (Pos *, int, int, GtkboardEventType, Player, byte **, int **); static ResultType pentaline_who_won (Pos *, Player , char **); static void pentaline_set_init_pos (Pos *pos); unsigned char * pentaline_get_rgbmap (int idx, int color); ResultType pentaline_eval_incr (Pos *, Player, byte *, float *); byte * pentaline_movegen (Pos *); ResultType pentaline_eval (Pos *, Player, float *); void *pentaline_newstate (Pos *pos, byte *move); typedef struct { // length, open/closed, white/black byte chains[5][2][2]; } Pentaline_state; void pentaline_init () { game_eval = pentaline_eval; game_movegen = pentaline_movegen; game_getmove = pentaline_getmove; game_who_won = pentaline_who_won; game_get_rgbmap = pentaline_get_rgbmap; game_draw_cell_boundaries = TRUE; // game_eval_incr = pentaline_eval_incr; game_white_string = "Red"; game_black_string = "Blue"; game_stateful = TRUE; game_state_size = sizeof (Pentaline_state); game_newstate = pentaline_newstate; game_allow_flip = TRUE; game_doc_about_status = STATUS_COMPLETE; game_doc_about = "Pentaline\n" "Two player game\n" "Status: Fully implemented (But AI needs improvement)\n" "URL: "GAME_DEFAULT_URL("pentaline"); game_doc_rules = "Two players take turns in placing balls of either color. The first to get 5 balls in a row wins.\n\n" "This game is the same as the free-style variant of GoMoku.\n"; } byte * pentaline_movegen (Pos *pos) { int i, j, k, l, x, y; byte movbuf [1024]; byte *movlist, *movp = movbuf; int val, found = 0; int incx[4] = { 0, 1, 1, -1}; int incy[4] = { 1, 0, 1, 1}; int nbrx[] = { -1, -1, -1, 0, 0, 1, 1, 1}; int nbry[] = { -1, 0, 1, -1, 1, -1, 0, 1}; byte *board = pos->board; Player player = pos->player; for (i=0; i= board_heit || i + l * incx[k] >= board_wid) { found = 0; break; } val = board [(j + l * incy[k]) * board_wid + i + l * incx[k]]; if (val == PENTALINE_EMPTY) {found = 0; break;} if (val != board [j * board_wid + i]) { found = 0; break; } } if (found) { break; } } } if (!found) { for (i=0; i= 0 && y >= 0 && x < board_wid && y < board_heit && board [y * board_wid + x] != PENTALINE_EMPTY) { *movp++ = i; *movp++ = j; *movp++ = (player == WHITE ? PENTALINE_RP : PENTALINE_BP); *movp++ = -1; } } } } if (movp == movbuf) // empty board { *movp++ = board_wid / 2 - random() % 2; *movp++ = board_heit / 2 - random() % 2; *movp++ = (player == WHITE ? PENTALINE_RP : PENTALINE_BP); *movp++ = -1; } *movp++ = -2; movlist = (byte *) (malloc (movp - movbuf)); memcpy (movlist, movbuf, (movp - movbuf)); return movlist; } ResultType pentaline_who_won (Pos *pos, Player to_play, char **commp) { int i, j, k, l; int incx[4] = { 0, 1, 1, -1}; int incy[4] = { 1, 0, 1, 1}; for (i=0; i= board_heit || i + l * incx[k] >= board_wid) { found = 0; break; } val = pos->board [(j + l * incy[k]) * board_wid + i + l * incx[k]]; if (val == PENTALINE_EMPTY) {found = 0; break; } if (val != pos->board [j * board_wid + i]) { found = 0; break; } } if (found) {*commp = (to_play == WHITE ? "Blue won" : "Red won"); return (to_play == WHITE ? RESULT_BLACK : RESULT_WHITE);} } *commp = NULL; /* { int len, open, color; for (color = 0; color < 2 && pos->state; color++) { printf ("player = %s: ", color==0?"Red ":"Blue"); for (open = 0; open < 2; open++) { printf ("open=%d: ", open+1); for (len = 0; len < 5; len++) printf ("%d ", ((Pentaline_state *)pos->state)->chains[len][open][color]); printf ("\t"); } printf ("\n"); } printf ("\n"); } */ return RESULT_NOTYET; } int pentaline_getmove (Pos *pos, int x, int y, GtkboardEventType type, Player to_play, byte **movp, int ** rmovep) { int val; static byte move[4]; if (type != GTKBOARD_BUTTON_RELEASE) return 0; if (pos->board [y * board_wid + x] != PENTALINE_EMPTY) return -1; move[0] = x; move[1] = y; move[2] = to_play == WHITE ? PENTALINE_RP : PENTALINE_BP; move[3] = -1; if (movp) *movp = move; return 1; } unsigned char * pentaline_get_rgbmap (int idx, int color) { int fg, bg, i; char *colors; static char rgbbuf[3 * PENTALINE_CELL_SIZE * PENTALINE_CELL_SIZE]; colors = pentaline_colors; fg = (idx == PENTALINE_RP ? 0xee << 16 : 0xee); if (color == BLACK) colors += 3; for(i=0, bg=0;i<3;i++) { int col = colors[i]; if (col<0) col += 256; bg += col * (1 << (16-8*i));} rgbmap_ball_shadow_gen(PENTALINE_CELL_SIZE, rgbbuf, fg, bg, 13.0, 30.0, 2); return rgbbuf; } static float eval_line (byte *board, int x, int y, int incx, int incy) { int open = 0; int newx, newy; int len, val, sgn; newx = x - incx, newy = y - incy; val = board [y * board_wid + x]; if (val == PENTALINE_EMPTY) return 0; sgn = (val == PENTALINE_RP ? 1 : -1); if (newx >= 0 && newy >= 0 && newx < board_wid && newy < board_heit) { if(board [newy * board_wid + newx] == val) return 0; if(board [newy * board_wid + newx] == PENTALINE_EMPTY) open = 1; } for (len = 0; ; x+= incx, y+=incy, len++) { if (x < 0 || y < 0 || x >= board_wid || y >= board_heit) break; if (board [y * board_wid + x] != val) break; } if (!(x < 0 || y < 0 || x >= board_wid || y >= board_heit) && board [y * board_wid + x] == PENTALINE_EMPTY) open++; if (len >= 5) return GAME_EVAL_INFTY * sgn; return open * open * (1 << len) * sgn; } static float eval_line_bidir (byte *board, int x, int y, int incx, int incy) { int val = board[y * board_wid + x]; do { x -= incx; y -= incy; } while (x >= 0 && y >= 0 && x < board_wid && y < board_heit && board [y * board_wid + x] == val); x += incx; y += incy; return eval_line (board, x, y, incx, incy); } static float eval_runs (byte *board) { int i, j, k; int incx[4] = { 0, 1, 1, -1 }; int incy[4] = { 1, 0, 1, 1 }; float eval = 0; for (i=0; iboard [move[1] * board_wid + move[0]] = move[2]; for (k=0; k<4; k++) val += eval_line_bidir (pos->board, move[0], move[1], incx[k], incy[k]); pos->board [move[1] * board_wid + move[0]] = 0; *eval = val; return RESULT_NOTYET; } ResultType pentaline_eval (Pos *pos, Player player, float *eval) { #define FIRST_WON { *eval = player == WHITE ? (1 << 20) : - (1 << 20); return player == WHITE ? RESULT_WHITE : RESULT_BLACK; } #define SECOND_WON { *eval = player == WHITE ? - (1 << 20) : (1 << 20); return player == WHITE ? RESULT_BLACK : RESULT_WHITE; } int color = player == WHITE ? 0 : 1; int len, open; Pentaline_state *state; *eval = 0; state = ((Pentaline_state *)pos->state); // 5 in a row if (state->chains[4][1][color] > 0 || state->chains[4][0][color] > 0) { *eval = player == WHITE ? (1 << 20) : - (1 << 20); return player == WHITE ? RESULT_WHITE : RESULT_BLACK; } // opponent: 5-in-a-row if (state->chains[4][1][1-color] > 0 || state->chains[4][0][1-color] > 0) { *eval = player == WHITE ? - (1 << 20) : (1 << 20); return player == WHITE ? RESULT_BLACK : RESULT_WHITE; } // 4-in-a-row if (state->chains[3][1][color] > 0 || state->chains[3][0][color] > 0) { *eval = player == WHITE ? (1 << 20) : - (1 << 20); return player == WHITE ? RESULT_WHITE : RESULT_BLACK; } // opponent: 4-in-a-row, both sides open if (state->chains[3][1][1-color] > 0) *eval += (player == WHITE ? -(1 << 18) : (1 << 18)); // opponent: 2 4-in-a-row's if (state->chains[3][0][1-color] > 1) *eval += (player == WHITE ? -(1 << 18) : (1 << 18)); // 3-in-a-row, both sides open; opponent doesn't have 4-in-a-row if (state->chains[2][1][color] > 0 && state->chains[3][0][1-color] == 0) *eval += (player == WHITE ? (1 << 16) : - (1 << 16)); // opponent: 2 3-in-a-row's, both sides open if (state->chains[2][1][1-color] > 1) *eval += (player == WHITE ? -(1 << 14) : (1 << 14)); // opponent: a 4 and a doubly open 3 if (state->chains[3][0][1-color] > 0 && state->chains[2][1][1-color] > 0) *eval += (player == WHITE ? - (1 << 12) : (1 << 12)); // These seem to be all the winning patterns. Can't find any more. *eval = 0; for (len = 0; len < 4; len++) for (open = 0; open < 2; open++) { *eval += state->chains[len][open][0] * (1 + open) * (1 + open) * (1 << len); *eval -= state->chains[len][open][1] * (1 + open) * (1 + open) * (1 << len); } return RESULT_NOTYET; } // given a square and a direction, find the length of the chain it defines {0, 1, ... 4} and the number of ends of the chain that are unoccupied {0, 1, 2} static void get_chain_info (byte *board, int x, int y, int dx, int dy, int *len, int *open, int *color) { int i; int val = board [y * board_wid + x]; *open = 0; *len = 0; if (!ISINBOARD (x, y)) return; if (val == PENTALINE_EMPTY) return; *color = (val == PENTALINE_RP ? 0 : 1); do { x -= dx; y -= dy; } while (ISINBOARD (x, y) && board [y * board_wid + x] == val); if (ISINBOARD (x, y) && board [y * board_wid + x] == PENTALINE_EMPTY) (*open)++; do { x += dx; y += dy; (*len)++; } while (ISINBOARD (x, y) && board [y * board_wid + x] == val); if (ISINBOARD (x, y) && board [y * board_wid + x] == PENTALINE_EMPTY) (*open)++; (*len)--; } static void update_state (byte chains[5][2][2], int len, int open, int color, int inc) { if (len == 0) return; if (len >= 5) { len = 5; open = 1; } if (open == 0) return; if (inc == -1) assert (chains[len-1][open-1][color] > 0); chains[len-1][open-1][color] += inc; } void *pentaline_newstate (Pos *pos, byte *move) { int k=0; static Pentaline_state state; Pentaline_state def_state = {{{{0, 0},{0, 0}},{{0, 0},{0, 0}},{{0, 0},{0, 0}},{{0, 0},{0, 0}}, }}; int len, open; int newcolor, oldcolor; int val = move[2]; if (pos->state) memcpy (&state, pos->state, sizeof (Pentaline_state)); else memcpy (&state, &def_state, sizeof (Pentaline_state)); for (k=0; k<4; k++) { get_chain_info (pos->board, move[0] + incx[k], move[1] + incy[k], incx[k], incy[k], &len, &open, &oldcolor); /* if (len != 0 && len <= 5 && open != 0) { if (len > 5) len = 5; assert (state.chains[len-1][open-1][oldcolor] > 0); state.chains[len-1][open-1][oldcolor]--; } */ update_state (state.chains, len, open, oldcolor, -1); get_chain_info (pos->board, move[0] - incx[k], move[1] - incy[k], -incx[k], -incy[k], &len, &open, &oldcolor); /* if (len != 0 && len <= 5 && open != 0) { if (len > 5) len = 5; assert (state.chains[len-1][open-1][oldcolor] > 0); state.chains[len-1][open-1][oldcolor]--; } */ update_state (state.chains, len, open, oldcolor, -1); } pos->board [move[1] * board_wid + move[0]] = move[2]; for (k=0; k<4; k++) { int x = move[0], y = move[1]; if (ISINBOARD (x + incx[k], y + incy[k]) && pos->board [(y + incy[k]) * board_wid + (x + incx[k])] != val) { get_chain_info (pos->board, move[0] + incx[k], move[1] + incy[k], incx[k], incy[k], &len, &open, &oldcolor); /* if (len != 0 && len <= 5 && open != 0) { if (len > 5) len = 5; state.chains[len-1][open-1][oldcolor]++; } */ update_state (state.chains, len, open, oldcolor, +1); } if (ISINBOARD (x - incx[k], y - incy[k]) && pos->board [(y - incy[k]) * board_wid + (x - incx[k])] != val) { get_chain_info (pos->board, move[0] - incx[k], move[1] - incy[k], -incx[k], -incy[k], &len, &open, &oldcolor); /* if (len != 0 && len <= 5 && open != 0) { if (len > 5) len = 5; state.chains[len-1][open-1][oldcolor]++; } */ update_state (state.chains, len, open, oldcolor, +1); } get_chain_info (pos->board, move[0], move[1], incx[k], incy[k], &len, &open, &newcolor); /* if (len != 0 && len <= 5 && open != 0) { if (len > 5) len = 5; state.chains[len-1][open-1][newcolor]++; } */ update_state (state.chains, len, open, newcolor, +1); } pos->board [move[1] * board_wid + move[0]] = 0; return &state; } gtkboard/src/plot4.c000066400000000000000000000204711153150217100146500ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ /** \file plot4.c */ #include #include #include #include #include "game.h" #include "aaball.h" #define PLOT4_CELL_SIZE 55 #define PLOT4_NUM_PIECES 3 #define PLOT4_BOARD_WID 7 #define PLOT4_BOARD_HEIT 6 char plot4_colors[6] = {160, 140, 100, 160, 140, 100}; int * plot4_init_pos = NULL; #define PLOT4_WP 1 #define PLOT4_BP 2 #define PLOT4_EMPTY 3 void plot4_init (); Game Plot4 = { PLOT4_CELL_SIZE, PLOT4_BOARD_WID, PLOT4_BOARD_HEIT, PLOT4_NUM_PIECES, plot4_colors, NULL, NULL, "Plot 4", "k-in-a-row", plot4_init}; static int eval_runs (Pos *, int); static int find_runs (byte *, int, int, int , int, int, int); static int plot4_getmove (Pos *, int, int, GtkboardEventType, Player, byte **, int **); static ResultType plot4_who_won (Pos *, Player , char **); static void plot4_set_init_pos (Pos *pos); static char ** plot4_get_pixmap (int, int); static byte * plot4_movegen (Pos *); static ResultType plot4_eval (Pos *, Player, float *); static const int RUN_WT = 20; void plot4_init () { game_eval = plot4_eval; game_movegen = plot4_movegen; game_getmove = plot4_getmove; game_who_won = plot4_who_won; game_set_init_pos = plot4_set_init_pos; game_get_pixmap = plot4_get_pixmap; game_white_string = "Green"; game_black_string = "Yellow"; game_doc_about_status = STATUS_COMPLETE; game_doc_about = "Plot4\n" "Two player game\n" "Status: Fully implemented\n" "URL: "GAME_DEFAULT_URL ("plot4"); game_doc_rules = "Two players alternate in placing balls of either color on a 7x6 board. Not exactly placing, because the balls have gravity and fall down to the lowest unoccupied square on the column. The goal is to get as many 4-in-a-row's as possible. A 5-in-a-row counts as two, 6 as 3, and 7 as 4.\n"; } void plot4_set_init_pos (Pos *pos) { int i; for (i=0; iboard [i] = PLOT4_EMPTY; } ResultType plot4_who_won (Pos *pos, Player to_play, char **commp) { static char comment[32]; char *who_str [3] = { "Green won", "Yellow won", "Its a tie" }; int i, wscore, bscore, who_idx; wscore = eval_runs (pos, WHITE) / RUN_WT; bscore = eval_runs (pos, BLACK) / RUN_WT * -1; *commp = comment; for (i=0; iboard[i] == PLOT4_EMPTY) { snprintf (comment, 32, "%d : %d", wscore, bscore); return RESULT_NOTYET; } if (wscore > bscore) who_idx = 0; else if (wscore < bscore) who_idx = 1; else who_idx = 2; snprintf (comment, 32, "%s (%d : %d)", who_str[who_idx], wscore, bscore); if (wscore > bscore) return RESULT_WHITE; if (wscore < bscore) return RESULT_BLACK; return RESULT_TIE; } int plot4_islegal (byte *board, int x, int y) /* check bounds check if (x,y) is empty check if (x, y-1) is not empty */ { return (x >= 0 && x < board_wid && y >= 0 && y < board_heit && (board[y * board_wid + x] == PLOT4_EMPTY) && ((y == 0) || (board [(y-1) * board_wid + x] != PLOT4_EMPTY))); } int plot4_getmove (Pos *pos, int x, int y, GtkboardEventType type, Player to_play, byte **movp, int ** rmovep) /* translate a sequence of mouse clicks into a cbgf move. pos is the current position, x and y are the square which was clicked, type is the event type: MOUSE_PRESSED, MOUSE_RELEASED to_play is who has the move, movp is used to return the move the return value is 1 if the clicks were successfully translated into a move; -1 if the move is illegal, and 0 if further clicks are required to determine the move. In the latter case, this function is responsible for keeping track of the current state. */ { static byte move[4]; if (type != GTKBOARD_BUTTON_RELEASE) return 0; /* OK to click anywhere in the column */ for (y = 0; y < board_heit; y++) if (pos->board[y * board_wid + x] == PLOT4_EMPTY) break; if (y == board_heit) return -1; move[0] = x; move[1] = y; move[2] = to_play == WHITE ? PLOT4_WP : PLOT4_BP; move[3] = -1; if (movp) *movp = move; return 1; } ResultType plot4_eval (Pos *pos, Player to_play, float *eval) /* always eval from POV of white */ { /* TODO : add some weights */ *eval = eval_runs (pos, -1); return RESULT_NOTYET; } static int eval_runs (Pos *pos, int forwhom) /* sum of all the runs of forwhom (both if -1) from POV of WHITE */ { int sum = 0; int i, board_min, min; byte *board = pos->board; board_min = board_wid < board_heit ? board_wid : board_heit; for (i=0; i= 4) sum += RUN_WT; } if (cell == PLOT4_BP) { if (forwhom == -1) sum -= ((ropen + lopen) * (cur * cur)); if (forwhom != WHITE && cur >= 4) sum -= RUN_WT; } lopen = 0; } return sum; } byte * plot4_movegen_single (char *pos, int player, int reset) /* return a move terminated by -1 */ /* NULL ==> no more moves */ { static int row; static byte movbuf[4]; if (reset) row = 0; while (row < board_wid) { int j; for (j=board_heit-1; j>=0; j--) if (pos[j * board_wid + row] == PLOT4_EMPTY) { movbuf[0] = row; movbuf[1] = j; movbuf[2] = (player == WHITE ? PLOT4_WP : PLOT4_BP); movbuf[3] = -1; row++; return movbuf; } row++; } /*movbuf[0] = -1;*/ row = 0; return NULL; } //! movegen function byte *plot4_movegen (Pos *pos) { byte movbuf[256]; byte *movp = movbuf; byte *movlist; int i, j; for (i=0; iboard[j * board_wid + i] == PLOT4_EMPTY) { *movp++ = i; *movp++ = j; *movp++ = (pos->player == WHITE ? PLOT4_WP : PLOT4_BP); *movp++ = -1; break; } } *movp++ = -2; movlist = (byte *) (malloc (movp - movbuf)); memcpy (movlist, movbuf, (movp - movbuf)); return movlist; } char ** plot4_get_pixmap (int idx, int color) { int fg, bg, i; char *colors = plot4_colors; static char pixbuf[PLOT4_CELL_SIZE*(PLOT4_CELL_SIZE)+1]; if (idx == PLOT4_WP) fg = 0xee << 8; else if (idx == PLOT4_BP) fg = (0xee << 16) + (0xee << 8); else fg = 0xd7d7d7; for(i=0, bg=0;i<3;i++) { int col = colors[i]; if (col<0) col += 256; bg += col * (1 << (16-8*i));} return pixmap_ball_gen(55, pixbuf, fg, bg, 17.0, 30.0); } gtkboard/src/prefs.c000066400000000000000000000373151153150217100147320ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ #include #include #include #include #include #include #include #include "prefs.h" #include "ui_common.h" #include "sound.h" #ifdef HAVE_GNOME #include #endif static Score scores[MAX_HIGHSCORES]; static int num_highscores = 0; static gchar *gamename; // ugly SCORE_FIELD prefs_score_fields_def[] = {SCORE_FIELD_USER, SCORE_FIELD_SCORE, SCORE_FIELD_TIME, SCORE_FIELD_DATE, SCORE_FIELD_NONE}; gchar* prefs_score_field_names_def[] = {"User", "Score", "Time", "Date", NULL}; ConfigVar prefs_config_vars[] = { { "sound_dir", "Directory to load sounds from", NULL, NULL, NULL, NULL }, { "enable_sound", "Enable sound effects", NULL, "true", NULL, sound_enable_pref_cb }, { "recent_game_1", "Recent game 1", NULL, NULL, NULL, NULL }, { "recent_game_2", "Recent game 2", NULL, NULL, NULL, NULL }, { "recent_game_3", "Recent game 3", NULL, NULL, NULL, NULL }, { NULL} }; gboolean prefs_get_bool_val (gchar *value) { if (!value) return FALSE; if (!strcasecmp (value, "false")) return FALSE; if (!strcasecmp (value, "no")) return FALSE; if (!strcasecmp (value, "0")) return FALSE; return TRUE; } static void prefs_strip_special_chars (gchar *str) // $ is the field separator in our scores file // '<' and '>' are used for markup in GtkLabel { for (; *str; str++) if (*str == '$' || *str == '<' || *str == '>') *str = ' '; } static gboolean prefs_create_dir (gchar *dir) { int retval; struct stat Stat; retval = stat (dir, &Stat); if (retval < 0) { // try to create the directory retval = mkdir (dir, 0755); if (retval < 0) return FALSE; } else if (!S_ISDIR (Stat.st_mode)) return FALSE; return TRUE; } static gboolean prefs_first_time () { static gboolean first_time = TRUE; static gboolean status = FALSE; gchar * prefsdir, *tempstr; if (!first_time) return status; first_time = FALSE; prefsdir = g_strdup_printf ("%s/%s", getenv("HOME"), ".gtkboard"); if (!prefs_create_dir (prefsdir)) return FALSE; tempstr = g_strdup_printf ("%s/%s", prefsdir, "scores"); if (!prefs_create_dir (tempstr)) return FALSE; g_free (tempstr); tempstr = g_strdup_printf ("%s/%s", prefsdir, "prefs"); if (!prefs_create_dir (tempstr)) return FALSE; g_free (tempstr); tempstr = g_strdup_printf ("%s/%s", prefsdir, "plugins"); if (!prefs_create_dir (tempstr)) return FALSE; g_free (tempstr); g_free (prefsdir); return status = TRUE; } gboolean prefs_load_scores (gchar *name) { gchar *scorefile; FILE *in; char linebuf[128]; int i; gamename = name; if (!prefs_first_time ()) return FALSE; scorefile = g_strdup_printf ("%s/%s/%s", getenv("HOME"), ".gtkboard/scores", name); in = fopen (scorefile, "r"); if (!in) { g_free (scorefile); num_highscores = 0; return FALSE; } for (i=0; !feof (in) && i < MAX_HIGHSCORES;) { gchar **realline; gchar ** score_fields; /* if (fscanf (in, "%[^$]$%[^$]$%d$%d\n", scores[i].name, scores[i].score, &scores[i].time, &scores[i].date) == EOF)*/ //scanf is buggy!!! - %[] shouldn't strip leading whitespace but does if (!fgets (linebuf, 128, in)) break; realline = g_strsplit (linebuf, "#", -1); score_fields = g_strsplit (realline[0], "$", -1); if (!score_fields[0] || !score_fields[1]) { g_strfreev (realline); g_strfreev (score_fields); continue; } if (!score_fields[2] || !score_fields[3]) { sb_error ("Error loading scores file", FALSE); g_strfreev (realline); g_strfreev (score_fields); break; } strncpy (scores[i].name, score_fields[0], 31); strncpy (scores[i].score, score_fields[1], 31); scores[i].time = atoi(score_fields[2]); scores[i].date = atoi(score_fields[3]); g_strfreev (realline); g_strfreev (score_fields); i++; } num_highscores = i; fclose (in); g_free (scorefile); return TRUE; } static void prefs_show_scores_real (int index) { int i, j; gchar tempstr [128], tempstr1[128]; time_t temps; GtkWidget *dialog, *okay_button, *label, *hbox, *vboxes[5]; snprintf (tempstr, 128, "%s highscores - gtkboard", gamename); #if GTK_MAJOR_VERSION == 1 dialog = gtk_dialog_new(); gtk_window_set_title (GTK_WINDOW (dialog), tempstr); okay_button = gtk_button_new_with_label("OK"); gtk_signal_connect_object (GTK_OBJECT (okay_button), "clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy), (gpointer) dialog); gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->action_area), okay_button); gtk_box_set_spacing (GTK_BOX (GTK_DIALOG(dialog)->vbox), 5); snprintf (tempstr, 128, "%s highscores", gamename); label = gtk_label_new (tempstr); #else dialog = gtk_dialog_new_with_buttons (tempstr, GTK_WINDOW (main_window), GTK_DIALOG_MODAL, NULL); gtk_window_set_default_size (GTK_WINDOW (dialog), 300, 100); okay_button = gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_OK, GTK_RESPONSE_NONE); g_signal_connect_swapped (GTK_OBJECT (dialog), "response", G_CALLBACK (gtk_widget_destroy), GTK_OBJECT (dialog)); gtk_box_set_spacing (GTK_BOX (GTK_DIALOG(dialog)->vbox), 5); snprintf (tempstr, 128, "%s highscores", gamename); label = gtk_label_new (""); gtk_label_set_markup (GTK_LABEL (label), tempstr); #endif gtk_widget_grab_focus (okay_button); gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), label); hbox = gtk_hbox_new (FALSE, 20); gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), hbox); for (i=0; i<=num_highscores; i++) { int num_score_fields; gchar *strings[10]; gboolean found = FALSE; for (j=0; !found && j < 10; j++) { switch (game_score_fields[j]) { case SCORE_FIELD_NONE: found = TRUE; break; case SCORE_FIELD_RANK: snprintf (tempstr, 128, "%d", i); strings[j] = i ? tempstr : game_score_field_names[j]; break; case SCORE_FIELD_USER: strings[j] = i ? scores[i-1].name : game_score_field_names[j]; break; case SCORE_FIELD_SCORE: strings[j] = i ? scores[i-1].score : game_score_field_names[j]; break; case SCORE_FIELD_TIME: strings[j] = i ? sb_ftime (scores[i-1].time) : game_score_field_names[j]; break; case SCORE_FIELD_DATE: temps = scores[i-1].date; strncpy (tempstr1, ctime (&temps), 127); tempstr1 [strlen (tempstr1) - 1] = '\0'; strings[j] = i ? tempstr1 : game_score_field_names[j]; break; default: break; } } num_score_fields = j-1; for (j=0; j 1 gtk_label_set_selectable (GTK_LABEL (label), TRUE); if (i > 0 && i-1 == index) { gchar *tempstr = g_strdup_printf ("%s", strings[j]); gtk_label_set_markup (GTK_LABEL (label), tempstr); g_free (tempstr); } else #endif gtk_label_set_text (GTK_LABEL (label), strings[j]); gtk_box_pack_start (GTK_BOX (vboxes[j]), label, FALSE, FALSE, i ? 0 : 5); } } gtk_widget_show_all (dialog); } void prefs_show_scores () { if (!gamename) return; prefs_show_scores_real (-1); } gboolean prefs_save_scores (gchar *name) { gchar *scorefile; FILE *out; char linebuf[128]; int i; if (!prefs_first_time ()) return FALSE; scorefile = g_strdup_printf ("%s/%s/%s", getenv("HOME"), ".gtkboard/scores", name); out = fopen (scorefile, "w"); if (!out) { gchar *tempstr; sb_error (tempstr = g_strdup_printf ("couldn't write to %s", scorefile), FALSE); fprintf (stderr, "%s\n", tempstr); g_free (tempstr); g_free (scorefile); return FALSE; } fprintf (out, "#This is the gtkboard highscores file for the game %s\n" "#The format is: name$score$time taken in ms$date (time (2))\n" "#VERSION=0.10.0\n" , gamename); for (i=0; i < num_highscores; i++) { fprintf (out, "%s$%s$%d$%d\n", scores[i].name, scores[i].score, scores[i].time, scores[i].date); } fclose (out); g_free (scorefile); gamename = NULL; return TRUE; } int prefs_scorecmp_dscore (gchar *score1, int temps1, gchar* score2, int temps2) { int s1 = atoi (score1); int s2 = atoi (score2); if (s1 > s2) return 1; if (s1 < s2) return -1; if (temps1 < temps2) return 1; if (temps1 > temps2) return -1; return 0; } int prefs_scorecmp_iscore (gchar *score1, int temps1, gchar* score2, int temps2) { int s1 = atoi (score1); int s2 = atoi (score2); if (s1 < s2) return 1; if (s1 > s2) return -1; if (temps1 < temps2) return 1; if (temps1 > temps2) return -1; return 0; } int prefs_scorecmp_time (gchar *score1, int temps1, gchar* score2, int temps2) { if (temps1 < temps2) return 1; if (temps1 > temps2) return -1; return 0; } static int highscore_temps, highscore_index, highscore_date; static gchar highscore_score[32]; static void prefs_username_cb (GtkWidget *dialog, GtkEntry *entry) { int j; gchar username[32], *namep; strncpy (username, gtk_entry_get_text (entry), 31); prefs_strip_special_chars (username); for (j = num_highscores + 1; j > highscore_index; j--) { if (j >= MAX_HIGHSCORES) continue; memcpy (scores + j, scores + j - 1, sizeof (Score)); } strncpy (scores[highscore_index].name, username, 31); snprintf (scores[highscore_index].score, 32, "%d", atoi (highscore_score)); scores[highscore_index].time = highscore_temps; scores[highscore_index].date = highscore_date; if (num_highscores < MAX_HIGHSCORES) num_highscores++; gtk_widget_destroy (GTK_WIDGET (dialog)); prefs_show_scores_real (highscore_index); } void prefs_show_username_dialog () { GtkWidget *dialog, *label, *hbox, *entry; gchar *title = "Enter your name - gtkboard"; entry = gtk_entry_new_with_max_length (31); gtk_entry_set_text (GTK_ENTRY (entry), getenv ("USER")); gtk_widget_grab_focus (entry); #if GTK_MAJOR_VERSION == 1 dialog = gtk_dialog_new(); gtk_window_set_title (GTK_WINDOW (dialog), title); gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (main_window)); gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); gtk_signal_connect_object (GTK_OBJECT (entry), "activate", GTK_SIGNAL_FUNC (prefs_username_cb), GTK_OBJECT (dialog)); #else dialog = gtk_dialog_new_with_buttons (title, GTK_WINDOW (main_window), GTK_DIALOG_MODAL, NULL); gtk_window_set_default_size (GTK_WINDOW (dialog), 300, 100); // g_signal_connect_swapped (GTK_OBJECT (entry), // "activate", G_CALLBACK (prefs_username_cb), GTK_OBJECT (dialog)); gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_OK, GTK_RESPONSE_NONE); #endif label = gtk_label_new ("You've got a highscore!"); gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), label); hbox = gtk_hbox_new (TRUE, 0); gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), hbox); label = gtk_label_new ("Enter your name"); gtk_container_add (GTK_CONTAINER (hbox), label); gtk_container_add (GTK_CONTAINER (hbox), entry); gtk_widget_show_all (dialog); #if GTK_MAJOR_VERSION > 1 gtk_dialog_run (GTK_DIALOG (dialog)); prefs_username_cb (dialog, GTK_ENTRY (entry)); #endif } gboolean prefs_add_highscore (gchar *score, int temps) // the argument score is the string returned by game_who_won. We expect // it to have a substring which is an integer { int i, j; char *realscore = strpbrk (score, "0123456789"); if (!realscore) realscore = ""; if (!game_scorecmp) return FALSE; for (i=0; i 0) break; if (i == MAX_HIGHSCORES) return FALSE; highscore_index = i; strncpy (highscore_score, realscore, 31); prefs_strip_special_chars (highscore_score); highscore_temps = temps; highscore_date = time (0); prefs_show_username_dialog (); return TRUE; } void prefs_zap_highscores () { gchar *tempstr; GtkWidget *dialog; gint result; if (!gamename) return; #if GTK_MAJOR_VERSION == 1 menu_show_dialog ("Zapped highscores", tempstr = g_strdup_printf ("Zapped %s highscores", gamename)); g_free (tempstr); #else dialog = gtk_message_dialog_new ( GTK_WINDOW (main_window), GTK_DIALOG_MODAL, GTK_MESSAGE_WARNING, GTK_BUTTONS_OK_CANCEL, "This will clear your %s highscores.\n" "Your highscores in other games will be unaffected.\nProceed?", gamename); gtk_widget_show_all (dialog); result = gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); if (result != GTK_RESPONSE_OK) return; #endif num_highscores = 0; } gchar *prefs_get_config_val (gchar *key) { ConfigVar *entry = prefs_config_vars; while (entry->key) { if (strcasecmp (entry->key, key) == 0) { if (entry->cur_val) return entry->cur_val; if (entry->def_val) return entry->def_val; return NULL; } entry++; } fprintf (stderr, "warning: prefs_get_config_val (): no such key: %s", key); return NULL; } void prefs_set_config_val_real (char *key, char *value, gboolean callback) { ConfigVar *entry = prefs_config_vars; while (entry->key) { if (strcasecmp (entry->key, key) == 0) { // NOTE: here the old value should not be freed because it is static entry->cur_val = g_strdup (value); if (callback && entry->callback) entry->callback (key, value); return; } entry++; } fprintf (stderr, "Warning: invalid key %s in config file\n", key); } void prefs_set_config_val (char *key, char *value) { prefs_set_config_val_real (key, value, FALSE); } void prefs_write_config_file () { ConfigVar *entry = prefs_config_vars; char *prefs_file; FILE *out; prefs_file = g_strdup_printf ("%s/%s", getenv ("HOME"), ".gtkboard/gtkboardrc"); out = fopen (prefs_file, "w"); if (!out) { fprintf (stderr, "Couldn't open config file %s for writing: ", prefs_file); perror (NULL); g_free (prefs_file); return; } g_free (prefs_file); while (entry->key) { if (entry->description) fprintf (out, "#%s\n", entry->description); if (entry->comment) fprintf (out, "#\n#%s\n", entry->comment); fprintf (out, "%s = %s\n", entry->key, entry->cur_val ? entry->cur_val : (entry->def_val ? entry->def_val : "")); entry++; } fclose (out); } void prefs_read_config_file () { char linebuf[1024]; char *prefs_file; FILE *in; int line_num = 0; if (!prefs_first_time ()) return; prefs_file = g_strdup_printf ("%s/%s", getenv ("HOME"), ".gtkboard/gtkboardrc"); in = fopen (prefs_file, "r"); if (!in) { fprintf (stderr, "Couldn't open config file %s for reading: ", prefs_file); perror (NULL); g_free (prefs_file); return; } g_free (prefs_file); while (!feof (in)) { gchar **tokens; line_num ++; if (fgets (linebuf, 1024, in) == NULL) continue; g_strstrip (linebuf); if (linebuf[0] == '#' || linebuf[0] == '\0') continue; tokens = g_strsplit (linebuf, "=", 2); if (tokens[0] == NULL || tokens[1] == NULL) { fprintf (stderr, "Warning: line %d of config file (%s) not of the form \"key = value\"\n", line_num, linebuf); g_strfreev (tokens); continue; } g_strstrip (tokens[0]); g_strstrip (tokens[1]); prefs_set_config_val_real (tokens[0], tokens[1][0] ? tokens[1] : NULL, TRUE); g_strfreev (tokens); } fclose (in); } gtkboard/src/prefs.h000066400000000000000000000043401153150217100147270ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ #ifndef _PREFS_H_ #define _PREFS_H_ #include #include #include #include "game.h" #define MAX_HIGHSCORES 10 #define NUM_RECENT_GAMES 3 typedef void (*PrefsCallbackFunc) (gchar * key, gchar *value); typedef struct { char name[32]; char score[32]; int time; int date; } Score; //! An entry in the config file. See #prefs_config_vars typedef struct { //! name of the variable char *key; //! description, perhaps to present to the user? char *description; //! comment in the config file char *comment; //! default value char *def_val; //! current value char *cur_val; //! callback function to call when the value changes PrefsCallbackFunc callback; } ConfigVar; extern SCORE_FIELD prefs_score_fields_def[]; extern gchar* prefs_score_field_names_def[]; gboolean prefs_load_scores (gchar *); gboolean prefs_save_scores (gchar *); void prefs_show_scores (); void prefs_zap_highscores (); gboolean prefs_add_highscore (gchar *, int); int prefs_scorecmp_dscore (gchar *, int, gchar*, int); int prefs_scorecmp_iscore (gchar *, int, gchar*, int); int prefs_scorecmp_time (gchar *, int, gchar*, int); void prefs_read_config_file (); gchar *prefs_get_config_val (gchar *key); void prefs_set_config_val (gchar *key, gchar *value); void prefs_write_config_file (); gboolean prefs_get_bool_val (gchar *value); extern int (*game_scorecmp) (gchar *, int, gchar*, int); #endif gtkboard/src/quarto.c000066400000000000000000000173261153150217100151260ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ #include #include #include #include #include "game.h" #include "aaball.h" #define QUARTO_CELL_SIZE 60 #define QUARTO_NUM_PIECES 17 #define QUARTO_BOARD_WID 9 #define QUARTO_BOARD_HEIT 4 #define QUARTO_EMPTY 0 #define QUARTO_SEPARATOR 17 #define QUARTO_SHAPE_MASK (1 << 0) #define QUARTO_SIZE_MASK (1 << 1) #define QUARTO_HOLE_MASK (1 << 2) #define QUARTO_COLOR_MASK (1 << 3) #define QUARTO_ALL_PIECES_MASK (QUARTO_SHAPE_MASK | QUARTO_SIZE_MASK | QUARTO_HOLE_MASK | QUARTO_COLOR_MASK) char quarto_colors[9] = {200, 200, 200, 200, 200, 200, 0, 0, 0}; char quarto_highlight_colors[9] = {0, 0xff, 0, 0, 0, 0, 0, 0, 0}; int quarto_init_pos[QUARTO_BOARD_HEIT * QUARTO_BOARD_WID] = { 0, 0, 0, 0, 17, 1, 2, 3, 4, 0, 0, 0, 0, 17, 5, 6, 7, 8, 0, 0, 0, 0, 17, 9, 10, 11, 12, 0, 0, 0, 0, 17, 13, 14, 15, 16, }; void quarto_init (); Game Quarto = { QUARTO_CELL_SIZE, QUARTO_BOARD_WID, QUARTO_BOARD_HEIT, QUARTO_NUM_PIECES, quarto_colors, quarto_init_pos, NULL, "Quarto", "k-in-a-row", quarto_init}; static int quarto_getmove (Pos *, int, int, GtkboardEventType, Player, byte **, int **); static ResultType quarto_who_won (Pos *, Player, char **); void quarto_init (void); static byte * quarto_movegen (Pos *); static ResultType quarto_eval (Pos *, Player, float *eval); static void quarto_reset_uistate (Pos *pos); static unsigned char * quarto_get_rgbmap (int idx, int color); void quarto_get_render (Pos *pos, byte *move, int **rmovp); void quarto_init () { game_eval = quarto_eval; game_movegen = quarto_movegen; game_who_won = quarto_who_won; game_getmove = quarto_getmove; game_get_rgbmap = quarto_get_rgbmap; game_draw_cell_boundaries = TRUE; game_highlight_colors = quarto_highlight_colors; game_reset_uistate = quarto_reset_uistate; game_get_render = quarto_get_render; game_allow_flip = TRUE; game_doc_about_status = STATUS_COMPLETE; game_doc_about = "Quarto\n" "Two player game\n" "Status: Partially implemented\n" "URL: "GAME_DEFAULT_URL ("quarto"); game_doc_rules = "Two players take turns in placing the pieces from the right side of the board to the left side. Get 4 in a line (horizontal, vertical, diagonal) of any one type -- big, small, square, circle, hole, no hole, red or blue"; } static ResultType quarto_who_won (Pos *pos, Player player, char **commp) { ResultType result; float eval; result = quarto_eval (pos, player, &eval); if (result == RESULT_WHITE) *commp = "White won"; if (result == RESULT_BLACK) *commp = "Black won"; return result; } static gboolean eval_column (byte *board, int x, int y, int incx, int incy) { int i; int and1, and2; and1 = and2 = QUARTO_ALL_PIECES_MASK; for (i=0; i<4; i++, x+=incx, y+=incy) { int val; val = board[y * board_wid + x]; if (val == 0) return FALSE; val--; and1 &= val; and2 &= ~val; } if (and1 != 0 || and2 != 0) return TRUE; else return FALSE; } static ResultType quarto_eval (Pos *pos, Player player, float *eval) { int i, j; int and1, and2; ResultType result = player == WHITE ? RESULT_BLACK : RESULT_WHITE; *eval = player == WHITE ? -1 : 1; for (i=0; i<4; i++) if (eval_column (pos->board, i, 0, 0, 1)) return result; for (j=0; j<4; j++) if (eval_column (pos->board, 0, j, 1, 0)) return result; if (eval_column (pos->board, 0, 0, 1, 1)) return result; if (eval_column (pos->board, 0, 3, 1, -1)) return result; *eval = random() * 0.01 / RAND_MAX; return RESULT_NOTYET; } static int cur_piece = -1, curx = -1, cury = -1; int quarto_getmove (Pos *pos, int x, int y, GtkboardEventType type, Player to_play, byte **movp, int ** rmovep) { static byte move[7]; static int rmove[7]; byte *mp = move; int *rp = rmove; if (type != GTKBOARD_BUTTON_RELEASE) return 0; if (x == 4) return 0; if (x > 4) { if (pos->render[y * board_wid + x] == RENDER_SHADE1) return -1; *rp++ = x; *rp++ = y; *rp++ = RENDER_HIGHLIGHT1; if (cur_piece >= 0) { *rp++ = curx; *rp++ = cury; *rp++ = RENDER_NONE; } *rp++ = -1; cur_piece = pos->board [y * board_wid + x]; curx = x; cury = y; *rmovep = rmove; return 0; } if (cur_piece < 0) return -1; if (pos->board[y * board_wid + x] != QUARTO_EMPTY) return -1; *mp++ = x; *mp++ = y; *mp++ = cur_piece; *mp++ = -1; *movp = move; cur_piece = -1; *rp++ = curx; *rp++ = cury; *rp++ = 0; *rp++ = -1; *rmovep = rmove; return 1; } void quarto_get_render (Pos *pos, byte *move, int **rmovp) { static int rmove[4]; int *rp = rmove; int val, shadeval; int i, j; if (move[2] == QUARTO_EMPTY) { val = pos->board [move[1] * board_wid + move[0]]; shadeval = RENDER_NONE; } else { val = move[2]; shadeval = RENDER_SHADE1; } for (i=5; i<9; i++) for (j=0; j<4; j++) if (pos->board[j * board_wid + i] == val) { *rp++ = i; *rp++ = j; *rp++ = shadeval; *rp++ = -1; } *rmovp = rmove; } void quarto_reset_uistate (Pos *pos) { cur_piece = curx = cury = -1; } byte *quarto_movegen (Pos *pos) { byte movbuf[2048]; byte *movlist, *movp = movbuf; int from_x, from_y, to_x, to_y; Player player = pos->player; int count = 0; for (to_x=0; to_x<4; to_x++) for (to_y=0; to_y<4; to_y++) if (pos->board [to_y * board_wid + to_x] != QUARTO_EMPTY) count++; assert ((player == WHITE && count % 2 == 0) || (player == BLACK && count % 2 == 1)); for (from_x=5; from_x<9; from_x++) for (from_y=0; from_y<4; from_y++) { gboolean found = FALSE; int val = pos->board [from_y * board_wid + from_x]; for (to_x=0; to_x<4; to_x++) for (to_y=0; to_y<4; to_y++) if (val == pos->board [to_y * board_wid + to_x]) { found = TRUE; break; } if (!found) { for (to_x=0; to_x<4; to_x++) for (to_y=0; to_y<4; to_y++) { if (pos->board [to_y * board_wid + to_x] == QUARTO_EMPTY) { *movp++ = to_x; *movp++ = to_y; *movp++ = val; *movp++ = -1; } } } } *movp++ = -2; movlist = (byte *) (malloc (movp - movbuf)); memcpy (movlist, movbuf, (movp - movbuf)); return movlist; } unsigned char * quarto_get_rgbmap (int idx, int color) { int fg = 0, bg, i; char *colors; static char rgbbuf[3*QUARTO_CELL_SIZE*QUARTO_CELL_SIZE]; int color1 = 0xff << 16, color2 = 0xff, sepcolor = 0xaaaa66; float grad = 30.0; int size; colors = quarto_colors; for(i=0, bg=0;i<3;i++) { int col = colors[i]; if (col<0) col += 256; bg += col * (1 << (16-8*i));} if (idx == QUARTO_SEPARATOR) { rgbmap_square_gen (QUARTO_CELL_SIZE, rgbbuf, sepcolor, bg, QUARTO_CELL_SIZE); return rgbbuf; } fg = ((idx - 1) & QUARTO_COLOR_MASK) ? color1 : color2; size = ((idx - 1) & QUARTO_SIZE_MASK) ? 3.0 * QUARTO_CELL_SIZE / 4 : QUARTO_CELL_SIZE / 2.0; if ((idx - 1) & QUARTO_SHAPE_MASK) rgbmap_ball_gen(QUARTO_CELL_SIZE, rgbbuf, fg, bg, size/2, grad); else rgbmap_square_gen (QUARTO_CELL_SIZE, rgbbuf, fg, bg, size); if ((idx - 1) & QUARTO_HOLE_MASK) rgbmap_ball_gen_nobg (QUARTO_CELL_SIZE, rgbbuf, bg, fg, QUARTO_CELL_SIZE/8.0, grad); return rgbbuf; } gtkboard/src/rgb.c000066400000000000000000000131551153150217100143610ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ #include #include #include #include #include "game.h" #include "aaball.h" #define RGB_CELL_SIZE 55 #define RGB_NUM_PIECES 3 #define RGB_BOARD_WID 3 #define RGB_BOARD_HEIT 3 #define RGB_RP 1 #define RGB_GP 2 #define RGB_BP 3 #define RGB_EMPTY 0 char rgb_colors[9] = {200, 200, 200, 200, 200, 200, 0, 0, 0}; int * rgb_init_pos = NULL; void rgb_init (); Game Rgb = { RGB_CELL_SIZE, RGB_BOARD_WID, RGB_BOARD_HEIT, RGB_NUM_PIECES, rgb_colors, NULL, NULL, "Rgb", "k-in-a-row", rgb_init}; static int rgb_getmove (Pos *, int, int, GtkboardEventType, Player, byte **, int **); static ResultType rgb_who_won (Pos *, Player, char **); static void rgb_set_init_pos (Pos *pos); void rgb_init (void); static byte * rgb_movegen (Pos *); static ResultType rgb_eval (Pos *, Player, float *eval); static unsigned char * rgb_get_rgbmap (int idx, int color); void rgb_init () { game_eval = rgb_eval; game_movegen = rgb_movegen; game_getmove = rgb_getmove; game_who_won = rgb_who_won; game_set_init_pos = rgb_set_init_pos; game_get_rgbmap = rgb_get_rgbmap; game_draw_cell_boundaries = TRUE; game_allow_flip = TRUE; game_doc_about_status = STATUS_COMPLETE; game_doc_about = "Rgb\n" "Two player game\n" "Status: Fully implemented\n" "URL: "GAME_DEFAULT_URL ("rgb"); game_doc_rules = "Rgb, short for red-green-blue, is a harder version of tic-tac-toe. The goal is to get 3 balls in a line (row, column, or diagonal) of any one color. Clicking on an empty square puts a red ball on it, clicking on a red ball turns it green, and clicking on a green ball turns it blue."; } static void rgb_set_init_pos (Pos *pos) { int i; for (i=0; iboard [i] = RGB_EMPTY; } static byte * rgb_movegen (Pos *pos) { int i, j; byte movbuf [64]; byte *movlist, *movp = movbuf; int lines[8][2] = { {0, 1}, {3, 1}, {6, 1}, {0, 3}, {1, 3}, {2, 3}, {0, 4}, {2, 2}, }; int val, found; for (i=0; i<8; i++) { val = -1; found = 1; for (j=0; j<3; j++) { if (val >= 0 && pos->board[lines[i][0] + j * lines[i][1]] != val) { found = 0; break; } val = pos->board[lines[i][0] + j * lines[i][1]]; if (val == RGB_EMPTY) { found = 0; break; } } if (found) break; } if (!found) { for (i=0; iboard[j * board_wid + i] != RGB_BP) { *movp++ = i; *movp++ = j; *movp++ = pos->board[j * board_wid + i] + 1; *movp++ = -1; } } *movp++ = -2; movlist = (byte *) (malloc (movp - movbuf)); memcpy (movlist, movbuf, (movp - movbuf)); return movlist; } static ResultType rgb_who_won (Pos *pos, Player to_play, char **commp) { static char comment[32]; char *who_str [] = { "White won", "Black won"}; int lines[8][2] = { {0, 1}, {3, 1}, {6, 1}, {0, 3}, {1, 3}, {2, 3}, {0, 4}, {2, 2}, }; int i, j; int val, found; for (i=0; i<8; i++) { val = -1; found = 1; for (j=0; j<3; j++) { if (val >= 0 && pos->board[lines[i][0] + j * lines[i][1]] != val) { found = 0; break; } val = pos->board[lines[i][0] + j * lines[i][1]]; if (val == RGB_EMPTY) { found = 0; break; } } if (found) { *commp = who_str[to_play == WHITE ? 1 : 0]; return to_play == WHITE ? RESULT_BLACK : RESULT_WHITE; } } *commp = NULL; return RESULT_NOTYET; } static int rgb_getmove (Pos *pos, int x, int y, GtkboardEventType type, Player to_play, byte **movp, int ** rmovep) { int val; static byte move[4]; if (type != GTKBOARD_BUTTON_RELEASE) return 0; val = pos->board [y * board_wid + x]; if (val == RGB_BP) return -1; move[0] = x; move[1] = y; move[2] = val+1; move[3] = -1; if (movp) *movp = move; return 1; } static unsigned char * rgb_get_rgbmap (int idx, int color) { int fg = 0, bg, i; char *colors; static char rgbbuf[3 * RGB_CELL_SIZE * RGB_CELL_SIZE]; colors = rgb_colors; if (idx == RGB_RP) fg = 255 << 16; else if (idx == RGB_GP) fg = 255 << 8; else if (idx == RGB_BP) fg = 255; else { return NULL;} for(i=0, bg=0;i<3;i++) { int col = colors[i]; if (col<0) col += 256; bg += col * (1 << (16-8*i));} rgbmap_ball_shadow_gen(55, rgbbuf, fg, bg, 17.0, 35.0, 3); return rgbbuf; } static ResultType rgb_eval (Pos *pos, Player to_play, float *eval) { int i, j; int lines[8][2] = { //{start, incr} // rows {0, 1}, {3, 1}, {6, 1}, // cols {0, 3}, {1, 3}, {2, 3}, // diagonals {0, 4}, {2, 2}, }; int val, found; for (i=0; i<8; i++) { val = -1; found = 1; for (j=0; j<3; j++) { if (val >= 0 && pos->board[lines[i][0] + j * lines[i][1]] != val) { found = 0; break; } val = pos->board[lines[i][0] + j * lines[i][1]]; if (val == RGB_EMPTY) { found = 0; break; } } if (found) { *eval = (to_play == WHITE ? -2*GAME_EVAL_INFTY : 2*GAME_EVAL_INFTY); return RESULT_NOTYET; } } *eval = 0; return RESULT_NOTYET; } gtkboard/src/samegame.c000066400000000000000000000273451153150217100153740ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ #include #include #include #include #include #include "game.h" #include "aaball.h" #define SAMEGAME_NUM_ANIM 8 #define SAMEGAME_CELL_SIZE 40 #define SAMEGAME_NUM_PIECES (3*SAMEGAME_NUM_ANIM) #define SAMEGAME_BOARD_WID 15 #define SAMEGAME_BOARD_HEIT 10 #define SAMEGAME_EMPTY 0 #define SAMEGAME_RP 1 #define SAMEGAME_BP 2 #define SAMEGAME_GP 3 char samegame_colors[6] = {50, 50, 50, 50, 50, 50}; void samegame_init (); Game Samegame = { SAMEGAME_CELL_SIZE, SAMEGAME_BOARD_WID, SAMEGAME_BOARD_HEIT, SAMEGAME_NUM_PIECES, samegame_colors, NULL, /*samegame_pixmaps*/ NULL, "Samegame", "Arcade", samegame_init}; typedef struct { int score; } Samegame_state; SCORE_FIELD samegame_score_fields[] = {SCORE_FIELD_RANK, SCORE_FIELD_USER, SCORE_FIELD_SCORE, SCORE_FIELD_TIME, SCORE_FIELD_DATE, SCORE_FIELD_NONE}; char *samegame_score_field_names[] = {"Rank", "User", "Score", "Time", "Date", NULL}; static void recursive_delete (byte *board, int x, int y, int val); static void pull_down (byte *board); static byte * synth_move (byte *newboard, byte *board); static int samegame_animate (Pos *pos, byte **movp); static int samegame_getmove (Pos *, int, int, GtkboardEventType, Player, byte **, int **); static char **samegame_get_pixmap (int , int); static void *samegame_newstate (Pos *, byte *); static ResultType samegame_who_won (Pos *, Player, char **); static void samegame_search (Pos *pos, byte **movp); static void samegame_getxy (byte *board, int *x, int *y); static int anim_curx=-1, anim_cury=-1; void samegame_set_init_pos (Pos *pos) { int i; for (i=0; iboard[i] = ((random () % 3) + 1) * SAMEGAME_NUM_ANIM; } void samegame_init () { game_single_player = 1; game_getmove = samegame_getmove; game_set_init_pos = samegame_set_init_pos; game_get_pixmap = samegame_get_pixmap; game_search = samegame_search; game_animate = samegame_animate; game_animation_time = 80; game_animation_use_movstack = FALSE; game_stateful = TRUE; game_state_size = sizeof (Samegame_state); game_newstate = samegame_newstate; game_who_won = samegame_who_won; game_scorecmp = game_scorecmp_def_dscore; game_score_fields = samegame_score_fields; game_score_field_names = samegame_score_field_names; game_doc_about_status = STATUS_COMPLETE; game_doc_about = "Samegame\n" "Single player game\n" "Status: Fully implemented\n" "URL: "GAME_DEFAULT_URL("samegame"); game_doc_rules = " * Two or more balls of the same color that form a connected region constitute a block.\n" " * Hovering the mouse over a ball will highlight the block that the ball belongs to.\n" " * Clicking on a ball removes that ball's block.\n" " * You get (n-2)^2 points for removing a block with n balls in it.\n" " * You get a 1000 point bonus if you remove all the balls.\n" " * The goal is to maximize your score.\n" " * As balls are removed, balls above fall down to take their place. If a column is removed, the column to its right moves to the left.\n" ; game_doc_strategy = " * Try to identify the color which occurs the most number of times.\n" " * Remove balls of the other 2 colors until all the balls of the most frequent color (or as many of them as possible) form a single block.\n" " * Remove this block. Now do the same with the remaining two colors.\n" " * Avoid getting into a situation in which there is a single ball of some color. If this happens you won't be able to clear the entire board.\n" ; } int samegame_over (byte *board) { int i, j, k; int incx[2] = {1, 0}; int incy[2] = {0, 1}; for (i=0; i board_wid - 1 || y < 0 || y > board_heit - 1) continue; if (board [y * board_wid + x] == board [j * board_wid + i]) return FALSE; } return TRUE; } ResultType samegame_who_won (Pos *pos, Player to_play, char **commp) { static char comment[32]; gboolean over = samegame_over (pos->board); char *scorestr = over ? "Game over. Score:" : "Score:"; snprintf (comment, 32, "%s %d", scorestr, pos->state ? ((Samegame_state *)pos->state)->score : 0); *commp = comment; return over ? RESULT_WON : RESULT_NOTYET; } static Samegame_state state = {0}; void *samegame_newstate (Pos *pos, byte *move) { int i, score = 0; gboolean bonus = FALSE; for (i=0; move[3*i] >= 0; i++) { if (move[3*i] == 0 && move[3*i + 1] == 0 && move[3*i + 2] == 0) bonus = TRUE; if (move[3*i+2] == 0) score++; else if (pos->board[move[3*i+1] * board_wid + move[3*i]] == 0) score--; } score -= 2; score *= score; if (score < 0) score = 0; state.score = (pos->state ? ((Samegame_state *)pos->state)->score : 0) + score; if (bonus) state.score += 1000; return &state; } static byte animgen_buf [SAMEGAME_BOARD_WID * SAMEGAME_BOARD_HEIT]; static void recursive_animgen (byte *board, int x, int y, int val, int newval, byte **mp) { int tmp; if (x < 0 || y < 0 || x >= board_wid || y >= board_heit) return; if (animgen_buf[y * board_wid + x] != 0) return; if (board [y * board_wid + x] == 0) return; if ((board [y * board_wid + x]-1)/SAMEGAME_NUM_ANIM != val) return; animgen_buf [y * board_wid + x] = 1; **mp = x; (*mp)++; **mp = y; (*mp)++; /* tmp = board[y * board_wid + x]; if (tmp % SAMEGAME_NUM_ANIM == 0) tmp -= SAMEGAME_NUM_ANIM; g_assert (tmp >= 0);*/ **mp = newval; (*mp)++; recursive_animgen (board, x - 1, y , val, newval, mp); recursive_animgen (board, x + 1, y , val, newval, mp); recursive_animgen (board, x , y - 1, val, newval, mp); recursive_animgen (board, x , y + 1, val, newval, mp); } int samegame_animate (Pos *pos, byte **movp) { static byte move[1024]; static int animdir = 1; int i, j; byte *mp = move; byte *board = pos->board; memset (animgen_buf, 0, SAMEGAME_BOARD_WID * SAMEGAME_BOARD_HEIT); if (anim_curx >= 0 && anim_cury >= 0 && board [anim_cury * board_wid + anim_curx] != 0) { int val = board[anim_cury * board_wid + anim_curx]; if (val % SAMEGAME_NUM_ANIM == 0) animdir = -1; if (val % SAMEGAME_NUM_ANIM == 1) animdir = 1; recursive_animgen (board, anim_curx, anim_cury, (val - 1) / SAMEGAME_NUM_ANIM, val + animdir, &mp); if (mp - move <= 3) mp = move; } for (i=0; iboard[y * board_wid + x]) == 0) return -1; /* do we have at least 1 neighbor */ do { if (x > 0 && val == pos->board[y * board_wid + x - 1]) break; if (x < board_wid -1 && val == pos->board[y * board_wid + x + 1 ]) break; if (y > 0 && val == pos->board[(y-1) * board_wid + x]) break; if (y < board_heit && val == pos->board[(y+1) * board_wid + x]) break; return -1; } while (0); newboard = (byte *) malloc (board_wid * board_heit); assert (newboard); memcpy (newboard, pos->board, board_wid * board_heit); recursive_delete (newboard, x, y, newboard[y * board_wid + x]); pull_down (newboard); if (movp) *movp = synth_move (newboard, pos->board); free (newboard); return 1; } int samegame_getmove (Pos *pos, int x, int y, GtkboardEventType type, Player to_play, byte **movp, int ** rmovep) { if (type == GTKBOARD_MOTION_NOTIFY) { anim_curx = x; anim_cury = y; } if (type == GTKBOARD_LEAVE_NOTIFY) { anim_curx = -1; anim_cury = -1; } if (type != GTKBOARD_BUTTON_RELEASE) return 0; return getmove_real (pos, x, y, movp); } static void recursive_delete (byte *board, int x, int y, int val) { if (x < 0 || y < 0 || x >= board_wid || y >= board_heit) return; if (board[y * board_wid + x] != val) return; board[y * board_wid + x] = 0; recursive_delete (board, x - 1, y , val); recursive_delete (board, x + 1, y , val); recursive_delete (board, x , y - 1, val); recursive_delete (board, x , y + 1, val); } static void pull_down (byte *board) { int i, j, k, cnt; byte *tempcol; tempcol = (byte *) malloc (board_heit); assert (tempcol); /* for each column apply gravity */ for (i=0; iboard, &x, &y); retval = getmove_real (pos, x, y, movp); assert (retval > 0); } void samegame_getxy (byte *board, int *x, int *y) { int i, j; for (i=0; i 0 && board [j * board_wid + i-1] == val) || (j > 0 && board [(j-1) * board_wid + i] == val)) { *x = i; *y = j; return; } } } gtkboard/src/sound.c000066400000000000000000000062311153150217100147340ustar00rootroot00000000000000#include #include #include #include #include "sound.h" #include "prefs.h" #ifdef HAVE_SDL #include #include Mix_Music *music = NULL; #endif extern gboolean opt_verbose; char *sound_dir = NULL; gboolean sound_initialized = FALSE; gboolean sound_enabled = TRUE; void sound_set_enabled (gboolean enabled) { sound_enabled = enabled; prefs_set_config_val ("enable_sound", enabled ? "true" : "false"); } gboolean sound_get_enabled () { return sound_enabled; } // callback when reading the value from the config file void sound_enable_pref_cb (gchar *key, gchar *value) { sound_enabled = prefs_get_bool_val (value); } // default list of directories to search for sound. This is obviously stupid, but I don't have a better idea. static char * default_sound_dirs[] = { "/usr/share/sounds/gtkboard", "/usr/local/share/sounds/gtkboard", "/opt/share/sounds/gtkboard", "sounds", "../sounds", NULL }; static void find_sound_dir () { int i; sound_dir = prefs_get_config_val ("sound_dir"); if (!sound_dir) sound_dir = g_strdup_printf ("%s/sounds/gtkboard", DATADIR); #if GLIB_MAJOR_VERSION > 1 if (!g_file_test (sound_dir, G_FILE_TEST_IS_DIR)) g_free (sound_dir); for (i=0; default_sound_dirs[i]; i++) { sound_dir = default_sound_dirs[i]; if (g_file_test (sound_dir, G_FILE_TEST_IS_DIR)) { if (opt_verbose) fprintf (stderr, "Using sound directory %s\n", sound_dir); return; } } fprintf (stderr, "Sound directory not found, sounds will be disabled\n"); sound_dir = NULL; #endif } void sound_init() { #ifdef HAVE_SDL int audio_rate = 22050; Uint16 audio_format = AUDIO_S16; int audio_channels = 2; int audio_buffers = 512; static gboolean first = TRUE; if (!first) return; first = FALSE; find_sound_dir (); SDL_Init(SDL_INIT_AUDIO); if(Mix_OpenAudio(audio_rate, audio_format, audio_channels, audio_buffers)) { fprintf(stderr, "Unable to open audio: %s\n", SDL_GetError()); return; } sound_initialized = TRUE; #endif } void sound_stop () { #ifdef HAVE_SDL if (music) { Mix_HaltMusic (); Mix_FreeMusic (music); music = NULL; } #endif } void sound_play_real (char *file) { #ifdef HAVE_SDL SDL_AudioSpec wave; SDL_AudioCVT cvt; Uint8 *tmp; sound_stop (); music = Mix_LoadMUS (file); if (!music) { fprintf(stderr, "Couldn't load %s: %s\n", file, SDL_GetError()); return; } Mix_PlayMusic(music, 0); #endif } void sound_play (SoundEvent event) { gchar *sound_file; gchar *file; if (!sound_enabled) return; switch (event) { case SOUND_PROGRAM_START: file = NULL; break; case SOUND_ILLEGAL_MOVE: file = "illegal_move.ogg"; break; case SOUND_HIGHSCORE: file = "highscore.ogg"; break; case SOUND_WON: file = "won.ogg"; break; case SOUND_LOST: file = "lost.ogg"; break; case SOUND_USER_MOVE: file = "user_move.ogg"; break; case SOUND_MACHINE_MOVE: file = "machine_move.ogg"; break; default: file = NULL; } if (!file) return; sound_init (); if (!sound_initialized) return; if (!sound_dir) return; sound_file = g_strdup_printf ("%s/%s", sound_dir, file); sound_play_real (sound_file); g_free (sound_file); } gtkboard/src/sound.h000066400000000000000000000007701153150217100147430ustar00rootroot00000000000000#ifndef _SOUND_H_ #define _SOUND_H_ #include "config.h" typedef enum { SOUND_PROGRAM_START, SOUND_ILLEGAL_MOVE, SOUND_WON, SOUND_LOST, SOUND_USER_MOVE, SOUND_MACHINE_MOVE, SOUND_GAME_START, SOUND_GAME_OVER, SOUND_HIGHSCORE, }SoundEvent; void sound_init(); void sound_stop (); void sound_play (SoundEvent event); void sound_set_enabled (gboolean enabled); gboolean sound_get_enabled (); void sound_set_enabled (gboolean enabled); void sound_enable_pref_cb (gchar *key, gchar *value); #endif gtkboard/src/stack.c000066400000000000000000000100161153150217100147050ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ #include "stack.h" #include "game.h" #include "move.h" #include #include #include #include #include /** \file stack.c \brief implements a stack for navigating undoing and redoing moves stack is as follows: 0 ---> movstack_ptr : "back" list; movstack_ptr ---> movstack_max : "forward" list */ //! Current position in the stack static int movstack_ptr = 0; //! Current size of the stack static int movstack_max = 0; //! Maximum size of stack #define STACK_SIZE 4096 //! Array for moves static byte *movstack[STACK_SIZE]; //! Array for move inverses. See mov_getinv(). static byte *movinvstack[STACK_SIZE]; void stack_free () { movstack_free (); statestack_free (); } void movstack_init () { // uh? } int movstack_get_num_moves() { return movstack_ptr; } void movstack_push (byte *board, byte *move) { assert (movstack_ptr < STACK_SIZE - 1); movstack[movstack_ptr] = movdup (move); movinvstack[movstack_ptr] = mov_getinv (board, move); movstack_ptr++; if (movstack_ptr > movstack_max) movstack_max = movstack_ptr; } byte *movstack_pop () { if (movstack_ptr == 0) return NULL; return movstack[--movstack_ptr]; } //! Truncates a stack to the current poisition. /** This will be called when the user makes a move when it is not the final poisition. */ void movstack_trunc () { int i; assert (movstack_ptr <= movstack_max); for (i = movstack_ptr; i < movstack_max; i++) { free (movstack[i]); free (movinvstack[i]); } movstack_max = movstack_ptr; } byte * movstack_forw () { if (movstack_ptr < movstack_max) movstack_ptr++; else return NULL; return movstack[movstack_ptr-1]; } byte * movstack_back () { if (movstack_ptr > 0) movstack_ptr--; else return NULL; return movinvstack[movstack_ptr]; } void movstack_free () { int i; for (i=0; i statestack_max) statestack_max = statestack_ptr; } void *statestack_peek () { if (statestack_ptr == 0) return NULL; return statestack[statestack_ptr-1]; } void *statestack_pop () { if (statestack_ptr == 0) return NULL; return statestack[--statestack_ptr]; } void statestack_trunc () { int i; assert (statestack_ptr <= statestack_max); for (i = statestack_ptr; i < statestack_max; i++) free (statestack[i]); statestack_max = statestack_ptr; } void * statestack_forw () { if (statestack_ptr < statestack_max) statestack_ptr++; else return NULL; return statestack[statestack_ptr-1]; } void * statestack_back () { if (statestack_ptr > 0) statestack_ptr--; else return NULL; return statestack[statestack_ptr-1]; } void statestack_free () { int i; for (i=0; i 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 USA */ #ifndef _STACK_H_ #define _STACK_H_ #include #include #ifndef byte #define byte gint8 #endif void stack_free (); void movstack_init (); int movstack_get_num_moves (); void movstack_push (byte *, byte *); byte *movstack_pop (); void movstack_trunc (); byte * movstack_forw (); byte * movstack_back (); void movstack_free (); void statestack_push (void *state); void *statestack_peek (); void *statestack_pop (); void statestack_trunc (); void *statestack_forw (); void *statestack_back (); void statestack_free (); #endif gtkboard/src/stopgate.c000066400000000000000000000407711153150217100154410ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ #include #include #include #include #include "game.h" #include "aaball.h" #define STOPGATE_CELL_SIZE 40 #define STOPGATE_NUM_PIECES 4 #define STOPGATE_BOARD_WID 9 #define STOPGATE_BOARD_HEIT 9 char stopgate_colors[6] = {180, 200, 180, 200, 140, 140}; static char * blue_gate_north_40_xpm [] = { "40 40 2 1", " c none", ". c #0000ff", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", }; static char * blue_gate_south_40_xpm [] = { "40 40 2 1", " c none", ". c #0000ff", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", " ............ ", }; static char * blue_gate_east_40_xpm [] = { "40 40 2 1", " c none", ". c #0000ff", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ..........................", " ..........................", " ..........................", " ..........................", " ..........................", " ..........................", " ..........................", " ..........................", " ..........................", " ..........................", " ..........................", " ..........................", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", }; static char * blue_gate_west_40_xpm [] = { "40 40 2 1", " c none", ". c #0000ff", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", ".......................... ", ".......................... ", ".......................... ", ".......................... ", ".......................... ", ".......................... ", ".......................... ", ".......................... ", ".......................... ", ".......................... ", ".......................... ", ".......................... ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", }; char ** stopgate_pixmaps [] = { blue_gate_north_40_xpm, blue_gate_south_40_xpm, blue_gate_east_40_xpm, blue_gate_west_40_xpm, }; #define STOPGATE_NORTH 1 #define STOPGATE_SOUTH 2 #define STOPGATE_EAST 3 #define STOPGATE_WEST 4 #define STOPGATE_EMPTY 0 #define abs(x) ((x) < 0 ? -(x) : (x)) int stopgate_getmove (Pos *, int, int, GtkboardEventType, Player, byte **, int **); void stopgate_init (); ResultType stopgate_who_won (Pos *, Player, char **); ResultType stopgate_eval (Pos *, Player, float *eval); byte * stopgate_movegen (Pos *); Game Stopgate = { STOPGATE_CELL_SIZE, STOPGATE_BOARD_WID, STOPGATE_BOARD_HEIT, STOPGATE_NUM_PIECES, stopgate_colors, NULL, stopgate_pixmaps, "Stopgate", "Nimlike games", stopgate_init}; static int stopgate_curx = - 1, stopgate_cury = -1; void stopgate_init () { game_getmove = stopgate_getmove; game_who_won = stopgate_who_won; game_eval = stopgate_eval; game_movegen = stopgate_movegen; game_white_string = "Vertical"; game_black_string = "Horizontally"; game_doc_about_status = STATUS_COMPLETE; game_doc_rules = "Two players take turns in placing dominoes on the board. The first player places them vertically and the second horizontally. To place a domino, press the mouse button on a square, drag the mouse to the adjacent square and release the mouse button. The goal is to be the last player to place a domino; the game ends when it becomes obvious who the winner is."; game_doc_strategy = "Make parallel columns of dominoes such that you will be able to play in between the columns but the opponent won't."; } static int incx[] = { -1, -1, -1, 0, 0, 1, 1, 1}; static int incy[] = { -1, 0, 1, -1, 1, -1, 0, 1}; ResultType stopgate_who_won (Pos *pos, Player player, char ** commp) { char *who_str[2] = {"Vertical won", "Horizontal won"}; int wscore, bscore, i, j; float eval; ResultType result; result = stopgate_eval (pos, player, &eval); if (result == RESULT_WHITE) *commp = who_str[0]; if (result == RESULT_BLACK) *commp = who_str[1]; return result; } #define EVAL_ISEMPTY(x, y) ((ISINBOARD((x), (y))) && (board[(y) * board_wid + (x)] == STOPGATE_EMPTY)) #define EVAL_OPENSQUARE(x, y) (EVAL_ISEMPTY ((x), (y)) && (EVAL_ISEMPTY ((x)-1,(y)) || EVAL_ISEMPTY ((x)+1, (y))) && (EVAL_ISEMPTY ((x),(y)-1) || EVAL_ISEMPTY ((x), (y)+1))) enum { REGION_WHITE = STOPGATE_NUM_PIECES + 1, REGION_BLACK, REGION_OPEN_X = 1 << 4, REGION_OPEN_Y = 1 << 5, }; static int regions[STOPGATE_BOARD_WID * STOPGATE_BOARD_HEIT]; /* Find which regions are open, which are vertical (REGION_WHITE) and which are horizontal (REGION_BLACK) clever algo that avoids a queue: every square in an open region must be on a straight line from a square which has unfilled nbrs in both directions */ static void find_regions (byte *board) { int i, j; static int count = 0; for (i=0; iboard; Player player = pos->player; for (i=0; iboard [(j + incy) * board_wid + (i + incx)] != STOPGATE_EMPTY) continue; if (!EVAL_OPENSQUARE (i, j) && !EVAL_OPENSQUARE (i + incx, j + incy)) continue; *movp++ = i; *movp++ = j; *movp++ = (player == WHITE ? STOPGATE_NORTH : STOPGATE_EAST); *movp++ = i + incx; *movp++ = j + incy; *movp++ = (player == WHITE ? STOPGATE_SOUTH : STOPGATE_WEST); *movp++ = -1; } *movp++ = -2; movlist = (byte *) (malloc (movp - movbuf)); memcpy (movlist, movbuf, (movp - movbuf)); return movlist; } ResultType stopgate_eval (Pos *pos, Player player, float *eval) { int i, j; float val = 0; gboolean wfound = FALSE, bfound = FALSE, openfound = FALSE; int run_len=0; int run_eval_w = 0, run_eval_b = 0; byte *board = pos->board; find_regions (board); for (i=0; i=0; j--) { for (i=0; i 0 ? RESULT_WHITE : RESULT_BLACK; } if (player == WHITE && !wfound) { *eval = (val-1); return RESULT_BLACK; } if (player == BLACK && !bfound) { *eval = (val+1); return RESULT_WHITE; } *eval = val + 0.01 * random () / RAND_MAX; return RESULT_NOTYET; } int stopgate_getmove (Pos *pos, int x, int y, GtkboardEventType type, Player to_play, byte **movp, int **rmovp) { int i, j, sw_len, found=0; static byte move[128]; byte *mp = move; int diffx, diffy, dir1 = -1, dir2 = -1; if (type == GTKBOARD_BUTTON_PRESS) { if (pos->board [y * board_wid + x] != STOPGATE_EMPTY) return -1; stopgate_curx = x; stopgate_cury = y; return 0; } if (type != GTKBOARD_BUTTON_RELEASE) return 0; if (stopgate_curx < 0) return -1; diffx = x - stopgate_curx; diffy = y - stopgate_cury; if (to_play == WHITE && diffx == 0 && diffy == 1) dir1 = STOPGATE_NORTH, dir2 = STOPGATE_SOUTH; else if (to_play == WHITE && diffx == 0 && diffy == -1) dir1 = STOPGATE_SOUTH, dir2 = STOPGATE_NORTH; else if (to_play == BLACK && diffx == 1 && diffy == 0) dir1 = STOPGATE_EAST, dir2 = STOPGATE_WEST; else if (to_play == BLACK && diffx == -1 && diffy == 0) dir1 = STOPGATE_WEST, dir2 = STOPGATE_EAST; else { stopgate_curx = stopgate_cury = -1; return -1; } if (pos->board [y * board_wid + x] != STOPGATE_EMPTY) { stopgate_curx = stopgate_cury = -1; return -1; } *mp++ = stopgate_curx; *mp++ = stopgate_cury; *mp++ = dir1; *mp++ = x; *mp++ = y; *mp++ = dir2; *mp++ = -1; *movp = move; return 1; } gtkboard/src/tetris.c000066400000000000000000000336061153150217100151240ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ #include #include #include #include #include #include #include "game.h" #include "aaball.h" #define TETRIS_CELL_SIZE 20 #define TETRIS_NUM_PIECES 32 #define TETRIS_REAL_WID 10 #define TETRIS_BOARD_WID 16 #define TETRIS_BOARD_HEIT 22 #define TETRIS_PREVIEW_HEIT 3 char tetris_colors[9] = {50, 50, 50, 50, 50, 50, 150, 150, 150}; static int tetris_init_pos [TETRIS_BOARD_WID*TETRIS_BOARD_HEIT] = { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 32, 32, 32, 32, 32, 32, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 32, 32, 32, 32, 32, 32, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 32, 32, 32, 32, 32, 32, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 32, 0 , 0 , 0 , 0 , 32, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 32, 0 , 0 , 0 , 0 , 32, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 32, 0 , 0 , 0 , 0 , 32, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 32, 0 , 0 , 0 , 0 , 32, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 32, 32, 32, 32, 32, 32, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 32, 32, 32, 32, 32, 32, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 32, 32, 32, 32, 32, 32, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 32, 32, 32, 32, 32, 32, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 32, 32, 32, 32, 32, 32, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 32, 32, 32, 32, 32, 32, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 32, 32, 32, 32, 32, 32, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 32, 32, 32, 32, 32, 32, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 32, 32, 32, 32, 32, 32, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 32, 32, 32, 32, 32, 32, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 32, 32, 32, 32, 32, 32, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 32, 32, 32, 32, 32, 32, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 32, 32, 32, 32, 32, 32, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 32, 32, 32, 32, 32, 32, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 32, 32, 32, 32, 32, 32, }; void tetris_init (); Game Tetris = { TETRIS_CELL_SIZE, TETRIS_BOARD_WID, TETRIS_BOARD_HEIT, TETRIS_NUM_PIECES, tetris_colors, tetris_init_pos, NULL, "Tetris", "Arcade", tetris_init}; SCORE_FIELD tetris_score_fields[] = {SCORE_FIELD_USER, SCORE_FIELD_SCORE, SCORE_FIELD_DATE, SCORE_FIELD_NONE}; char *tetris_score_field_names[] = {"User", "Score", "Date", NULL}; #define TETRIS_EMPTY 0 #define TETRIS_BRICK_4 1 #define TETRIS_BRICK_22 2 #define TETRIS_BRICK_121A 3 #define TETRIS_BRICK_121B 4 #define TETRIS_BRICK_T 5 #define TETRIS_BRICK_LA 6 #define TETRIS_BRICK_LB 7 #define TETRIS_BRICK_INACTIVE 8 #define TETRIS_BRICK_DYING 9 #define TETRIS_BRICK_MASK 15 #define TETRIS_BRICK_MOTION_MASK 16 #define TETRIS_UNUSED 32 static void tetris_set_init_pos (Pos *pos); static char ** tetris_get_pixmap (int idx, int color); static int tetris_getmove_kb (Pos *cur_pos, int key, byte **move, int **); static int tetris_animate (Pos *pos, byte **movp); static ResultType tetris_who_won (Pos *pos, Player to_play, char **commp); static void *tetris_newstate (Pos *, byte *); static void tetris_free (); typedef struct { int score; } Tetris_state; static int num_bricks = 0; static int level = 1; static int anim_time_left = 0; static int anim_time_def = 0; void tetris_init () { game_single_player = TRUE; game_get_pixmap = tetris_get_pixmap; game_getmove_kb = tetris_getmove_kb; game_animation_time = 50; game_animate = tetris_animate; game_who_won = tetris_who_won; game_stateful = TRUE; game_state_size = sizeof (Tetris_state); game_newstate = tetris_newstate; game_scorecmp = game_scorecmp_def_dscore; game_allow_back_forw = FALSE; game_scorecmp = game_scorecmp_def_dscore; game_score_fields = tetris_score_fields; game_score_field_names = tetris_score_field_names; game_draw_cell_boundaries = TRUE; game_free = tetris_free; game_doc_about_status = STATUS_COMPLETE; game_doc_about = "Tetris\n" "Single player game\n" "Status: Fully implemented\n" "URL: "GAME_DEFAULT_URL ("tetris"); game_doc_rules = "This is a game of falling bricks. Your objective is to rotate the pieces as they fall in order to make complete rows of bricks. Use the arrow keys to move left or right, Up to rotate, and Space to fall. Completing a row gives you 40 points, two rows simultaneously 100 points, three rows 300 points, and four rows (a tetris) 1200 points."; } void tetris_free () { num_bricks = 0; level = 1; anim_time_left = 0; } void *tetris_newstate (Pos *pos, byte *move) // TODO: implement points for falling { int i, score = 0; static Tetris_state state; int linepts[5] = {0, 40, 100, 300, 1200}; for (i=0; move[3*i] >= 0; i++) if (move[3*i+2] == 0) score++; score /= TETRIS_REAL_WID; score = linepts [score]; state.score = (pos->state ? ((Tetris_state *)pos->state)->score : 0) + score; return &state; } int tetris_game_over (byte *board) { int i; for (i=0; iboard); snprintf (comment, 32, "%s %s %d", over ? "Game over. " : "", "Score:", pos->state ? ((Tetris_state *)pos->state)->score : 0); *commp = comment; return over ? RESULT_WON : RESULT_NOTYET; } int tetris_fall (byte *pos, byte **movp, int height) { static byte move[32]; byte *mp = move; int moving = 0; int canfall = 1; int i, j, k; for (j=0; j j) height = j; moving = 1; if (j == 0) canfall = 0; for (k=1; k<=height; k++) { tmp = pos [(j-k) * board_wid + i]; if (tmp != 0 && !(tmp & TETRIS_BRICK_MOTION_MASK)) canfall = 0; } } } if (moving && canfall) { for (i=0; i= board_heit - height || !(pos [(j+height) * board_wid + i] & TETRIS_BRICK_MOTION_MASK))) { *mp++ = i; *mp++ = j; *mp++ = 0; } } *mp++ = -1; *movp = move; return 1; } return -1; } int tetris_animate (Pos *pos, byte **movp) { static byte move[1024]; static int count = 0; byte *mp = move; byte *board = pos->board; int i, j; int level = num_bricks / 20 + 1; if (level > 10) level = 10; anim_time_def = (12 - level) / 2; if (anim_time_left) { anim_time_left--; return 0; } anim_time_left = 12 - level; if (tetris_fall(board, movp, 1) > 0) return 1; for (i=0; i 0) { for (; j+nfullboard; if (key == ' ') { for (i = board_heit; i>0; i--) if (tetris_fall(board, movp, i) > 0) { anim_time_left = anim_time_def; return 1; } return -1; } if (key == GDK_Down) { int retval = tetris_fall(board, movp, 1); if (retval > 0) anim_time_left = anim_time_def; return retval; } if (key == GDK_Up) { int sumx = 0, sumy = 0, k = 0, incy; int thebrick = 0; byte newboard [4][2]; for (i=0; i 0 ? 1 : 0; sumx /= 4; sumy /= 4; for (i=0; i= TETRIS_REAL_WID || newboard[k][1] >= board_heit) return -1; if (board [newboard [k][1] * board_wid + newboard[k][0]] == TETRIS_BRICK_INACTIVE) return -1; k++; } for (i=0; i= TETRIS_REAL_WID) return -1; if (board [j * board_wid + i - incx] != 0 && !(board [j * board_wid + i - incx] & TETRIS_BRICK_MOTION_MASK)) return -1; } for (i=0; i= 0 && i+incx < TETRIS_REAL_WID) if (!(board [j * board_wid + i] & TETRIS_BRICK_MOTION_MASK) && (board [j * board_wid + i+incx] & TETRIS_BRICK_MOTION_MASK)) { *mp++ = i; *mp++ = j; *mp++ = board [j * board_wid + i+incx]; } if (board [j * board_wid + i] & TETRIS_BRICK_MOTION_MASK && (i+incx < 0 || i+incx >= TETRIS_REAL_WID || !(board [j * board_wid + i+incx] & TETRIS_BRICK_MOTION_MASK))) { *mp++ = i; *mp++ = j; *mp++ = 0; } } *mp++ = -1; *movp = move; return 1; } char ** tetris_get_pixmap (int idx, int color) { int i; static char *pixmap [TETRIS_CELL_SIZE + 2]; char *line = " "; //pixmap = g_new(char *, TETRIS_CELL_SIZE + 2); pixmap[0] = "20 20 1 1"; if (idx == TETRIS_UNUSED) pixmap[1] = " c #969696"; else switch (idx & TETRIS_BRICK_MASK) { case TETRIS_BRICK_4: pixmap[1] = " c blue"; break; case TETRIS_BRICK_22: pixmap[1] = " c red"; break; case TETRIS_BRICK_121A: pixmap[1] = " c yellow"; break; case TETRIS_BRICK_121B: pixmap[1] = " c magenta"; break; case TETRIS_BRICK_T: pixmap[1] = " c green"; break; case TETRIS_BRICK_LA: pixmap[1] = " c pink"; break; case TETRIS_BRICK_LB: pixmap[1] = " c orange"; break; case TETRIS_BRICK_INACTIVE: pixmap[1] = " c gray"; break; default: return NULL; } for (i=0; i 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 USA */ #include #include #include "game.h" #define TOWERS_CELL_SIZE 16 #define TOWERS_NUM_PIECES 3 //#define TOWERS_NUM_RINGS 7 #define TOWERS_BOARD_HEIT_REAL(num_rings) (2 * num_rings + 4) #define TOWERS_TOWER_WID_REAL(num_rings) (2 * num_rings + 3) #define TOWERS_BOARD_WID_REAL(num_rings) (3 * TOWERS_TOWER_WID_REAL(num_rings)) #define TOWERS_TOWER_WID TOWERS_TOWER_WID_REAL(num_rings) #define TOWERS_BOARD_WID TOWERS_BOARD_WID_REAL(num_rings) #define TOWERS_BOARD_HEIT TOWERS_BOARD_HEIT_REAL(num_rings) #define TOWERS_EMPTY 0 #define TOWERS_POLE 1 #define TOWERS_RING_TOP 2 #define TOWERS_RING_BOT 3 #define TOWERS_RING_MID 3 #define TOWERS_RING_LEFT 4 #define TOWERS_RING_RIGHT 5 char towers_colors[6] = {150, 150, 150, 150, 150, 150}; static int num_rings = -1; static char *pole_16_16_xpm[] = { "16 16 5 1", "1 c #AAAA66", "2 c #999955", "3 c #888844", "4 c #80803b", "5 c #777733", "5433221111223345", "5433221111223345", "5433221111223345", "5433221111223345", "5433221111223345", "5433221111223345", "5433221111223345", "5433221111223345", "5433221111223345", "5433221111223345", "5433221111223345", "5433221111223345", "5433221111223345", "5433221111223345", "5433221111223345", "5433221111223345", }; static char *ring_top_16_16_xpm[] = { "16 16 2 1", " c #cccc99", ". c #aaaa77", "................", "................", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", }; static char *ring_bot_16_16_xpm[] = { "16 16 2 1", " c #cccc99", ". c #aaaa77", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "................", "................", }; static char **towers_pixmaps[] = { pole_16_16_xpm, ring_top_16_16_xpm, ring_bot_16_16_xpm, }; static int towers_init_pos4[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, }; static int towers_init_pos5[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, }; static int towers_init_pos6[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, }; static int towers_init_pos7[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, }; void towers_init (); Game Towers = { TOWERS_CELL_SIZE, TOWERS_BOARD_WID_REAL(4), TOWERS_BOARD_HEIT_REAL(4), TOWERS_NUM_PIECES, towers_colors, towers_init_pos4, towers_pixmaps, "Tower of Hanoi", "Logic puzzles", towers_init}; Game Towers5 = { TOWERS_CELL_SIZE, TOWERS_BOARD_WID_REAL(5), TOWERS_BOARD_HEIT_REAL(5), TOWERS_NUM_PIECES, towers_colors, towers_init_pos5, towers_pixmaps, "Tower of Hanoi 5", NULL, towers_init}; Game Towers6 = { TOWERS_CELL_SIZE, TOWERS_BOARD_WID_REAL(6), TOWERS_BOARD_HEIT_REAL(6), TOWERS_NUM_PIECES, towers_colors, towers_init_pos6, towers_pixmaps, "Tower of Hanoi 6", NULL, towers_init}; Game Towers7 = { TOWERS_CELL_SIZE, TOWERS_BOARD_WID_REAL(7), TOWERS_BOARD_HEIT_REAL(7), TOWERS_NUM_PIECES, towers_colors, towers_init_pos7, towers_pixmaps, "Tower of Hanoi 7", NULL, towers_init}; SCORE_FIELD towers_score_fields[] = {SCORE_FIELD_RANK, SCORE_FIELD_USER, SCORE_FIELD_SCORE, SCORE_FIELD_TIME, SCORE_FIELD_DATE, SCORE_FIELD_NONE}; char *towers_score_field_names[] = {"Rank", "User", "Moves", "Time", "Date", NULL}; static int towers_getmove (Pos *, int, int, GtkboardEventType, Player, byte **, int **); static ResultType towers_who_won (Pos *, Player, char **); void towers_reset_uistate (); void towers_get_render (Pos *pos, byte *move, int **rmovp); GameLevel towers_levels[] = { {"4 rings", &Towers}, {"5 rings", &Towers5}, {"6 rings", &Towers6}, {"7 rings", &Towers7}, { NULL, NULL } }; void towers_init (Game *game) { game_single_player = TRUE; game_getmove = towers_getmove; game_who_won = towers_who_won; game_scorecmp = game_scorecmp_def_iscore; game_score_fields = towers_score_fields; game_score_field_names = towers_score_field_names; game_reset_uistate = towers_reset_uistate; game_get_render = towers_get_render; game_levels = towers_levels; game_doc_about_status = STATUS_COMPLETE; game_doc_about = "Towers\n" "Single player game\n" "Status: Fully implemented\n" "URL: "GAME_DEFAULT_URL("towers"); game_doc_rules = " Transfer all the rings from the first pole to the last. A ring can never lie on a smaller one."; ; if (game == &Towers) num_rings = 4; else if (game == &Towers5) num_rings = 5; else if (game == &Towers6) num_rings = 6; else if (game == &Towers7) num_rings = 7; } static gboolean towers_over (byte *board) { return board [TOWERS_TOWER_WID/2] != TOWERS_RING_BOT && board [TOWERS_TOWER_WID/2+TOWERS_TOWER_WID] != TOWERS_RING_BOT; } ResultType towers_who_won (Pos *pos, Player to_play, char **commp) { static char comment[32]; gboolean over = towers_over (pos->board); char *scorestr = over ? "You won. Moves:" : "Moves:"; snprintf (comment, 32, "%s %d", scorestr, pos->num_moves); *commp = comment; return over ? RESULT_WON : RESULT_NOTYET; } static int cur_row = -1; #define POLE_ROW(x) (((x)/TOWERS_TOWER_WID)*TOWERS_TOWER_WID+TOWERS_TOWER_WID/2) // Find the heit and len of the top ring in the tower corresp to row static void get_top_ring (byte *board, int row, int *heit, int *len) { int pole_row = POLE_ROW (row); int i, j; for (j = board_heit - 1; j >= 0; j--) if (board [j * board_wid + pole_row] == TOWERS_RING_TOP) break; if (j < 0) { if (heit) *heit = -1; if (len) *len = -1; return; } for (i=0; ; i++) if (board [j * board_wid + pole_row + i] != TOWERS_RING_TOP) break; if (heit) *heit = j; if (len) *len = i; } int towers_getmove (Pos *pos, int x, int y, GtkboardEventType type, Player to_play, byte **movp, int ** rmovep) { static byte move[512]; static int rmove[512]; byte *mp = move; int *rp = rmove; int heit1, heit2, len1, len2; int i, j, pole_row; if (type != GTKBOARD_BUTTON_RELEASE) return 0; if (cur_row < 0) { get_top_ring (pos->board, x, &heit1, &len1); if (heit1 < 0) return -1; cur_row = x; pole_row = POLE_ROW(x); for (j=0; j<=1; j++) for (i = pole_row - len1 + 1; i <= pole_row + len1 - 1; i++) { *rp++ = i; *rp++ = heit1 - j; *rp++ = RENDER_SHADE1; } *rp++ = -1; *rmovep = rmove; return 0; } get_top_ring (pos->board, cur_row, &heit1, &len1); get_top_ring (pos->board, x, &heit2, &len2); pole_row = POLE_ROW(cur_row); for (j=0; j<=1; j++) for (i = pole_row - len1 + 1; i <= pole_row + len1 - 1; i++) { *mp++ = i; *mp++ = heit1 - j; *mp++ = i == pole_row ? TOWERS_POLE : TOWERS_EMPTY; *rp++ = i; *rp++ = heit1 - j; *rp++ = 0; } *rp++ = -1; *rmovep = rmove; if (POLE_ROW(cur_row) == POLE_ROW(x)) { cur_row = -1; return 0; } if (heit2 >= 0 && len1 > len2) { cur_row = -1; return -1; } heit2 += 2; pole_row = POLE_ROW(x); for (j=0; j<=1; j++) for (i = pole_row - len1 + 1; i <= pole_row + len1 - 1; i++) { *mp++ = i; *mp++ = heit2 - j; *mp++ = j == 0 ? TOWERS_RING_TOP : TOWERS_RING_BOT; } *mp++ = -1; *movp = move; cur_row = -1; return 1; } void towers_reset_uistate () { cur_row = -1; } void towers_get_render (Pos *pos, byte *move, int **rmovp) { static int rmove[512]; int *rp = rmove; int i, j; for (i=0; irender[j * board_wid + i] != RENDER_NONE) { *rp++ = i; *rp++ = j; *rp++ = RENDER_NONE; } *rp++ = -1; *rmovp = rmove; } gtkboard/src/ui.c000066400000000000000000001143051153150217100142230ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ #include #include #include #include #include #include #include #include #include #include #include #include #ifndef G_MODULE_IMPORT #include // Why isn't this included by glib.h??? #endif #include #include #ifdef HAVE_GNOME #include #include #endif #include "config.h" #include "ui.h" #include "prefs.h" #include "move.h" #include "menu.h" #include "ui_common.h" #include "board.h" #include "sound.h" //! Default thinking time per move #define DEF_TIME_PER_MOVE 2000 extern Game Othello, Samegame, Rgb, Fifteen, Memory, Tetris, Chess, Antichess, Hiq, Checkers, Plot4, Maze, Infiltrate, Hypermaze, Ataxx, Pentaline, Mastermind, Pacman, Flw, Wordtris, Ninemm, Stopgate, Knights, Breakthrough, CapturePento, Towers, Quarto, Kttour, Eightqueens, Dnb, Blet, Othello6x6 ; Game *games[] = { &Chess, &Antichess, &Breakthrough, &Pacman, &Fifteen, &Samegame, &Tetris, &Blet, &Eightqueens, &Towers, &Hiq, &Plot4, &Quarto, &Rgb, &Pentaline, &Dnb, &Stopgate, &CapturePento, &Knights, &Othello, &Othello6x6, &Wordtris, &Flw, &Maze, &Hypermaze, &Infiltrate, &Kttour, &Mastermind, &Ataxx, &Checkers, &Memory, &Ninemm, }; const int num_games = sizeof (games) / sizeof (games[0]); gboolean engine_flag = FALSE; // are we client or server. server will set it to TRUE /* streams to communicate with engine */ FILE *move_fin, *move_fout; static GIOChannel *ui_in = NULL; Pos cur_pos = {NULL, NULL, NULL, WHITE, NULL, NULL, 0, 0}; int board_wid, board_heit; static int engine_pid = -1; static gint animate_tag = -1; //int state_player = WHITE; gboolean game_allow_undo = FALSE; gboolean game_single_player = FALSE; gboolean game_animation_use_movstack = TRUE; gboolean game_allow_back_forw = TRUE; int game_animation_time = 0; gchar *game_doc_about = NULL; gchar *game_doc_rules = NULL; gchar *game_doc_strategy = NULL; gchar *game_doc_history = NULL; CompletionStatus game_doc_about_status = STATUS_NONE; gchar *game_white_string = "White", *game_black_string = "Black"; gboolean ui_gameover = FALSE; gboolean ui_stopped = TRUE; gboolean ui_cheated = FALSE; gboolean game_stateful = FALSE; gboolean state_gui_active = FALSE; gboolean game_draw_cell_boundaries = FALSE; gboolean game_start_immediately = FALSE; gboolean game_allow_flip = FALSE; gboolean game_file_label = 0, game_rank_label = 0; char *game_highlight_colors = NULL; char game_highlight_colors_def[9] = {0xff, 0xff, 0, 0, 0, 0, 0, 0, 0}; GameLevel *game_levels = NULL; HeurTab *game_htab = NULL; int game_state_size = 0; SCORE_FIELD * game_score_fields = prefs_score_fields_def; gchar **game_score_field_names = prefs_score_field_names_def; char **game_bg_pixmap = NULL; Game *opt_game = NULL; FILE *opt_infile = NULL; FILE *opt_logfile = NULL; int opt_delay = DEF_TIME_PER_MOVE; int opt_quiet = 0; int opt_white = NONE; int opt_black = NONE; int ui_white = NONE; int ui_black = NONE; int opt_verbose = 0; static gboolean opt_html_help = FALSE; extern void engine_main (int, int); extern ResultType engine_eval (Pos *, Player, float *); gboolean impl_check (); void ui_check_who_won (); void game_set_init_pos_def (Pos *); int ui_get_machine_move (); void ui_make_human_move (byte *, int *); void set_game_params (); ResultType (*game_eval) (Pos *, Player, float *) = NULL; ResultType (*game_eval_incr) (Pos *, byte *, float *) = NULL; gboolean (*game_use_incr_eval) (Pos *) = NULL; float (*game_eval_white) (Pos *, int) = NULL; float (*game_eval_black) (Pos *, int) = NULL; void (*game_search) (Pos *, byte **) = NULL; byte * (*game_movegen) (Pos *) = NULL; InputType (*game_event_handler) (Pos *, GtkboardEvent *, MoveInfo *) = NULL; int (*game_getmove) (Pos *, int, int, GtkboardEventType, Player, byte **, int **) = NULL; int (*game_getmove_kb) (Pos *, int, byte **, int **) = NULL; ResultType (*game_who_won) (Pos *, Player, char **) = NULL; int (*game_animate) (Pos *, byte **) = NULL; char **( *game_get_pixmap) (int, int) = NULL; guchar *( *game_get_rgbmap) (int, int) = NULL; void (*game_free) () = NULL; void * (*game_newstate) (Pos *, byte *) = NULL; void (*game_set_init_pos) (Pos *) = game_set_init_pos_def; void (*game_set_init_render) (Pos *) = NULL; void (*game_get_render) (Pos *, byte *, int **) = NULL; void (*game_reset_uistate) () = NULL; int (*game_scorecmp) (gchar *, int, gchar*, int) = NULL; int (*game_scorecmp_def_dscore) (gchar *, int, gchar*, int) = prefs_scorecmp_dscore; int (*game_scorecmp_def_iscore) (gchar *, int, gchar*, int) = prefs_scorecmp_iscore; int (*game_scorecmp_def_time) (gchar *, int, gchar*, int) = prefs_scorecmp_time; GtkWidget *main_window, *board_area = NULL; GtkWidget *board_rowbox = NULL, *board_colbox = NULL; static void ignore() {} static void html_help_gen (); void ui_cleanup () { if (opt_game) ui_terminate_game(); sound_stop (); prefs_write_config_file (); signal (SIGCHLD, ignore); if (engine_pid > 0) kill (engine_pid, SIGKILL); if (opt_verbose) printf ("gtkboard: normal exit.\n"); exit (0); } void ui_segv_cleanup () { signal (SIGCHLD, ignore); if (engine_pid > 0) kill (engine_pid, SIGKILL); fprintf (stderr, "gtkboard: caught segv, exiting.\n"); exit (1); } void ui_child_cleanup () { int status; waitpid (engine_pid, &status, WNOHANG | WUNTRACED); if (!WIFSIGNALED (status)) return; if (WTERMSIG (status) == SIGSEGV) { fprintf (stderr, "gtkboard: engine appears to have died, exiting.\n"); exit (1); } } int ui_animate_cb () { int ret; byte *move; if (ui_stopped) return TRUE; if (!game_animate) return FALSE; if (game_animate (&cur_pos, &move) > 0) { if (game_animation_use_movstack) ui_make_human_move (move, NULL); else board_apply_refresh (move, NULL); } return TRUE; } // Will be called on both ui and engine void game_set_init_pos_def (Pos *pos) { int x, y; for (x=0; xboard[y * board_wid + x] = opt_game->init_pos ? opt_game->init_pos [(board_heit -1 - y) * board_wid + x] : 0; } // Will be called on both ui and engine void reset_game_params () { if (game_free) game_free (); game_levels = NULL; game_htab = NULL; game_eval = NULL; game_eval_incr = NULL; game_use_incr_eval = NULL; game_eval_white = NULL; game_eval_black = NULL; game_search = NULL; game_movegen = NULL; game_event_handler = NULL; game_getmove = NULL; game_getmove_kb = NULL; game_who_won = NULL; game_get_pixmap = NULL; game_get_rgbmap = NULL; game_set_init_pos = game_set_init_pos_def; game_set_init_render = NULL; game_get_render = NULL; game_animate = NULL; game_free = NULL; game_scorecmp = NULL; game_stateful = FALSE; game_animation_use_movstack = TRUE; game_allow_back_forw = TRUE; game_single_player = FALSE; game_allow_undo = FALSE; game_doc_about_status = STATUS_NONE; game_doc_about = NULL; game_doc_rules = NULL; game_doc_strategy = NULL; game_doc_history = NULL; game_white_string = "White"; game_black_string = "Black"; //state_player = WHITE; // TODO: replace state_player by cur_pos.player globally cur_pos.player = WHITE; game_state_size = 0; game_newstate = NULL; game_reset_uistate = NULL; game_highlight_colors = game_highlight_colors_def; game_draw_cell_boundaries = FALSE; game_start_immediately = FALSE; game_allow_flip = FALSE; game_file_label = FILERANK_LABEL_TYPE_NONE; game_rank_label = FILERANK_LABEL_TYPE_NONE; game_score_fields = prefs_score_fields_def; game_score_field_names = prefs_score_field_names_def; game_bg_pixmap = NULL; if (cur_pos.board) free (cur_pos.board); if (cur_pos.render) free (cur_pos.render); cur_pos.game = NULL; cur_pos.board = NULL; cur_pos.render = NULL; cur_pos.state = NULL; cur_pos.ui_state = NULL; cur_pos.num_moves = 0; cur_pos.search_depth = 0; } void ui_terminate_game () { // FIXME: are we sure -1 is an invalid value? if (animate_tag >= 0) { gtk_timeout_remove (animate_tag); animate_tag = -1; } if (game_single_player) prefs_save_scores (menu_get_game_name_with_level()); board_free (); reset_game_params (); if (opt_infile) { fclose (opt_infile); opt_infile = NULL; } if (game_reset_uistate) game_reset_uistate(); sb_reset_human_time (); sb_update(); ui_stopped = TRUE; ui_cheated = FALSE; } void ui_start_game () { cur_pos.game = opt_game; if (opt_game->game_init) opt_game->game_init(opt_game); if (game_single_player) { ui_white = HUMAN; ui_black = HUMAN; } else if (opt_infile) { ui_white = NONE; ui_black = NONE; } else { ui_white = HUMAN; ui_black = MACHINE; } set_game_params (); board_set_game_params (); // FIXME: this is ugly if (game_animate) // FIXME: shouldn't this be done somewhere else? animate_tag = gtk_timeout_add (game_animation_time, ui_animate_cb, NULL); board_init (); board_redraw_all (); menu_put_player (FALSE); menu_set_eval_function (); if (game_single_player) prefs_load_scores (menu_get_game_name_with_level()); ui_check_who_won(); if (game_single_player && game_start_immediately) ui_stopped = FALSE; if (state_gui_active) { gchar *tempstr = g_strdup_printf ("%s - gtkboard", menu_get_game_name()); gtk_window_set_title (GTK_WINDOW (main_window), tempstr); g_free (tempstr); } } //! game specific initialization // FIXME: fork this into 2 functions for client and server void set_game_params () { Game *game = opt_game; if (!game) return; board_wid = game->board_wid; board_heit = game->board_heit; cur_pos.board = (byte *) malloc (board_wid * board_heit); assert (cur_pos.board); if (!engine_flag) { cur_pos.render = (int *) malloc (sizeof (int) * board_wid * board_heit); memset (cur_pos.render, 0, sizeof (int) * board_wid * board_heit); assert (cur_pos.render); } if (engine_flag) // server always executes this game_set_init_pos (&cur_pos); else { if (game_set_init_pos == game_set_init_pos_def) // client executes only if it is the default game_set_init_pos (&cur_pos); if (game_set_init_render) game_set_init_render (&cur_pos); } if (!engine_flag) if (move_fout) { fprintf (move_fout, "NEW_GAME %s\n", game->name); fflush (move_fout); // read the initial position if (game_set_init_pos != game_set_init_pos_def) fread (cur_pos.board, board_wid * board_heit, 1, move_fin); fprintf (move_fout, "MSEC_PER_MOVE %d\n", opt_delay); fflush (move_fout); } } void ui_check_who_won() { char *line, *who_str = NULL; int who, len; if (!move_fout) return; fprintf (move_fout, "WHO_WON \n"); fflush (move_fout); line = line_read(move_fin); if (g_strncasecmp(line, "ACK", 3)) { // NAK ==> not implemented ui_gameover = FALSE; sb_set_score (""); return; } line += 4; line = g_strstrip(line); who_str = line; while(!isspace(*line) && *line) line++; while(isspace(*line)) line++; sb_set_score (line); if (!g_strncasecmp(who_str, "NYET", 4)) { ui_gameover = FALSE; return; } ui_stopped = TRUE; ui_gameover = TRUE; if (opt_logfile) fprintf(opt_logfile, "RESULT: %s\n", who_str); if (!state_gui_active) ui_cleanup(); sb_update (); if (game_single_player && !ui_cheated && !g_strncasecmp(who_str, "WON", 3)) { gboolean retval; retval = prefs_add_highscore (line, sb_get_human_time ()); if (retval) sound_play (SOUND_HIGHSCORE); else sound_play (SOUND_WON); if (game_levels) { GameLevel *next_level = game_levels; while (next_level->name) { if (next_level->game == opt_game) break; next_level++; } next_level++; if (next_level->name) menu_put_level (next_level->name); } } if (game_single_player && !ui_cheated && !g_strncasecmp(who_str, "LOST", 4)) sound_play (SOUND_LOST); } void ui_send_make_move () { if (ui_stopped) return; if (player_to_play == HUMAN) return; if (move_fout && player_to_play == MACHINE) { fprintf (move_fout, "MAKE_MOVE \n"); fflush (move_fout); } if (opt_infile) g_timeout_add (opt_delay, ui_get_machine_move, NULL); else g_io_add_watch (ui_in, G_IO_IN, (GIOFunc) ui_get_machine_move, NULL); } gboolean ui_send_make_move_bg (gpointer data) { ui_send_make_move (); return FALSE; } void ui_make_human_move (byte *move, int *rmove) { board_apply_refresh (move, rmove); if (!move) return; if (move_fout) { fprintf (move_fout, "TAKE_MOVE "); move_fwrite (move, move_fout); if (opt_logfile) move_fwrite (move, opt_logfile); } if (!game_single_player) { cur_pos.player = (cur_pos.player == WHITE ? BLACK : WHITE); } cur_pos.num_moves ++; ui_check_who_won (); sb_update (); ui_send_make_move (); } int ui_get_machine_move () { byte *move; if (player_to_play == HUMAN || ui_stopped) return FALSE; if (!opt_infile) { move = move_fread_ack (move_fin); if (!move) { sb_error ("Couldn't make move\n", TRUE); ui_stopped = TRUE; sb_update (); return FALSE; } if (opt_logfile) move_fwrite (move, opt_logfile); } else // file mode { //TODO: should communicate the move to the engine move = move_fread (opt_infile); if (opt_logfile) move_fwrite (move, opt_logfile); } board_apply_refresh (move, NULL); if (!game_single_player) cur_pos.player = (cur_pos.player == WHITE ? BLACK : WHITE); cur_pos.num_moves ++; sound_play (SOUND_MACHINE_MOVE); ui_check_who_won (); sb_update (); ui_send_make_move (); return FALSE; } int ui_move_now_cb () { if (player_to_play == HUMAN || ui_stopped) return FALSE; g_assert (engine_pid >= 0); fprintf (move_fout, "MOVE_NOW \n"); fflush (move_fout); ui_get_machine_move (); return FALSE; } void ui_cancel_move () { if (player_to_play != MACHINE) return; if (!opt_infile) { g_assert (engine_pid >= 0); fprintf (move_fout, "CANCEL_MOVE \n"); fflush (move_fout); } } void ui_start_player () { int fd[2][2], ret, i; for (i=0; i<2; i++) { ret = pipe (fd[i]); assert (!ret); } /* fork a child to do the crunching */ if (!(engine_pid = fork ())) { engine_main (fd[0][0], fd[1][1]); exit (0); } if (opt_verbose) printf ("forked engine pid = %d\n", engine_pid); move_fin = fdopen (fd[1][0], "r"); move_fout = fdopen (fd[0][1], "w"); ui_in = g_io_channel_unix_new (fd[1][0]); } gboolean impl_check () { /* check if reqd functions have been implemented */ if (!opt_infile) { if (!game_single_player) if ((ui_white == MACHINE || ui_black == MACHINE) && (!game_movegen || !game_eval) && !game_search) return FALSE; if ((ui_white == HUMAN || ui_black == HUMAN) && !game_getmove && !game_getmove_kb && !game_event_handler) return FALSE; } return TRUE; } static void parse_opts (int argc, char **argv) { char *wheur = NULL, *bheur = NULL; int c, i; while ((c = getopt (argc, argv, "g:G:d:f:l:p:w:b:Hqvh")) != -1) { switch (c) { case 'g': { int found = 0; for (i=0; iname)) { opt_game = games[i]; // if (opt_game->game_init) // opt_game->game_init(opt_game); found = 1; } if (!found) { fprintf (stderr, "%s: no such game\n", optarg); exit(1); } } break; case 'G': { void *handle; char *error; Game **game; GModule *module; module = g_module_open (optarg, G_MODULE_BIND_LAZY); if (!module) { fprintf (stderr, "Failed to load plugin from file \"%s\": %s\nTry specifying an absolute file name\n", optarg, g_module_error ()); exit (1); } if (!g_module_symbol (module, "plugin_game", (gpointer *) &game)) { fprintf (stderr, "Failed to load plugin from file \"%s\": %s\n", optarg, g_module_error ()); exit(1); } printf ("Successfully loaded game %s\n", (*game)->name); opt_game = *game; // if (opt_game->game_init) // opt_game->game_init(opt_game); } break; /* FIXME : make these long options */ case 'w': wheur = optarg; break; case 'b': bheur = optarg; break; case 'p': switch (optarg[0]) { case 'h': opt_white = HUMAN; break; case 'm': opt_white = MACHINE; break; default: printf ("player must be h(human) or m(machine)\n"); exit (1); } switch (optarg[1]) { case 'h': opt_black = HUMAN; break; case 'm': opt_black = MACHINE; break; default: printf ("player must be h(human) or m(machine)\n"); exit (1); } break; case 'f': if (opt_white != NONE || opt_black != NONE) { printf ("can't specify -f with -p\n"); exit (1); } opt_infile = fopen (optarg, "r"); if (!opt_infile) { fprintf (stderr, "can't open %s for reading\n", optarg); exit (1); } break; case 'l': opt_logfile = fopen (optarg, "a"); if (!opt_logfile) { fprintf (stderr, "can't open %s for writing\n", optarg); exit (1); } break; case 'd': opt_delay = atoi (optarg); if (opt_delay <= 0) opt_delay = 3000; break; case 'H': opt_html_help = TRUE; break; case 'q': opt_quiet = 1; break; case 'v': opt_verbose = 1; break; case 'h': printf ("Usage: gtkboard \t[-qvh] " "[-g game] [-G file] [-f file] [-l logfile] [-d msec]\n" "\t\t\t[-p XX] [-w wheur -b bheur] " "\n" "\t-g\tname of the game\n" "\t-G\tplugin file to load game from\n" "\t-f\tfile to load game from\n" "\t-l\tlog file to record game\n" "\t-q\tdon't show board\n" "\t-d\tdelay in milliseconds\n" "\t-p\thuman or machine players. Each X must be 'h' or 'm'\n" "\t-w\tname of heuristic function for white\n" "\t-b\tname of heuristic function for black\n" "\t-v\tbe verbose\n" "\t-h\tprint this help\n" ); exit (0); default: exit (1); } } /* check sanity */ if ((wheur && !bheur) || (bheur && !wheur)) { fprintf (stderr, "specify heuristic for both players or neither\n"); exit(1); } if (opt_infile && (opt_white != NONE || opt_black != NONE)) { fprintf (stderr, "can't specify -f with -p\n"); exit (1); } if (opt_quiet && (opt_white == HUMAN || opt_black == HUMAN)) { fprintf (stderr, "can't be quiet with human players\n"); exit (1); } if (game_single_player && (opt_infile)) { fprintf (stderr, "can't load from file for single player game\n"); exit (1); } if (opt_quiet && (opt_white != MACHINE || opt_black != MACHINE)) { fprintf (stderr, "both white and black have to be machine for quiet mode.\n"); exit (1); } if (opt_quiet && !opt_game) { fprintf (stderr, "game must be specified for quiet mode.\n"); exit (1); } if (opt_quiet && !opt_logfile) { fprintf (stderr, "warning: no logfile specified in quiet mode.\n"); } if (wheur && bheur) { int i = 0; if (!opt_game) { fprintf (stderr, "heur fn specified but no game specified\n"); exit (1); } if (!game_htab) { fprintf (stderr, "no support for changing eval fn. in %s\n", opt_game->name); exit(1); } for (i=0; game_htab[i].name; i++) { if (!strcasecmp(wheur, game_htab[i].name)) game_eval_white = game_htab[i].eval_fun; if (!strcasecmp(bheur, game_htab[i].name)) game_eval_black = game_htab[i].eval_fun; } if (!game_eval_white) { fprintf (stderr, "%s: no such eval fn. in %s\n", wheur, opt_game->name); exit(1); } if (!game_eval_black) { fprintf (stderr, "%s: no such eval fn. in %s\n", bheur, opt_game->name); exit(1); } // FIXME: engine should parse opts separately game_eval = engine_eval; } /* if (game_single_player) { opt_white = HUMAN; opt_black = HUMAN; } */ else if (!opt_infile) { // default is human vs. machine if (opt_white == NONE) opt_white = HUMAN; if (opt_black == NONE) opt_black = MACHINE; } ui_white = opt_white; ui_black = opt_black; if (opt_html_help) { html_help_gen (); exit (0); } } void gui_init () { GtkWidget *hbox = NULL, *vbox = NULL, *vbox1 = NULL, *frame = NULL; GtkWidget *separator; GtkAccelGroup *ag; GtkItemFactoryEntry game_items [num_games+1]; GtkItemFactoryEntry items[] = { #if GTK_MAJOR_VERSION == 1 /* { "/_File", NULL, NULL, 0, "" }, { "/File/_Load game", "L", menu_load_file_dialog, 0, "" }, { "/File/_Save game", NULL, NULL, 0, "" }, { "/File/_Quit", "Q", (GtkSignalFunc) ui_cleanup, 0, "" }, */ { "/_Game", NULL, NULL, 0, "" }, { "/Game/Select _Game", NULL, NULL, 0, "" }, { "/Game/_Levels", NULL, NULL, 0, ""}, { "/Game/Sep1", NULL, NULL, 0, "" }, { "/Game/_New", "N", menu_start_stop_game, MENU_RESET_GAME, "" }, { "/Game/_Start", "G", menu_start_stop_game, MENU_START_GAME, "" }, { "/Game/_Pause", "P", menu_start_stop_game, MENU_STOP_GAME, "" }, { "/Game/Sep2", NULL, NULL, 0, "" }, { "/Game/_Highscores", NULL, prefs_show_scores, 0, ""}, { "/Game/_Zap Highscores", NULL, prefs_zap_highscores, 0, ""}, { "/Game/Sep3", NULL, NULL, 0, "" }, { "/Game/_Quit", "Q", (GtkSignalFunc) ui_cleanup, 0, "" }, { "/_Move", NULL, NULL, 0, "" }, { "/Move/_Back", "B", menu_back_forw, MENU_BACK, "" }, { "/Move/_Forward", "F", menu_back_forw, MENU_FORW, "" }, { "/Move/Sep1", NULL, NULL, 0, "" }, { "/Move/_Move Now", "M", (GtkItemFactoryCallback) ui_move_now_cb, 0, "" }, #else /* { "/_File", NULL, NULL, 0, "" }, { "/File/_Load game", "L", menu_load_file_dialog, 0, "", GTK_STOCK_OPEN }, { "/File/_Save game", NULL, menu_save_file_dialog, 0, "", GTK_STOCK_SAVE }, { "/File/_Quit", "Q", (GtkSignalFunc) ui_cleanup, 0, "", GTK_STOCK_QUIT }, */ { "/_Game", NULL, NULL, 0, "" }, { "/Game/Select _Game", NULL, NULL, 0, "" }, { "/Game/Levels", NULL, NULL, 0, ""}, { "/Game/Sep1", NULL, NULL, 0, "" }, { "/Game/_New", "N", menu_start_stop_game, MENU_RESET_GAME, "", GTK_STOCK_NEW }, { "/Game/_Start", "G", menu_start_stop_game, MENU_START_GAME, "", GTK_STOCK_YES }, { "/Game/_Pause", "P", menu_start_stop_game, MENU_STOP_GAME, "", GTK_STOCK_STOP }, { "/Game/Sep2", NULL, NULL, 0, "" }, //FIXME: there's a scores stock item but I can't seem to find it { "/Game/_Highscores", NULL, prefs_show_scores, 0, ""}, { "/Game/_Zap Highscores", NULL, prefs_zap_highscores, 0, ""}, { "/Game/Sep3", NULL, NULL, 0, "" }, { "/Game/_Quit", "Q", (GtkSignalFunc) ui_cleanup, 0, "", GTK_STOCK_QUIT }, { "/_Move", NULL, NULL, 0, "" }, { "/Move/_Back", "B", menu_back_forw, 1, "", GTK_STOCK_GO_BACK }, { "/Move/_Forward", "F", menu_back_forw, 2, "", GTK_STOCK_GO_FORWARD }, { "/Move/Sep1", NULL, NULL, 0, "" }, { "/Move/_Move Now", "M", (GtkItemFactoryCallback) ui_move_now_cb, 0, "" }, #endif { "/_Settings", NULL, NULL, 0, "" }, { "/Settings/_Player", NULL, NULL, 0, "" }, { "/Settings/Player/File", NULL, NULL, 0, "" }, { "/Settings/Player/Human-Human", NULL, menu_set_player, 1, "/Settings/Player/File" }, { "/Settings/Player/Human-Machine", NULL, menu_set_player, 2, "/Settings/Player/File" }, { "/Settings/Player/Machine-Human", NULL, menu_set_player, 3, "/Settings/Player/File" }, { "/Settings/Player/Machine-Machine", NULL, menu_set_player, 4, "/Settings/Player/File" }, // { "/Settings/_Eval function", NULL, NULL, 0, "" }, // { "/Settings/_Eval function/_White", NULL, NULL, 0, "" }, // { "/Settings/_Eval function/_Black", NULL, NULL, 0, "" }, { "/Settings/_Flip Board", "T", menu_board_flip_cb, 0, "" }, { "/Settings/_Enable Sound", NULL, menu_enable_sound_cb, 1, ""}, { "/Settings/_Disable Sound", NULL, menu_enable_sound_cb, 0, ""}, { "/Settings/_Time per move", NULL, NULL, 0, "" }, { "/Settings/_Time per move/Default", NULL, menu_set_delay_cb, DEF_TIME_PER_MOVE, "" }, { "/Settings/_Time per move/100 milliseconds", NULL, menu_set_delay_cb, 100, "/Settings/Time per move/Default" }, { "/Settings/Time per move/200 milliseconds", NULL, menu_set_delay_cb, 200, "/Settings/Time per move/Default" }, { "/Settings/Time per move/500 milliseconds", NULL, menu_set_delay_cb, 500, "/Settings/Time per move/Default" }, { "/Settings/Time per move/1 second", NULL, menu_set_delay_cb, 1000, "/Settings/Time per move/Default" }, { "/Settings/Time per move/2 seconds", NULL, menu_set_delay_cb, 2000, "/Settings/Time per move/Default" }, { "/Settings/Time per move/5 seconds", NULL, menu_set_delay_cb, 5000, "/Settings/Time per move/Default" }, { "/Settings/Time per move/10 seconds", NULL, menu_set_delay_cb, 10000, "/Settings/Time per move/Default" }, { "/Settings/Time per move/30 seconds", NULL, menu_set_delay_cb, 30000, "/Settings/Time per move/Default" }, { "/Settings/Time per move/1 minute", NULL, menu_set_delay_cb, 600000, "/Settings/Time per move/Default" }, { "/_Help", NULL, NULL, 0, "" }, { "/Help/_About", NULL, menu_show_about_dialog, 0, ""}, #ifdef HAVE_GNOME { "/Help/_Home Page", NULL, menu_help_home_page, 0, "", GTK_STOCK_HOME}, #endif // TODO: implement context help // { "/Help/_Context help", NULL, ui_set_context_help, 0, ""}, }; int i; gdk_rgb_init (); main_window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_policy (GTK_WINDOW (main_window), FALSE, FALSE, TRUE); gtk_signal_connect (GTK_OBJECT (main_window), "delete_event", GTK_SIGNAL_FUNC(ui_cleanup), NULL); gtk_window_set_title (GTK_WINDOW (main_window), "Gtkboard"); ag = gtk_accel_group_new(); menu_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "
", ag); gtk_window_add_accel_group (GTK_WINDOW (main_window), ag); gtk_item_factory_create_items (menu_factory, sizeof (items) / sizeof (items[0]), items, NULL); for (i=0; i<=num_games; i++) { if (i==0) game_items[i].path = "/Game/Select Game/none"; else { if (games[i-1]->group) { GtkItemFactoryEntry group_item = {NULL, NULL, NULL, 0, ""}; group_item.path = g_strdup_printf ("/Game/Select Game/%s", games[i-1]->group); // FIXME: this is O(N^2) where N is the number of games if (gtk_item_factory_get_widget (menu_factory, group_item.path) == NULL) gtk_item_factory_create_item (menu_factory, &group_item, NULL, 1); game_items[i].path = g_strdup_printf ("/Game/Select Game/%s/%s", games[i-1]->group ? games[i-1]->group : "", games[i-1]->name); } else game_items[i].path = g_strdup_printf ("/Game/Select Game/%s", games[i-1]->name); } game_items[i].accelerator = NULL; game_items[i].callback = menu_set_game; game_items[i].callback_action = i-1; game_items[i].item_type = (i == 0 ? "": "/Game/Select Game/none"); } gtk_item_factory_create_items (menu_factory, num_games+1, game_items, NULL); // ugly hack to create a group of radio button with no button selected by default gtk_item_factory_delete_item (menu_factory, "/Game/Select Game/none"); menu_main = gtk_item_factory_get_widget (menu_factory, "
"); gtk_widget_set_state (gtk_item_factory_get_widget (menu_factory, "/Settings/Player/File"), GTK_STATE_INSENSITIVE); for (i=1; i<=NUM_RECENT_GAMES; i++) { gchar *tmp; gchar *gamename; gamename = prefs_get_config_val (tmp = g_strdup_printf ("recent_game_%d", i)); g_free (tmp); if (gamename && gamename[0] != '\0') menu_insert_game_item (gamename, i); } menu_set_eval_function (); vbox = gtk_vbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX(vbox), menu_main, FALSE, FALSE, 0); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_NONE); { GtkWidget *innerframe; board_colbox = gtk_vbox_new (FALSE, 0); board_area = gtk_drawing_area_new (); hbox = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (hbox), board_colbox, FALSE, FALSE, 0); vbox1 = gtk_vbox_new (FALSE, 0); board_rowbox = gtk_hbox_new (FALSE, 0); innerframe = gtk_frame_new (NULL); gtk_frame_set_shadow_type (GTK_FRAME (innerframe), GTK_SHADOW_IN); gtk_container_add (GTK_CONTAINER (vbox1), innerframe); gtk_container_add (GTK_CONTAINER (innerframe), board_area); gtk_container_add (GTK_CONTAINER (vbox1), board_rowbox); gtk_box_pack_start (GTK_BOX (hbox), vbox1, TRUE, FALSE, 0); gtk_container_add (GTK_CONTAINER (frame), hbox); gtk_signal_connect (GTK_OBJECT (board_area), "expose_event", GTK_SIGNAL_FUNC (board_redraw), NULL); gtk_widget_set_events(board_area, gtk_widget_get_events (board_area) | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_LEAVE_NOTIFY_MASK ); gtk_signal_connect (GTK_OBJECT (board_area), "leave_notify_event", GTK_SIGNAL_FUNC (board_signal_handler), NULL); gtk_signal_connect (GTK_OBJECT (board_area), "motion_notify_event", GTK_SIGNAL_FUNC (board_signal_handler), NULL); gtk_signal_connect (GTK_OBJECT (board_area), "button_release_event", GTK_SIGNAL_FUNC (board_signal_handler), NULL); gtk_signal_connect (GTK_OBJECT (board_area), "button_press_event", GTK_SIGNAL_FUNC (board_signal_handler), NULL); gtk_signal_connect (GTK_OBJECT (main_window), "key_press_event", GTK_SIGNAL_FUNC (board_signal_handler), NULL); gtk_signal_connect (GTK_OBJECT (main_window), "key_release_event", GTK_SIGNAL_FUNC (board_signal_handler), NULL); menu_info_bar = hbox = gtk_hbox_new (FALSE, 0); sb_game_label = gtk_label_new (opt_game ? opt_game->name : NULL); gtk_box_pack_start (GTK_BOX (hbox), sb_game_label, FALSE, FALSE, 3); sb_game_separator = gtk_vseparator_new (); gtk_box_pack_start (GTK_BOX (hbox), sb_game_separator, FALSE, FALSE, 0); sb_player_label = gtk_label_new (NULL); gtk_box_pack_start (GTK_BOX (hbox), sb_player_label, FALSE, FALSE, 3); sb_player_separator = gtk_vseparator_new (); gtk_box_pack_start (GTK_BOX (hbox), sb_player_separator, FALSE, FALSE, 0); sb_who_label = gtk_label_new (NULL); gtk_box_pack_start (GTK_BOX (hbox), sb_who_label, FALSE, FALSE, 3); sb_who_separator = gtk_vseparator_new (); gtk_box_pack_start (GTK_BOX (hbox), sb_who_separator, FALSE, FALSE, 0); sb_score_label = gtk_label_new (NULL); gtk_box_pack_start (GTK_BOX (hbox), sb_score_label, FALSE, FALSE, 3); sb_score_separator = gtk_vseparator_new (); gtk_box_pack_start (GTK_BOX (hbox), sb_score_separator, FALSE, FALSE, 0); #if GTK_MAJOR_VERSION == 2 sb_turn_image = gtk_image_new_from_stock (GTK_STOCK_YES, GTK_ICON_SIZE_MENU); gtk_box_pack_end (GTK_BOX (hbox), sb_turn_image, FALSE, FALSE, 0); sb_turn_separator = gtk_vseparator_new (); gtk_box_pack_end (GTK_BOX (hbox), sb_turn_separator, FALSE, FALSE, 0); #endif sb_time_label = gtk_label_new (NULL); gtk_box_pack_end (GTK_BOX (hbox), sb_time_label, FALSE, FALSE, 0); sb_time_separator = gtk_vseparator_new (); gtk_box_pack_end (GTK_BOX (hbox), sb_time_separator, FALSE, FALSE, 0); } menu_info_separator = separator = gtk_hseparator_new (); gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); separator = gtk_hseparator_new (); gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, FALSE, 0); menu_warning_bar = gtk_label_new ("Warning: this game has not yet been completely implemented."); gtk_box_pack_start (GTK_BOX (vbox), menu_warning_bar, FALSE, FALSE, 0); sb_warning_separator = separator = gtk_hseparator_new (); gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); separator = gtk_hseparator_new (); gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, FALSE, 0); sb_message_label = gtk_label_new (NULL); gtk_misc_set_alignment (GTK_MISC (sb_message_label), 0, 0.5); hbox = gtk_hbox_new (TRUE, 0); gtk_box_pack_start (GTK_BOX (hbox), sb_message_label, TRUE, TRUE, 3); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); gtk_container_add (GTK_CONTAINER (main_window), vbox); // FIXME: board_init() needs show() to be called to get a gc, but // leads to the whole window not popping up at once gtk_widget_show_all (main_window); if (!opt_game) board_init (); gtk_timeout_add (100, sb_update_periodic, NULL); // this should be called before setting state_gui_active = TRUE if (opt_game) menu_put_game (); state_gui_active = TRUE; if (opt_game) menu_start_game (); menu_put_player (TRUE); // if (!opt_game) sb_message ("Select a game from the Game menu", FALSE); sb_update (); } void html_help_gen_format (FILE *fout, gchar *outfile, gchar *title, gchar *string) { gchar *tmpfilename = "tmp"; FILE *ftmp = fopen (tmpfilename, "w"); gchar *command; if (!string) return; if (!ftmp) { fprintf (stderr, "couldn't open %s for writing", tmpfilename); perror (NULL); exit(1); } fprintf (ftmp, string); fclose (ftmp); fprintf (fout, "

%s

\n\n
", title);
	fflush (fout);
	command = g_strdup_printf ("lynx -dump -dont_wrap_pre \"%s\" | fmt -s >> \"%s\"", tmpfilename, outfile);
	if (system (command) < 0)
	{
		fprintf (stderr, "failed to execute command %s: ", command);
		perror (NULL);
		exit (1);
	}
	fseek (fout, 0, SEEK_END);
	fprintf (fout, "\n
\n"); g_free (command); } void html_help_gen_game (Game *game) { FILE *fout; gchar *filename; mkdir (filename = g_strdup_printf ("%s", game->name), 0777); g_free (filename); filename = g_strdup_printf ("%s/index.html", game->name); fout = fopen (filename, "w"); if (!fout) { fprintf (stderr, "couldn't open %s for writing: ", filename); perror (NULL); g_free (filename); return; } reset_game_params (); opt_game = game; game->game_init(game); fprintf (fout, "\n" " \n \n" " \n" "%s - gtkboard \n" " \n" "\n" "\n" "\n", game->name); fprintf (fout, "

%s

\n\n", game->name); fprintf (fout, " \n \n \n \n \n" " \n\n
\n"); fprintf (fout, "%s
\n", game_single_player ? "Single player game" : "Two player game"); html_help_gen_format (fout, filename, "Rules", game_doc_rules); html_help_gen_format (fout, filename, "Strategy", game_doc_strategy); html_help_gen_format (fout, filename, "History", game_doc_history); fprintf (fout, "

Screenshot

\n

" "\"%s

\n", game->name, game->name); fprintf (fout, "
\n \n" "
" "
\n\n" " \n"); g_free (filename); fclose (fout); } void html_help_gen_gamelist () { int i; static GSList *group_list = NULL; gchar *group; FILE *fout; fout = fopen ("gamelist.html", "w"); if (!fout) { fprintf (stderr, "couldn't open gamelist.html for writing: "); perror (NULL); exit (1); } for (i=0; igroup) games[i]->group = ""; if (!g_slist_find (group_list, games[i]->group)) group_list = g_slist_append (group_list, games[i]->group); } fprintf (fout, "

Games

\n\n
\n\n"); fclose (fout); } void html_help_gen () { int i; char dirbuf[1024]; getcwd (dirbuf, 1024); if (strcmp (basename (dirbuf), "games")) { fprintf (stderr, "To generate html help, you must be in the \"games\" directory.\n"); exit (1); } if (opt_game) { html_help_gen_game (opt_game); return; } html_help_gen_gamelist (); for (i=0; i 1 loop = g_main_loop_new (NULL, TRUE); #else loop = g_main_new (TRUE); #endif g_main_run (loop); } return 0; } gtkboard/src/ui.h000066400000000000000000000036601153150217100142310ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ #ifndef _GTKBOARD_H_ #define _GTKBOARD_H_ #include #include #include #include "game.h" // FIXME: confusing name. Make this 2 macros: human_to_move and machine_to_move #define player_to_play (cur_pos.player == WHITE ? ui_white : ui_black) enum {NONE, HUMAN, MACHINE}; extern Game *games[]; extern Pos cur_pos; extern const int num_games; extern FILE *move_fin, *move_fout; extern int state_player; extern gboolean engine_flag; extern gboolean ui_stopped; extern gboolean ui_cheated; extern gboolean ui_gameover; extern gboolean state_gui_active; extern gboolean game_file_label, game_rank_label; extern Game *opt_game; extern FILE *opt_infile; extern int opt_delay; extern int opt_quiet; extern int ui_white; extern int ui_black; extern int opt_white; extern int opt_black; extern int opt_verbose; gboolean impl_check (); void ui_send_make_move (); void set_game_params (); void reset_game_params (); void ui_terminate_game (); void ui_start_game (); void start_game_num (int); void ui_check_who_won (); void ui_cancel_move (); void game_set_init_pos_def (Pos *); #endif gtkboard/src/ui_common.h000066400000000000000000000027111153150217100155750ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ #ifndef _UI_COMMON_H_ #define _UI_COMMON_H_ /** \file ui_common.h \brief function declarations common to all ui modules */ #include "config.h" #include #include #include //! The main application window extern GtkWidget *main_window; //! Show a message to the user void sb_message (char *msg, gboolean serious); //! Inform user of an error void sb_error (char *msg, gboolean serious); //! Converts a time in milliseconds into human-parsable format gchar *sb_ftime(int temps); //! Shows a dialog with given title and message void menu_show_dialog (gchar *title, gchar *message); #endif gtkboard/src/wordtris.c000066400000000000000000000650231153150217100154650ustar00rootroot00000000000000/* This file is a part of gtkboard, a board games system. Copyright (C) 2003, Arvind Narayanan 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 USA */ #include #include #include #include #include #include #include "game.h" #include "../pixmaps/alpha.xpm" #include "flwords.h" #define WORDTRIS_CELL_SIZE 36 #define WORDTRIS_NUM_PIECES 27 #define WORDTRIS_BOARD_WID 4 #define WORDTRIS_BOARD_HEIT 14 #define WORDTRIS_LEN 4 #define WORDTRIS_EMPTY 0 #define WORDTRIS_WILDCARD 27 char wordtris_colors[9] = {0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0, 0, 0xff}; char wordtris_highlight_colors[9] = {0x0, 0x0, 0xff, 0, 0, 0, 0, 0, 0}; static char *smiley_xpm[] = { "36 36 2 1", " c none", ". c #ffff77", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ... ... ", " ..... ..... ", " ... ... ", " ", " ", " .. ", " .. ", " .. ", " .. ", " .. ", " .. ", " .. ", " ", " ", " .. .. ", " .. .. ", " ... ... ", " .... .... ", " .......... ", " ...... ", " .. ", " ", " ", " ", " ", " ", " ", }; static char **wordtris_pixmaps [] = { char_A_grey_36_36_xpm, char_B_grey_36_36_xpm, char_C_grey_36_36_xpm, char_D_grey_36_36_xpm, char_E_grey_36_36_xpm, char_F_grey_36_36_xpm, char_G_grey_36_36_xpm, char_H_grey_36_36_xpm, char_I_grey_36_36_xpm, char_J_grey_36_36_xpm, char_K_grey_36_36_xpm, char_L_grey_36_36_xpm, char_M_grey_36_36_xpm, char_N_grey_36_36_xpm, char_O_grey_36_36_xpm, char_P_grey_36_36_xpm, char_Q_grey_36_36_xpm, char_R_grey_36_36_xpm, char_S_grey_36_36_xpm, char_T_grey_36_36_xpm, char_U_grey_36_36_xpm, char_V_grey_36_36_xpm, char_W_grey_36_36_xpm, char_X_grey_36_36_xpm, char_Y_grey_36_36_xpm, char_Z_grey_36_36_xpm, smiley_xpm, }; // TODO: change this so that we only need to specify pixmaps for individual squares static const int lava_xpm_header_size = 253+1; static char * lava_xpm_header[] = { "144 504 253 2", " c #d7d7d7", ". c #FFD800", "+ c #FFAC00", "@ c #FFA800", "# c #FF8000", "$ c #FF0600", "% c #830000", "& c #310000", "* c #150000", "= c #1F0000", "- c #2D0000", "; c #270000", "> c #210000", ", c #1B0000", "' c #230000", ") c #1D0000", "! c #0B0000", "~ c #010000", "{ c #090000", "] c #2F0000", "^ c #3B0000", "/ c #630000", "( c #8B0000", "_ c #930000", ": c #8D0000", "< c #CF0000", "[ c #FF6600", "} c #FF9E00", "| c #FF4C00", "1 c #FF7A00", "2 c #FF8E00", "3 c #FF7600", "4 c #FF5800", "5 c #FF6200", "6 c #FFB600", "7 c #FFDA00", "8 c #FF8C00", "9 c #FF9400", "0 c #FFCE00", "a c #FFD200", "b c #FF9A00", "c c #FF7800", "d c #FFF000", "e c #FFDE00", "f c #FFAE00", "g c #FF8400", "h c #FF7000", "i c #FF8200", "j c #FFA400", "k c #FFB000", "l c #FFA000", "m c #FF9800", "n c #FFAA00", "o c #FFEA00", "p c #FFD400", "q c #FF7400", "r c #FF6E00", "s c #FFCC00", "t c #FFBC00", "u c #FF7200", "v c #FFC400", "w c #FFEE00", "x c #FFA200", "y c #FF9200", "z c #FFB400", "A c #FFA600", "B c #FF9000", "C c #FF8800", "D c #FFD000", "E c #FF9C00", "F c #FF1000", "G c #D90000", "H c #FF0E00", "I c #FF5000", "J c #FF8600", "K c #FF9600", "L c #FF7E00", "M c #FF6C00", "N c #FF6000", "O c #FF4200", "P c #FF2600", "Q c #FF4400", "R c #FFE600", "S c #FF5C00", "T c #E50000", "U c #B30000", "V c #A90000", "W c #7F0000", "X c #550000", "Y c #5F0000", "Z c #890000", "` c #BF0000", " . c #F30000", ".. c #ED0000", "+. c #AD0000", "@. c #7D0000", "#. c #DD0000", "$. c #FF2E00", "%. c #FF2C00", "&. c #FF1200", "*. c #370000", "=. c #110000", "-. c #070000", ";. c #0F0000", ">. c #130000", ",. c #190000", "'. c #170000", "). c #450000", "!. c #4D0000", "~. c #510000", "{. c #570000", "]. c #9F0000", "^. c #FF3200", "/. c #FF4800", "(. c #D70000", "_. c #AF0000", ":. c #E90000", "<. c #BD0000", "[. c #A30000", "}. c #FF8A00", "|. c #FF5200", "1. c #E30000", "2. c #9D0000", "3. c #FF3000", "4. c #FF0200", "5. c #FFD600", "6. c #910000", "7. c #C10000", "8. c #FF1E00", "9. c #FF3C00", "0. c #FF1800", "a. c #FF0800", "b. c #F10000", "c. c #E70000", "d. c #FF1400", "e. c #F50000", "f. c #970000", "g. c #FF4E00", "h. c #FF2A00", "i. c #FF1A00", "j. c #FF0400", "k. c #F70000", "l. c #F90000", "m. c #EF0000", "n. c #FF4000", "o. c #FF2800", "p. c #FF2200", "q. c #DB0000", "r. c #A50000", "s. c #D10000", "t. c #C50000", "u. c #670000", "v. c #6F0000", "w. c #9B0000", "x. c #AB0000", "y. c #DF0000", "z. c #8F0000", "A. c #A70000", "B. c #C90000", "C. c #FFB800", "D. c #FFE000", "E. c #FF0C00", "F. c #6D0000", "G. c #290000", "H. c #410000", "I. c #750000", "J. c #EB0000", "K. c #D50000", "L. c #5B0000", "M. c #000000", "N. c #050000", "O. c #390000", "P. c #770000", "Q. c #C30000", "R. c #B70000", "S. c #B50000", "T. c #FFB200", "U. c #A10000", "V. c #FFBA00", "W. c #FF5400", "X. c #FF0000", "Y. c #CB0000", "Z. c #870000", "`. c #D30000", " + c #4B0000", ".+ c #250000", "++ c #FF6A00", "@+ c #FFC000", "#+ c #CD0000", "$+ c #FF3600", "%+ c #FF3400", "&+ c #2B0000", "*+ c #3F0000", "=+ c #730000", "-+ c #590000", ";+ c #850000", ">+ c #790000", ",+ c #3D0000", "'+ c #B90000", ")+ c #330000", "!+ c #030000", "~+ c #430000", "{+ c #690000", "]+ c #FFBE00", "^+ c #FFCA00", "/+ c #FD0000", "(+ c #FF3A00", "_+ c #BB0000", ":+ c #490000", "<+ c #7B0000", "[+ c #810000", "}+ c #6B0000", "|+ c #650000", "1+ c #E10000", "2+ c #FF5E00", "3+ c #B10000", "4+ c #0D0000", "5+ c #FFC600", "6+ c #710000", "7+ c #FFC800", "8+ c #C70000", "9+ c #470000", "0+ c #FFE400", "a+ c #FF0A00", "b+ c #FF5A00", "c+ c #FFC200", "d+ c #FF5600", "e+ c #FF1600", "f+ c #990000", "g+ c #FF7C00", "h+ c #5D0000", "i+ c #530000", "j+ c #FF2400", "k+ c #FFE200", "l+ c #FF6400", "m+ c #610000", "n+ c #4F0000", "o+ c #950000", "p+ c #FF3E00", "q+ c #FF2000", "r+ c #350000", "s+ c #FB0000", "t+ c #FF6800", "u+ c #FF1C00", "v+ c #FF4A00", "w+ c #FFEC00", "x+ c #FF4600", "y+ c #FF3800", "z+ c #FFDC00", "A+ c #FFE800", "B+ c #FFF600", "C+ c #FFF200", "D+ c #FFF400", }; static char *lava_xpm_data[] = { ". + @ # $ % & * = - - ; > , = ' ) ! ~ { = ] ^ / ( _ : ( < [ } [ | 1 2 3 4 5 6 7 6 8 3 3 9 0 a b c 9 a d e f g h h i j k j l m 8 9 n a o d p 9 q r q 9 s t r u v w o p 6 x x x x } y 9 f z A A z n B # 3 c C n D E F G H I h 1 J y E K L h r M N O P Q f R a @ m S T U V W X Y Z ` ...+.@.W #.8 ", "} $.%.&._ *.=.-.{ ;.>.,.) ,., > , ! ~ -.'.) ) ] ).!.~.{.].^./.(._.:. .<.[.:.}.z |.1.[.2. .B @ 3.< 4.m 5.} %.` _ 6.7.8.9.0.a.b.G c.d.5 A D K e.2.: f...g C d.$.n . 6 C g.h.i.j.k.l.m.k.n.I o.3./.p.q.U ].r.s.%.} 1 t.u.v.Z w.x.7.G ..y.+.z._ w.A.B.4.|.C.D.k 5 n.E.V W Z F.*.G.H.I.B.J.V {.).+.1 ", "i m.J.K.L.=.~ M.M.~ N.>.= = ) = '.-.~ N.=.>.! ;.= - *.O.P.E.3.Q.Z R.< S.+.l.B T.n.x.H.] U.r V.S :.$ 9 C.W.< Y ] - u.(.X.Y.r.6.% Z.w.B.%.l J `. += .+( I g 9.++@+@ |.$.d.4.q.: F.( V #+$.I $.$+%+y.W ).G.& F.T i M V *.; &+& *+{.u.=+/ *.] -+Z +.T 9.# k a s l [ X.].I.;+>+,+'.) H.6.#.'+{.)+w.q ", "C e.c.(./ * !+M.M.M.{ , G.; .+; , { ~ N.=.=.-.{ ) O.~+,+{+m.O d.Y.q.%.5 h J ]+^+C /+v.O.Z.(+6 t y 9 @+x o._+=+!.:+<+< :.S.[+}+{+}+|+P...2 f O _+|+*.>+3.x f v 6 | 1+(.1. .(.>+~+P.q.P g + l A }.o.S.-+' ' L.q.# M V *..+- *+X {+P.>+/ ).F.y.9.5 3 J h 2+9 p 7 2 j.3+_ U.A.P.,+.+&+/ ` t.F.~+r.c ", "b $.8.E.U. +; >.N.N.>.; - ' > G.' 4+!+! >.=.-.{ *.Z.+.V R.X.n.3.1+J.h 5+6 i h C x ++y.6+{+t.Q m 7+7+b 4 4.8+].<+>+r.B.Y._.P. +9+~.!.F.k.C C.A h 8.Q.B.O t 0+v I R.W _+J.H a+'+% < b+@ D s + c+^+j I K.W }+: l.8 r x.O.- !.W r.U _+_+2._ ..N # ++d+%+a.e+[ v D.8 .+.f+]._+R.;+!.& +2.7.[+~._.g+", "@+B L 4 e.].F.~+= '..+& ; * * .+G.'.;.* '.;.N.>.=+i.M h M q 1 Q 8+Y.q 6 W.#+w.s.I 9 n.+.L.h+2.i.} 9 F <.V [.6.W f.8+Q.x.r.Z.i+9+~.X Z i.J 2 l ]+f g+q j . 0+B < +u.k.5 C i Q j+M c+k+k+x 9.W.9 v c+# (+8.p.4 + q +.^ ,+>+_+Y.<._+S.].t.Q u &.+.Z.<+_.9.l D p g m.2.% P.( +.x.W +).% U Z.X A.++", "z 8 l+3.1+U.;+v.!.O.*.] , { ! ' & ; ) ,.>.4+>.*+B.# V.j T.7+c+5 x.V l+L #+*+) !.1.L r `.Y O.X (.i M V ). +/ m+h+6.1+K.f.2.2.F.-+-+L.6.i.g i 1 j l 3 3 } 6 c+u _.:+w.| } b f 6 6 s 7+6 5+i 1+S.b.N V.p 7+t C.v p 3 A.^ n+6.+.% L.i+i+{.A.(+9.w.- >.' o+l+V.K M 3.#+z.I.|+h+=+w.U.6+ +<+U ].>+V %.", "n.X.S.Z u.~.X }+6+{.*.) ! !+{ = & ] = ;.4+; }+8+W.V.b Q N n s h x.x.5 N 6.* ~ , Z p+L q+_+f++.&.9 l+z.> &+:+:+H.>+1+:.A.U B.6.h+9+).v.s.(+M 1 ++i.` 8+i.| u r X.` E.c S 0.d+z e v l+$+8 h R.X |+Q.|.V.e k+D.0+7 r 2.,+m+o+% H.'.=.>..+% 0.H F.=.!+) ].M E j+U ( [+@.{+h+{.L.@._.f+h+}++.< Y.B.y.", "_.;+X O.- G.] +P.F.r+;.!+M.N.* .+; * -.=.}+F g+V.@+[ s+$ S T.}.s+s+i 5 ( =.M.-.9+G N # M [ q E @+5 Z = G.~+ +9+=+K.s+1+4.p.:.Z.9+O.9+u.].e.%+H w.H.i+R./+q+g.|./.l+N ..w.b.1 7+8 1+B.[ N f+.+) ~.#+Q u 3 c g 8 (+( ).6+6./ .+{ -.{ ,.6+j.a+P.> * ] r.t+A o.I.& !.}+|+X i+Y @._+B.% {.I.x.t.Q.` ", "F./ -+~.9+O.- O.u.<+ +'.-.-.! >.> &+' , *+8+L V.m t+u+1+..3.2 k }.B @+M 6.* M.~ , }+J.| M C ]+a f (+>+, ' ^ ).9+u.S...$ %.d+Q Y.-+*.*.r+!.2.1+t.|+> G.P.Q.1+e.j+p+O u+V ;+1.2+6 h _.V 2+S ( >.N..+=++._.U.U.t.s+q.{+H.F.% X ) N.N.-.* h+c.0._.{.H.:+_ $+A 4 ( &+^ L.u.{.:+-+[+B. .S.-+9+L.}+W [.", "W v.F.P.v.!.r+& !.=+Y - ,.'.,.) - X W _ #+W.V.K j+ .y.#+s.m.o.2+# f ^+L S.G.N.-.>.*.P.+.` X.8 f d+:.|+> ' & )+& 9+;+R.G .%.4 l.6+H.*+*+n+: `.K.( ).- ).[+_._+J.a.d.H G `.a.v+@ J y.t.l+2+( >.!+= X {+9+&+G.-+3+` @./ @.% X = N.~ !+>.n+8+p.k.A.[+}+=+1.i [ U.*.^ {.}+|+!. +{+U a.T =+*+)+] n+o+", "A.Z.W ( [+-+*.&+*./ =+!.- ) ,.= n+Q.(+t+g C.@+t+e.(.t.V V x.+.<.:.p+}.2 j.i+=.,.&+,+~.-+{.V ++B 8.< ( L. +~+*..+- Y z.x.8+&.d+&.w.=+>+>+=+Z._+T K.].v.-+=+w.'+T J.T $ 0.0.4.d.2 z /.a.3 ++[.; >.- Y |+*.,.> -+Q./+c.`.` : i+> -.~ 4+)+P.s.0.F 1+8+U.<+7.r M 3+^ )+~.v.=+L.).).Z H F 6.).G., ~+].", "_+( ;+6.% |+9+r+O.Y Z W X - > ~+U W.C.6 8 g u %. .Y.2.Z f+2._ _ 3+ .I m Q @.= ; *.,+*+O.r+o+l+B %.&.H m.Y._.: i+- H.v.6.` u+d+e+Y.Q.(.K.3+( 6.Q.:.T #+3+V U `./+K.2.+.K.s.U.+.n.z C 9.8 B X.w.% 6.[.% ,+.+:+( 1.^.4 I H _.u.)+>.* *+( s.l.F s+q.s.t.2.B.r 3 Q.~+&+:+6+>+Y ~+r+I.F $.x.H.,.;.*+V ", "S.6+I.6.[+/ +^ ^ L.o+'+r.W Z < |.V.c+M a+/+&.X.K.].;+o++._.r.3+s.F c t q R.~+& ] > ,.>.> o+M k i 2 l B 3 t+n.G {+^ :+|+f.l.| P q.8+`.s.` +.x.Q.1+:.k.a.X.m.4.E.7.{+-+u.Y 9+Y c.B @ 3 + V.q O $+9.o.(.}+i+<+f+x.(.d.h.a.G _.P.i+u.+...l.../+$ :.(.G ` G q K a+Z.~.{.I.[+{+~+&+h+e.n.#+).>.>.:+U ", "+.-+L.( @.n+O.] &+*+v.+.`. .O J t c+c j.t.s.1.#+[.( w.S.'+r.o++.G 8.B p f q+[+,+G.=.N.{ ^ #+2 7 p 7 p V.T.+ m 5 J.W X {.=+R.u+%+c.2.<+6+@.f+` 1.b.T y./+e+d.a+:.o+~.,+:+~.h+;+e.K D 5+7+} 4 p+Q b+u v+q.].f.>+!.:+|+<+o+S.B.8+8+:.H X.B.r.S.< #+< .. .e+K 7+i H A.v.m+}+|+*+) O.7.Q a+P.~+i+Z q.", "f.).H.W @.).' * ;.* - u.#+Q f v b N a+t.S._+S.U._ r.Q.t.A.@.v.f.<.T d+c+^+d+A.:+- >.{ - r.I 5+o w+o s j l y y n g+0.s._.6.;+7.F .w.X O.^ X ;+<.c.m.8+_.` s.Q.2.}+ + +u.Z R.s+W.k R o 6 p+K.<.< $ [ 8 ^.'+I.~+,.{ 4+,.)+-+Z t.e.a.c.3+[+{+/ v.% U H I g @+p k [ 4.Z H.).L.).,.) _ x+/.Q.2.Y.k.e+", "=+*+*+<+% :+, { ~ ~ { O.Q.q s E 8.`._.w.f+w.w.f.[._+8+x.@.L.|+f+3+'+d.} T.^.w.L.9+] G.P.3.6 a c+c+5.D @+v ]+t 5.p k }.d+J.W P.t.c.R.<+X ).:+Y <+r.q.G U 2.o+W {+Y m+6+f.K.o.L f v 0+o m m.[+6+f+m.q 2 a+=+] * N.M.M.-.'.G.!.;+r.o+F.-+!.O..+' H.r.O l j i [ I v+y+<.~+& i+ +) * Z.W.t+G S.1.e...", "v.L.Y Z f+u.&+! M.M.~ ' _.1 @+5 `.6.( : _ f+o+o+].A.f+@./ m+W x._+_+X.B x %.< _+S.r.U...C 5+B d+W.r L 9 @+z+0+o 0+R A+^+M T U.r.#+8+3+U.6.Z Z.>+>+2.7.8+_+].I.|+6+( x.1+9.K a k+e w+o b .[+u.: .J q R.- -.~ M.M.~ ! ) - ,+:+~+- ' ] ] ,.-.N..+r.[ j n.Q.z.6.(.^.X.6+r+~.n+.+> o+N [ R.@.A._.w.", "% I.<+2._+[.{.'.~ M.M.* _ t+b 0.V : o+A.+.].z.z.: <+F.{+{+F.[+[.Q.q.q+E @+2 r ++++[ ++2 v j %+e.1+t.'+1.Q E 5.0+. A+B+C+0 2 O /+k.4.j.b.` [.o+Z.% <+P.( x.+.;+v.@.x...n.y 5+R w+0+k+e z x+7.I.Z X.2 ++w.= !+M.M.~ 4+&+~.{+u.9+= { ;.; ; ;.!+-.&+_.r c Q.^ * > v.X.3.'+~.i+|+Y W :.# N f+~.@.U.V ", "[.F.u.: t.(._ )+-.M.M.=.( 5 }.a.3+V <.B.U : [+;+I.m+{+P.F.Y v.U.y.p.S y 9 u 5 5 t+3 b 5+D L s+7.2.m+,+-+S.%+n 5.p e w+D+d z+6 8 # C }.I #+<+m+}+: Z -+ +<+U.f.( w.q.Q K z c+z+0 y u r q t+0.U 3+q+} q U ^ ,.! ! = ).% _+(.8+Z *+, , &+; >.>.& {+1+# 5 6.* M.N.r+` (+k.6+|+A.m.y+1 x Q W & {.f.s.", "Q.|+^ X w.y.Y./ ) ! { ,.6.t+@ /.e.(.s._+( }+6+6+/ }+% @.m+m+( #+e+W.N (+k.S.f+].S.m.|.l } 9.Y.U [.F.X @.< %.++q h u 9 0 0 9 r N l+g V.y ../ & ~+[+[.6+H.6+8+:.m.a+v+l ^+5+D . }.J.f.6._+8.I 3.%.++z c 7.-+*+)+,+F.r.K.c.m.l.T x.<+m+n+*+O.-+w.1+(+l [ z.* M.M.,.Z %.p.2.[.e+++L q I y.!.>..+v.(.", ":.W H.,+F.B...f+^ , ,.G.f.++7+9 P `.A.Z.u./ v.{+/ P.W Y ~.@.Q.j.p+|.8.s.f.Y r+& |+#.d+M y+:.Q.1+k.1+T 0.O %.c.V z.w.b.}.}. .w.Z o+:.J V.x+_ *.r+P.'+2.m+2.y+i }.B + 0 7 . D.c+%+P.) * *+3+^.2+5 g k 2+[.n+ +L.@.+.t.S.z.W A.:.H H b.t.r.U.B.l.F p+E c U ; !+M.;.P.%.| k.q+q ++F t.f+-+, !+=.Y 1.", "a+U.{+Y }+_.b._+n+) ,..+@.y+V.l F 2.P.{+/ {+F.u.{+I.|+*+i+x.s+$+4 %+1._.o+=+).] I.E.g.s+A.].Q.k.^.d+5 4 h.G [+,+= - ].[ q _+r+>.) >+9.t 9 j.f.u._ m.X.#+4.8 t 8 ++[ M h y v }.Y.r+N.~ >.h+< 0.n.8 b &.|+' - ~.[+f.% X - = ,+Z q.8.v+W.v+p.k.s._.y.++9 a.-+4+!+, Z /.2 u i r s+W ).& ,.-.M.=.{+/+", "u+V P.=+>+[...s.L.= '., +y.8 l o.s.R.f+I.Y -+Y {+u.~.).% e.v+l+n...S.f+% <+u.X o+u+$.U >+_ r.A.s.&.i.#.f+=+h+^ > - 6.I C s+~.! 4+-+E.n 0 b /.b.a.M y g+}.C.2 X.U.: ( 2.e.i h 3+- ! { ) {+q.j+W.x 3 S.&+-.4+&+X L.,+' ;.N.4+; X r.8.c b I t.{+ +W 0.y S x.*.& F.1+g 7+6 g+4.<+- , ,.=.-.~ =.F.d.", "o.A.v.P.( 7.F 4.2.u./ |+W y.h + 2 3 l+d.f.X ~./ {+h+L.Z.b.S g+/.:.x.f.I.i+|+( +.m.g.v+T _+S.: X !.u.v.~.r+O.!.:+^ ,+P.d.2 W.].)+^ x.W.v 0+k+^+} l @+C.g t+l+$.].O.,.>.] U.| g+$ Z n+).6+#.v+q K c+[ ( >.M.~ '.,+*+.+'.4+!+M.!+* F.u+8 J d.@.] = ~+` N 2 $.7.t.j+L V.t 1 a+W G.;.4+=.>.4+-.=.6+j+", "9.J.< q.e.$.t+2+i.s+s+l.l.E.h.I l+i n l+<.u.6+6.A.+.8+&.u 2 I #.f+z.W n+G.~+2.0.3 x # q+q.V 6+,+= '., ) ) &+,+,+r+& :+'+2+C 8._+< /.k t A v e . ]+2 Q q.2.f.f.=+,+'.! .+[+j.M u P < U 1+(+2+/.u 6 [ Z =.M.~ * O.^ = * =.N.M.M.=.W v+y h.].).= * )+: u+g 9 g+C k f g+y+y.% ] { N.! =.>.;.{ =.6+%.", "u u c L J B C l+%+H 4.l.J.t.f+Z f...i 8 a.R.Q.j.p+2+3 y B | G <+|+=+h+r+' ^ ].O m L y+K.Z.{.*+& > =.4+>.> )+r+.+'.=., m+k.3 B 3 i k n g.E.(+t+r Q J.2.i+.+> O.{.{.^ ' & }+_+q+q [ &.:.j.o.a.1+3.l l+( =.M.~ * *.^ > * =.N.M.~ > A.t+q < X ] ' ' 9+z.1.%.5 C c+t |.B.% u.).,.-.! * ,.* ;.-.;.F.j+", "A K q l+S x+&.:.7.: I.=+|+:+G.'..+( g.@ i I | h g+i B g+P R.|+,+~+Y / / @.U.J.2+N m.6.i+G.* * ' G.= >.;.) O.O.) { !+N..+Z.0.g+2 3 l+j+V Y v.Z o+: {+9+.+;.-.* *.X -+:+9+{+f.K.%.n.a+m./+l.7.Y.d+C.N Z.=.M.~ =.& ^ .+,.=.N.M.{ n+e.# /.f.^ )+*+i+P.w.+.U <.4.2 } a.m+- *+^ ,.4+* ,.* 4+N.~ ! h+k.", "[ &.R.z.Z.<+6+P.F.~+&+> '.! N.N.* Y ..2+K f j u $.i.j+/+U.~.- .+& L.2.c.3.S 1 J ^.o+^ , ! N.-.'.G.- .+'.) ,+ +*+- ,.4+, -+Y.e+X.7.o+{+- ;.4+>.) ; - &+> '.>.=.) *.n+n+!.}+f+B.$ p.e+E.4.`.f+s.g+T.%.u.4+M.~ ;.G.*.&+) >.N.!+> f.v+g+e./ - ^ {+f.+.[.% }+m++.M 6 9.>+&+^ ^ ) * '.;.-.~ M.M.! !.Q.", "G >+&+>.;.=.= 9+L.H.> 4+!+M.~ ! ,.)+/ V i.8 9 p+X.k.1.[.L.] = , .+/ :.S c u 5 $+#+-+G..+' = ,.'.> ] r+] ] +6+Z.W / i+Y z.`.G : ).> ;.!+M.M.!+{ =.) &+)+*.)+.+, > r+^ ^ L._ #+e.H p.P /+U ( y.i i B.)+!+M.N.>..+)+- = >.{ ,.u./+1 | [.O.; H.>+U.2.@.h+~.n+o+I c+g #+X 9+H.' ,.=.N.M.M.M.!+>.9+2.", "f+,+{ M.M.M.4+] n+~+, N.M.M.N.=.'.>.>.] f+$+r n.&.T U.Y *.> >.* )+Z p.u $.K.V W n+- ] 9+h+Y +O.H.L.P.Z.;+Z.o+r.V +.` K.c.c.3+{.= -.M.M.~ -.4+* ,.' *. +X ~.*+&+= ; )+*.9+P.U < :.j+| $.1.8+e+y t+6.* ~ ~ { * > ] &+) ,., ~.G S 5 :.Y &+] ).|+6+h+n+n+-+L.Z.8.k ]+n.U./ n+- ,.4+!+M.M.!+4+) :+o+", "A.!.>.!+M.M.N.= H.,+'.~ M.!+4+* =.N.M.! -+ .W.y+y.Z ).' , * 4+.+v.Y.3.b+e.=+O..+, = r+h+% Z P.6+o+8+..j.$ T _.@.6+6.` K.#+x.F.] ;.!+!+-.4+* ,., ,.= & 9+i+X n+~+)+] *.,+!.v.w.3+s.H p+9.p.p.4 @ [ Z =.!+{ >.,.= &+G.) G.-+<.| q 4.@.r+; ] O.9+X -+|+v.I.{+@. .2 0 1 B.>+Y r+'.-.~ M.!+4+* ) *+Z ", "G 6.~.; 4+!+N.) *+^ * !+!+4+* * ! !+M.N.^ 3+E.:.>+- ;.{ =.* ,.n+_.:.a.%.:./ > =.;., r+{.I.P.>+: <.1.J.m.s+b.+.i+&+,+/ }+-+~+- '.! -.4+* ,.,.* ;.! ! =.) ' G.*.i+P.% =+m+u.P.z.U.3+t.s.#. .E.Q l l+( >.N.;.'.* , G.G.G./ K.x+i n.2.*.) '.* ,.)+m+W W v.Y ~.m+Q.5 @+# `.[+u.*+) ! !+!+4+* * =.- }+", "$ s+K._ n+> >.&+9+O.'.{ ;.,., =.{ -.-.4+] <+Q.U n+>.-.{ * ; !.w.1+K.7.l.J.>+& > > ] +m+F.}+@.f+U V % P._ 7.x.{..+&+H.*+&+> > = , = ; &+; > ,.* =.=.>.>.* '.- <+k.$+e+y.Y.t.R.r.U.2.: ( 2.3+X.C [ f.' '.' G..+&+*.*.~.8+| 3 | #.Y ' ,.'.* = :+Z f.{+H.,+n+6+Q.S ]+i s.>+u.X *.) ;.;.'.,.=.4+' ~.", "^.b+W.H U Y & ^ +^ ' , ) = , >.;.>.'.) )+|+A.U F.,+& - *+=+8+u+%+X.1.q+o.`.[.w.2.V _+Q.t.R.S.G ..s.V w.S.m.s+t.2.w.x.V o+: z.z.z.o+w.f.6.: Z Z Z Z Z Z.[+P.Z T 3 @+z K J h p+a.e.m.q.B.B.G j+} }...f.: f.2.].2.: P.U.h.J t+u+G [.: ( Z Z o+7.b.y.: u.( _+1.j+9 D L s.6+|+F.}+{.H.*.)+)+] - O.~.", "@ C.b (+q.Z.:+H. +9+^ - = ,.=.4+>.= ' ; )+-+U.B.3+o+% I.: J.5 x l i i } y N 5 q c 1 i g g+| 8.4 J i q h 3 B b J 3 3 1 1 u h M r r u q h h r r r r M M ++4 (+9.3 5+w d w+A+z+@+l m K 8 i # J A 5.D 9 u h u 3 u b+i.T /+r C.f 2 1 h M M M M u J B [ a...(+1 y + 5.7 1 q.>+|+@.].x.f+I.m+{+v.6+6+I.", }; typedef struct { int score; int lives; } Wordtris_state; static int total_lives = 10; static int wordtris_wordcmp (const void *p1, const void *p2) { return strcmp ((char *)p1, *(char **)p2); } static void wordtris_init (); int wordtris_getmove (Pos *, int, int, GtkboardEventType, Player, byte **, int **); int wordtris_getmove_kb (Pos *, int, byte **, int **); void wordtris_free (); ResultType wordtris_who_won (Pos *, Player , char **); int wordtris_animate (Pos *pos, byte **movp); static void *wordtris_newstate (Pos *, byte *); Game Wordtris = { WORDTRIS_CELL_SIZE, WORDTRIS_BOARD_WID, WORDTRIS_BOARD_HEIT, WORDTRIS_NUM_PIECES, wordtris_colors, NULL, wordtris_pixmaps, "Wordtris", "Word games", wordtris_init}; /* This list was produced using $ egrep -x [a-z]{4} /usr/share/dict/words | perl -e 'while (<>) {foreach $i ((0 .. 3)) {$count{substr($_,$i,1)}++}} foreach $c (("a" .. "z")) {print $count{$c}, "\n"}' Perl totally rocks */ static float charcounts[26] = { 629, 223, 205, 302, 746, 152, 186, 182, 395, 30, 167, 460, 234, 338, 503, 272, 6, 395, 622, 404, 276, 63, 173, 24, 125, 28, }; static char ** wordtris_getbgxpm () { int i; static char *xpm[lava_xpm_header_size + WORDTRIS_CELL_SIZE * WORDTRIS_BOARD_HEIT]; static char emptyline[WORDTRIS_CELL_SIZE * WORDTRIS_BOARD_WID * 2]; for (i=0; iboard[i] = 0; // make sure we have a neighbor while (1) { word = flwords [random() % num_flwords]; for (i=0; iboard [i] = word[i] - 'a' + 1; for (j=0; jrender [0] = RENDER_HIGHLIGHT1; } static void wordtris_init () { int i; static char emptyline[WORDTRIS_BOARD_WID * WORDTRIS_CELL_SIZE]; static char dottedline[WORDTRIS_BOARD_WID * WORDTRIS_CELL_SIZE]; game_single_player = TRUE; game_set_init_pos = wordtris_set_init_pos; game_free = wordtris_free; game_getmove = wordtris_getmove; game_getmove_kb = wordtris_getmove_kb; game_who_won = wordtris_who_won; game_scorecmp = game_scorecmp_def_dscore; game_animation_time = 2000; game_animate = wordtris_animate; game_stateful = TRUE; game_state_size = sizeof (Wordtris_state); game_newstate = wordtris_newstate; game_bg_pixmap = wordtris_getbgxpm (); game_highlight_colors = wordtris_highlight_colors; game_set_init_render = wordtris_set_init_render; game_doc_about_status = STATUS_COMPLETE; game_doc_about = "Wordtris\n" "Single player game\n" "Status: Partially implemented (playable)\n" "URL: "GAME_DEFAULT_URL("wordtris"); game_doc_rules = "Press Ctrl+G to start the game.\n\n" " Click one of the letters of the word at the bottom and type the letter on one of the falling blocks to change that letter to the new letter. The new word must be legal.\n" "The smiley face acts as a wildcard and can be used as an arbitrary letter.\n" "\n" "You get a point for every new word you make. You have a total of ten lives. You lose a life when a block falls to the bottom row. The game ends when you lose all your lives."; game_doc_strategy = "Try to replace rarely occuring letters with more commonly occuring letters\n"; } static int wordtris_curx = 0, wordtris_cury = 0; ResultType wordtris_who_won (Pos *pos, Player to_play, char **commp) { static char comment[32]; int i; *commp = comment; for (i=0; iboard [2 * board_wid + i] != WORDTRIS_EMPTY && pos->state && ((Wordtris_state *)pos->state)->lives == 0) { snprintf (comment, 32, "Game over. Score: %d", pos->state ? ((Wordtris_state *)pos->state)->score: 0); return RESULT_WON; } snprintf (comment, 32, "Score: %d; Lives: %d", pos->state ? ((Wordtris_state *)pos->state)->score: 0, pos->state ? ((Wordtris_state *)pos->state)->lives: total_lives); return RESULT_NOTYET; } void *wordtris_newstate (Pos *pos, byte *move) { static Wordtris_state state; int i, score = 0, count = 0, died = 0; for (i=0; move[3*i] >= 0; i++) { if (move[3*i+1] == 0) score = 1; if (move[3*i+2] == WORDTRIS_EMPTY) count--; else count++; } if (count + score < 1) died = 1; state.score = (pos->state ? ((Wordtris_state *)pos->state)->score : 0) + score; state.lives = (pos->state ? ((Wordtris_state *)pos->state)->lives : total_lives) - died; return &state; } int wordtris_getmove (Pos *pos, int x, int y, GtkboardEventType type, Player to_play, byte **movp, int ** rmovep) { static int rmove[7]; int *rp = rmove; if (type != GTKBOARD_BUTTON_RELEASE) return 0; if (y != 0) return 0; if (wordtris_curx != x) { *rp++ = wordtris_curx; *rp++ = 0; *rp++ = 0; *rp++ = x; *rp++ = 0; *rp++ = RENDER_HIGHLIGHT1; *rp++ = -1; *rmovep = rmove; } wordtris_curx = x; return 0; } gboolean wordtris_findletter (byte *board, int letter, int *x, int *y) { int i, j; int minx = -1, miny = board_heit, minval = WORDTRIS_WILDCARD; for (i=0; i < WORDTRIS_LEN; i++) { for (j=1; j= board_heit) return FALSE; *x = minx; *y = miny; return TRUE; } int wordtris_getmove_kb (Pos *pos, int key, byte **movp, int **rmovp) { static int rmove[10]; static byte move[10]; byte *mp = move; int *rp = rmove; if (key == GDK_Right) { *rp++ = wordtris_curx; *rp++ = 0; *rp++ = 0; if (++wordtris_curx == WORDTRIS_LEN) wordtris_curx = 0; *rp++ = wordtris_curx; *rp++ = 0; *rp++ = RENDER_HIGHLIGHT1; *rp++ = -1; *rmovp = rmove; return 0; } if (key == GDK_Left) { *rp++ = wordtris_curx; *rp++ = 0; *rp++ = 0; if (--wordtris_curx < 0) wordtris_curx = WORDTRIS_LEN - 1; *rp++ = wordtris_curx; *rp++ = 0; *rp++ = RENDER_HIGHLIGHT1; *rp++ = -1; *rmovp = rmove; return 0; } if (key >= GDK_A && key <= GDK_Z) key = key + GDK_a - GDK_A; if (key >= GDK_a && key <= GDK_z) { int i, x, y; char word [WORDTRIS_LEN+1]; gboolean found = wordtris_findletter (pos->board, key - GDK_a + 1, &x, &y); if (!found) return -1; if (wordtris_curx < 0) return -1; for (i=0; iboard [i] - 1 + 'a'; word [WORDTRIS_LEN] = '\0'; if (word [wordtris_curx] == key - GDK_a + 'a') return -1; word [wordtris_curx] = key - GDK_a + 'a'; if (!bsearch (word, flwords, num_flwords, sizeof (flwords[0]), wordtris_wordcmp)) return -1; *mp++ = wordtris_curx; *mp++ = wordtris_cury; *mp++ = key - GDK_a + 1; *mp++ = x; *mp++ = y; *mp++ = WORDTRIS_EMPTY; *mp++ = -1; *movp = move; return 1; } return -1; } void wordtris_free () { wordtris_curx = wordtris_cury = 0; } int wordtris_get_rand_char () { int i, sum, thresh; if (random () % 10 == 0) return WORDTRIS_WILDCARD; for (i=0, sum=0; i<26; i++) sum += charcounts[i]; thresh = random() % sum; for (i=0, sum=0; i<26; i++) if ((sum += charcounts[i]) > thresh) return i + 1; assert (0); return -1; } int wordtris_animate (Pos *pos, byte **movp) { static byte move[1024]; int i, j; byte *mp = move; byte *board = pos->board; for (i=0; i=1; j--) { int val; if ((val = pos->board [j * board_wid + i]) != WORDTRIS_EMPTY) { *mp++ = i; *mp++ = j; *mp++ = WORDTRIS_EMPTY; if (j > 2) { *mp++ = i; *mp++ = j-1; *mp++ = val; } } } while (1) { i = random() % WORDTRIS_LEN; if (pos->board [(board_heit - 1) * board_wid + i]) continue; *mp++ = i; *mp++ = board_heit - 1; *mp++ = wordtris_get_rand_char(); break; } *mp = -1; *movp = move; return 1; } gtkboard/stamp-h.in000066400000000000000000000000121153150217100145410ustar00rootroot00000000000000timestamp