commit 21625f40b5f71ecd4b9832836f1a89ef3bb20b74 Author: Carlos R. Mafra Date: Fri Mar 25 19:45:13 2011 +0100 Initial dockapps git repo I tried to get the latest versions from dockapps.org, but I haven't tested any of them. More dockapps will be added as time permits. diff --git a/Temperature.app-1.5/COPYING b/Temperature.app-1.5/COPYING new file mode 100644 index 0000000..96e4591 --- /dev/null +++ b/Temperature.app-1.5/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + 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., 675 Mass Ave, Cambridge, MA 02139, 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. diff --git a/Temperature.app-1.5/ChangeLog b/Temperature.app-1.5/ChangeLog new file mode 100644 index 0000000..a49bb34 --- /dev/null +++ b/Temperature.app-1.5/ChangeLog @@ -0,0 +1,38 @@ +Vesrion 1.5 - Feb 7, 2010 + - Fix ancient c++ codeing, using std:: namespace (carlos@gamma.ttk.pte.hu) + +Version 1.4 - April 6, 2002 + - Now fetching temperature information over http (instead of ftp). + - Fixed possible race condition when creating temporary files. + +Version 1.3 - Jul 2, 2001 + - Added option -V, which enables verbose messages from wget and + can be useful for tracing if wget fails. + - Minor bug fixes. + +Version 1.2 - Jun 29, 2001 + - Temporary files are now unique to the process, + so that multiple instances can run at once. + +Version 1.1 - Jun 25, 2001 + - Fixed some compilation problems. + - Fixed potential race condition. + - Now works better on Solaris. + +Version 1.0 - March 17, 2001 + - New Makefile. + +Version 0.4 - April 23, 2000 + - Added option -t, which makes the time of the temperature observation + appear (in 12 or 24 hour format). + +Version 0.3 - April 19, 2000 + - Fixed exit bug. + +Version 0.2 - April 18, 2000 + - Minor code clean up. + - Updated help text. + - Corrected spelling faults. + +Version 0.1 - April 16, 2000 + - First release. diff --git a/Temperature.app-1.5/INSTALL b/Temperature.app-1.5/INSTALL new file mode 100644 index 0000000..7355196 --- /dev/null +++ b/Temperature.app-1.5/INSTALL @@ -0,0 +1,44 @@ +Installation instructions for Temperature.app + + +Requirements +------------------------------------------------------------------- +- wget + The wget utility is used to fetch the weather information. + If you don't have it installed already you can find it here: + http://www.gnu.org/software/wget/wget.html + +- ICAO Location Indicator + You must find the ICAO Location Indicator (a 4-character string) + of a weather station near you. You can search for a station + on this site: http://www.nws.noaa.gov/oso/siteloc.shtml + +- X11, libxpm, C++ development environment + Most (Linux) systems have these things installed by default. + If you don't have it look for packages that fit your + distribution/vendor. + + +Installation +------------------------------------------------------------------- +1) make +2) su +3) make install (to put it in /usr/local/GNUstep/Apps/Temperature.app) + or + make install-x11 (to put it in /usr/X11R6/bin) +5) exit + + +Running +------------------------------------------------------------------- +To run this program: +/usr/local/GNUstep/Apps/Temperature.app/Temperature -s & +or +/usr/X11R6/bin/Temperature.app -s & + + +For more information about available command line arguments: +/usr/local/GNUstep/Apps/Temperature.app/Temperature --help +or +/usr/X11R6/bin/Temperature.app --help + diff --git a/Temperature.app-1.5/Main.cc b/Temperature.app-1.5/Main.cc new file mode 100644 index 0000000..37db9fe --- /dev/null +++ b/Temperature.app-1.5/Main.cc @@ -0,0 +1,29 @@ +// +// Temperature.app +// +// Copyright (c) 2000 Per Liden +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. +// + +#include "Temperature.h" + +int main(int argc, char** argv) +{ + Temperature app(argc, argv); + app.run(); + return 0; +} diff --git a/Temperature.app-1.5/Makefile b/Temperature.app-1.5/Makefile new file mode 100644 index 0000000..3563730 --- /dev/null +++ b/Temperature.app-1.5/Makefile @@ -0,0 +1,35 @@ +# +# Temperature.app Makefile +# + +DESTDIR = +GNUSTEP_BINDIR = /usr/local/GNUstep/Apps/Temperature.app +X11_BINDIR = /usr/X11R6/bin + +CXX=c++ +CXXFLAGS += -Wall -pedantic -fno-rtti -fno-exceptions -O2 -I/usr/X11R6/include +LDFLAGS += -L/usr/X11R6/lib -lXpm -lXext -lX11 + +OBJECTS = Main.o Temperature.o Xpm.o + +all: Temperature.app + +Temperature.app: $(OBJECTS) + $(CXX) $(OBJECTS) -o $@ $(LDFLAGS) + +.PHONY: install install-gnustep install-x11 clean + +install: install-gnustep + +install-gnustep: all + install -d $(DESTDIR)$(GNUSTEP_BINDIR) + install -m 0755 Temperature.app $(DESTDIR)$(GNUSTEP_BINDIR)/Temperature + +install-x11: all + install -d $(DESTDIR)$(X11_BINDIR) + install -m 0755 Temperature.app $(DESTDIR)$(X11_BINDIR)/Temperature.app + +clean: + rm -f *~ *.o + +# End of file diff --git a/Temperature.app-1.5/README b/Temperature.app-1.5/README new file mode 100644 index 0000000..db14fd9 --- /dev/null +++ b/Temperature.app-1.5/README @@ -0,0 +1,49 @@ + + Temperature.app + + + by Per Liden + + + modified to work with modern compilers by: + + +Description +-------------------------------------------------------------- +Temperature.app is a Window Maker dock application which +fetches local temperature information every 15 minutes from +ftp://weather.noaa.gov and displays it (in Celsius or Fahrenheit). + + +Hints +-------------------------------------------------------------- +The led: + If the led is blinking (green/red), then that means + Temperature.app is trying to fetch weather information. + If successful the led will stop blinking and go green. + If unsuccessful the led will stop blinking and go red. + Also, a error message will be printed in the console, + describing what went wrong. If the error message is + "wget failed" and you can't figure out why, try using + option -V, which will cause wget to be run in verbose + mode. + +Bugs +-------------------------------------------------------------- +If you discover any bugs in this software, please send a +bugreport to per@fukt.bth.se and describe the problem. + + +Special thanks to +-------------------------------------------------------------- +Mike Henderson (mghenderson@lanl.gov) - Author of wmWeather +(I didn't know about the weather.noaa.gov ftp-site before I +caught sight of his program). + + +Copyright +-------------------------------------------------------------- +Temperature.app is copyright (c) 2000-2002 by Per Liden and is +licensed through the GNU General Public License. Read the +COPYING file for the complete license. + diff --git a/Temperature.app-1.5/Temperature.cc b/Temperature.app-1.5/Temperature.cc new file mode 100644 index 0000000..d25d6be --- /dev/null +++ b/Temperature.app-1.5/Temperature.cc @@ -0,0 +1,449 @@ +// +// Temperature.app +// +// Copyright (c) 2000-2002 Per Liden +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. +// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "Xpm.h" +#include "Temperature.h" + +#include "pixmaps/main.xpm" +#include "pixmaps/redlight.xpm" + +volatile static ChildStatus childStatus; + +static void catchBrokenPipe(int sig) +{ + exit(0); +} + +static void catchChildExit(int sig) +{ + int status; + waitpid(-1, &status, 0); + + if (WIFEXITED(status)) { + if (WEXITSTATUS(status)) { + childStatus = ChildError; + } else { + childStatus = ChildDone; + } + } else { + childStatus = ChildError; + } + + if (childStatus == ChildError) { + std::cerr << APPNAME << ": could not fetch temperature (wget failed), try option -V for more information" << std::endl; + } +} + +Temperature::Temperature(int argc, char** argv) +{ + XClassHint classHint; + XSizeHints sizeHints; + XWMHints wmHints; + Atom deleteWindow; + Xpm* image; + char* displayName = NULL; + + mInstanceName = INSTANCENAME; + mStationId = 0; + mTemperature[0] = 0; + mTime[0] = 0; + mTimeDiff = 0.0; + mFahrenheit = false; + mShowTime = false; + mTime12HourFormat = false; + mVerbose = false; + + // Parse command line + if (argc>1) { + for (int i=1; i" << std::endl; + tryHelp(argv[0]); + exit(0); + } + + // Open display + if ((mDisplay = XOpenDisplay(displayName)) == NULL) { + std::cerr << APPNAME << ": could not open display " << displayName << std::endl; + exit(0); + } + + // Get root window + mRoot = RootWindow(mDisplay, DefaultScreen(mDisplay)); + + // Create windows + mAppWin = XCreateSimpleWindow(mDisplay, mRoot, 1, 1, 64, 64, 0, 0, 0); + mIconWin = XCreateSimpleWindow(mDisplay, mAppWin, 0, 0, 64, 64, 0, 0, 0); + + // Set classhint + classHint.res_name = mInstanceName; + classHint.res_class = CLASSNAME; + XSetClassHint(mDisplay, mAppWin, &classHint); + + // Create delete atom + deleteWindow = XInternAtom(mDisplay, "WM_DELETE_WINDOW", False); + XSetWMProtocols(mDisplay, mAppWin, &deleteWindow, 1); + XSetWMProtocols(mDisplay, mIconWin, &deleteWindow, 1); + + // Set windowname + XStoreName(mDisplay, mAppWin, APPNAME); + XSetIconName(mDisplay, mAppWin, APPNAME); + + // Set sizehints + sizeHints.flags= USPosition; + sizeHints.x = 0; + sizeHints.y = 0; + XSetWMNormalHints(mDisplay, mAppWin, &sizeHints); + + // Set wmhints + wmHints.initial_state = WithdrawnState; + wmHints.icon_window = mIconWin; + wmHints.icon_x = 0; + wmHints.icon_y = 0; + wmHints.window_group = mAppWin; + wmHints.flags = StateHint | IconWindowHint | IconPositionHint | WindowGroupHint; + XSetWMHints(mDisplay, mAppWin, &wmHints); + + // Set command + XSetCommand(mDisplay, mAppWin, argv, argc); + + // Set background image + image = new Xpm(mDisplay, mRoot, main_xpm); + image->setWindowPixmapShaped(mIconWin); + delete image; + + // Create status led + mStatusLed = XCreateSimpleWindow(mDisplay, mIconWin, LED_X, LED_Y, 3, 2, 0, 0, 0); + image = new Xpm(mDisplay, mRoot, redlight_xpm); + image->setWindowPixmap(mStatusLed); + delete image; + + XMapWindow(mDisplay, mIconWin); + XMapWindow(mDisplay, mAppWin); + XSync(mDisplay, False); + + // Catch broker pipe signal + signal(SIGPIPE, catchBrokenPipe); + + // Catch child exit signal + signal(SIGCHLD, catchChildExit); +} + +void Temperature::tryHelp(char* appname) +{ + std::cerr << std::endl << "Try `" << appname << " --help' for more information" << std::endl; +} + +void Temperature::showHelp() +{ + std::cerr << APPNAME << " Copyright (c) 2000-2002 by Per Liden (per@fukt.bth.se)" << std::endl << std::endl + << "options:" << std::endl + << " -s set station id (ICAO Location Indicator)" << std::endl + << " -t 12|24 display time of temperature observation (12 or 24 hour format)" << std::endl + << " -f display degrees in Fahrenheit" << std::endl + << " -V display verbose messages from wget" << std::endl + << " -n set client instance name" << std::endl + << " -d set display" << std::endl + << " -v print version and exit" << std::endl + << " -h, --help display this help text and exit" << std::endl + << std::endl + << "You must supply the ICAO Location Indicator (a 4-character string)" << std::endl + << "of a weather station near you. You can search for a station on" << std::endl + << "this site: http://www.nws.noaa.gov/oso/siteloc.shtml" << std::endl; +} + +void Temperature::checkArgument(char** argv, int argc, int index) +{ + if (argc-1 < index+1) { + std::cerr << APPNAME << ": option '" << argv[index] << "' requires an argument" << std::endl; + tryHelp(argv[0]); + exit(0); + } +} + +void Temperature::showLed(bool show) +{ + if (show) { + XMapWindow(mDisplay, mStatusLed); + } else { + XUnmapWindow(mDisplay, mStatusLed); + } + XSync(mDisplay, False); +} + +void Temperature::calcTimeDiff() +{ + struct tm* t; + double localTime; + double universalTime; + time_t currentTime; + + currentTime = time(0); + t = gmtime(¤tTime); + universalTime = (double)t->tm_hour + (double)t->tm_min / 60.0 + (double)t->tm_sec / 3600.0; + + currentTime = time(0); + t = localtime(¤tTime); + localTime = (double)t->tm_hour + (double)t->tm_min / 60.0 + (double)t->tm_sec / 3600.0; + + mTimeDiff = universalTime - localTime; + if (mTimeDiff > 24.0) { + mTimeDiff -= 24.0; + } else if (mTimeDiff < 0.0) { + mTimeDiff += 24.0; + } +} + +void Temperature::setTime(char* utcTime) +{ + char unit[3]; + int hour = 0; + int min = 0; + + strncpy(unit, &utcTime[0], 2); + hour = atoi(unit); + strncpy(unit, &utcTime[2], 2); + min = atoi(unit); + + double time = ((double)hour + (double)min / 60.0) - mTimeDiff; + if (time < 0.0) { + time += 24.0; + } else if (time > 24.0) { + time -= 24.0; + } + + hour = (int)time; + min = (int)((time - (double)hour) * 60.0 + 0.5); + if (min >= 60){ + min = 0; + if (++hour >= 24) { + hour = 0; + } + } + + if (mTime12HourFormat) { + if (hour >= 0 && hour <= 11) { + mTimeAMPM = "AM"; + } else { + mTimeAMPM = "PM"; + } + + if (hour == 0) { + hour = 12; + } else if (hour > 12) { + hour -= 12; + } + } + sprintf(mTime, "%d:%.2d", hour, min); +} + +bool Temperature::updateTemperture(ifstream& file) +{ + const int MAX_LINE = 1024; + char buffer[MAX_LINE]; + + if (mShowTime) { + // Find time of observation + char* start; + char time[5]; + file.getline(buffer, MAX_LINE - 1); + file.getline(buffer, MAX_LINE - 1); + if ((start = strstr(buffer, "UTC")) == 0) { + return false; + } + strncpy(time, start - 5, 4); + setTime(time); + } + + // Find temperature + while (!file.eof()) { + file >> buffer; + if (!strcmp(buffer, "Temperature:")) { + file >> buffer; + if (buffer && strlen(buffer) < 5) { + char* unit; + if (mFahrenheit) { + strcpy(mTemperature, buffer); + unit = " °F"; + } else { + sprintf(mTemperature, "%d", (int)rint((atoi(buffer) - 32) / 1.8)); + unit = " °C"; + } + + Xpm* image = new Xpm(mDisplay, mRoot, main_xpm); + if (mShowTime) { + if (mTime12HourFormat) { + image->drawComposedString(TIME_POS, TIME_FONT, mTime, AMPM_FONT, mTimeAMPM); + } else { + image->drawString(TIME_POS, TIME_FONT, mTime); + } + image->drawComposedString(TEMP_WITH_TIME_POS, TEMP_FONT, mTemperature, UNIT_FONT, unit); + } else { + image->drawComposedString(TEMP_POS, TEMP_FONT, mTemperature, UNIT_FONT, unit); + } + image->setWindowPixmap(mIconWin); + delete image; + XSync(mDisplay, False); + return true; + } + } + } + + std::cerr << APPNAME << ": could not fetch temperature (unknown file format)" << std::endl; + return false; +} + +void Temperature::run() +{ + if (mShowTime) { + calcTimeDiff(); + } + + int counter = 0; + while(1) { + if (counter <= 0) { + char tmpFile[sizeof(TMP_FILE)] = TMP_FILE; + int fd = mkstemp(tmpFile); + if (fd == -1) { + std::cerr << APPNAME << ": could not create temporary file " << tmpFile << ": " << strerror(errno) << std::endl; + exit(1); + } + close(fd); + + counter = UPDATE_INTERVAL; + childStatus = ChildRunning; + signal(SIGCHLD, catchChildExit); + showLed(true); + int pid = fork(); + if (pid == 0) { + const char* verbose = (mVerbose ? "--verbose" : "--quiet"); + char* URL = new char[strlen(METAR_URL) + strlen(mStationId) + 1]; + sprintf(URL, METAR_URL, mStationId); + execlp("wget", "wget", "--cache=off", "--tries=0", verbose, "-O", tmpFile, URL, 0); + std::cerr << APPNAME << ": could not fetch temperature (wget not found in $PATH)" << std::endl; + remove(tmpFile); + exit(0); + } else if (pid == -1) { + std::cerr << APPNAME << ": could not fetch temperature (fork() failed)" << std::endl; + } else { + bool toggle = true; + while (childStatus == ChildRunning) { + showLed(toggle); + toggle ^= true; + sleep(1); + } + showLed(true); + if (childStatus == ChildDone) { + ifstream file(tmpFile); + if (file) { + if (updateTemperture(file)) { + showLed(false); + } + file.close(); + } + } + remove(tmpFile); + } + } else { + counter--; + sleep(1); + XSync(mDisplay, False); + } + } +} diff --git a/Temperature.app-1.5/Temperature.h b/Temperature.app-1.5/Temperature.h new file mode 100644 index 0000000..4f07a5b --- /dev/null +++ b/Temperature.app-1.5/Temperature.h @@ -0,0 +1,89 @@ +// +// Temperature.app +// +// Copyright (c) 2000-2002 Per Liden +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. +// + +#ifndef _TEMPERATURE_H_ +#define _TEMPERATURE_H_ + +#include +#include + +#define APPNAME "Temperature.app" +#define VERSION "1.5" +#define INSTANCENAME "temperature_app" +#define CLASSNAME "Temperature_app" +#define METAR_URL "http://weather.noaa.gov/pub/data/observations/metar/decoded/%s.TXT" +#define UPDATE_INTERVAL 900 +#define TIME_POS 22 +#define TEMP_POS 35 +#define TEMP_WITH_TIME_POS 42 +#define TIME_FONT "-*-helvetica-medium-r-*-*-10-*-*-*-*-*-*-*" +#define AMPM_FONT "-*-helvetica-medium-r-*-*-8-*-*-*-*-*-*-*" +#define TEMP_FONT "-*-helvetica-medium-r-*-*-18-*-*-*-*-*-*-*" +#define UNIT_FONT "-*-helvetica-medium-r-*-*-12-*-*-*-*-*-*-*" +#define LED_X 57 +#define LED_Y 59 +#define TMP_FILE "/tmp/temperature.app-XXXXXX" + +/* temporary hack */ +using namespace std; + +enum ChildStatus +{ + ChildRunning, + ChildDone, + ChildError +}; + +class Temperature +{ +public: + Temperature(int argc, char** argv); + ~Temperature() {}; + void run(); + +private: + void tryHelp(char* appname); + void showHelp(); + void checkArgument(char** argv, int argc, int index); + void showErrorLed(bool show); + void calcTimeDiff(); + void setTime(char* utcTime); + bool updateTemperture(ifstream& file); + void showLed(bool show); + + Display* mDisplay; + Window mRoot; + Window mAppWin; + Window mIconWin; + Window mStatusLed; + char* mInstanceName; + char* mStationId; + char mTemperature[5]; + char mTime[6]; + char* mTimeAMPM; + double mTimeDiff; + bool mFahrenheit; + bool mShowTime; + bool mTime12HourFormat; + bool mVerbose; +}; + +#endif diff --git a/Temperature.app-1.5/Xpm.cc b/Temperature.app-1.5/Xpm.cc new file mode 100644 index 0000000..253f9f7 --- /dev/null +++ b/Temperature.app-1.5/Xpm.cc @@ -0,0 +1,155 @@ +// +// Temperature.app +// +// Copyright (c) 2000-2002 Per Liden +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. +// + +#include +#include +#include +#include +#include +#include +#include "Temperature.h" +#include "Xpm.h" + +Xpm::Xpm(Display* display, Window root, char** data) +{ + int error; + + mDisplay = display; + + mAttributes.valuemask = 0; + error = XpmCreatePixmapFromData(mDisplay, root, data, &mImage, &mMask, &mAttributes); + + switch (error) { + case XpmColorError: + std::cerr << APPNAME << ": xpm image loaded but did not get all colors needed" << std::endl; + break; + + case XpmColorFailed: + std::cerr << APPNAME << ": could not load xpm image (not enough colors available)" << std::endl; + exit(0); + break; + + case XpmNoMemory: + std::cerr << APPNAME << ": could not load xpm image (not enough memory available)" << std::endl; + exit(0); + break; + + case XpmOpenFailed: + case XpmFileInvalid: + std::cerr << APPNAME << ": could not load xpm image (image broken or corrupt)" << std::endl; + exit(0); + break; + + case XpmSuccess: + default: + // Image loaded ok + break; + } +} + +Xpm::~Xpm() +{ + if (mImage) { + XFreePixmap(mDisplay, mImage); + } + + if (mMask) { + XFreePixmap(mDisplay, mMask); + } +} + +void Xpm::setWindowPixmap(Window win) +{ + XResizeWindow(mDisplay, win, mAttributes.width, mAttributes.height); + XSetWindowBackgroundPixmap(mDisplay, win, mImage); + XClearWindow(mDisplay, win); +} + +void Xpm::setWindowPixmapShaped(Window win) +{ + XResizeWindow(mDisplay, win, mAttributes.width, mAttributes.height); + XSetWindowBackgroundPixmap(mDisplay, win, mImage); + XShapeCombineMask(mDisplay, win, ShapeBounding, 0, 0, mMask, ShapeSet); + XClearWindow(mDisplay, win); +} + +void Xpm::drawString(int pos, char* font, char* str) +{ + XFontStruct* fontStruct; + GC gc; + XGCValues gcv; + + if ((fontStruct = XLoadQueryFont(mDisplay, font)) == 0) { + cerr << APPNAME << ": could not load font '" << font << "'" << endl; + exit(0); + } + + gcv.foreground = WhitePixel(mDisplay, DefaultScreen(mDisplay)); + gc = XCreateGC(mDisplay, mImage, GCForeground, &gcv); + + int strLength = strlen(str); + int strWidth = XTextWidth(fontStruct, str, strLength); + + int x = (64 / 2) - (strWidth / 2); + XSetFont(mDisplay, gc, fontStruct->fid); + XDrawString(mDisplay, mImage, gc, x, pos, str, strLength); + + XFreeGC(mDisplay, gc); + XFreeFont(mDisplay, fontStruct); +} + +void Xpm::drawComposedString(int pos, char* font1, char* str1, char* font2, char* str2) +{ + XFontStruct* fontStruct1; + XFontStruct* fontStruct2; + GC gc; + XGCValues gcv; + + if ((fontStruct1 = XLoadQueryFont(mDisplay, font1)) == 0) { + cerr << APPNAME << ": could not load font '" << font1 << "'" << endl; + exit(0); + } + + if ((fontStruct2 = XLoadQueryFont(mDisplay, font2)) == 0) { + cerr << APPNAME << ": could not load font '" << font2 << "'" << endl; + exit(0); + } + + gcv.foreground = WhitePixel(mDisplay, DefaultScreen(mDisplay)); + gc = XCreateGC(mDisplay, mImage, GCForeground, &gcv); + + int str1Length = strlen(str1); + int str1Width = XTextWidth(fontStruct1, str1, str1Length); + int str2Length = strlen(str2); + int str2Width = XTextWidth(fontStruct2, str2, str2Length); + + int x = (64 / 2) - ((str1Width + str2Width) / 2); + XSetFont(mDisplay, gc, fontStruct1->fid); + XDrawString(mDisplay, mImage, gc, x, pos, str1, str1Length); + + x += str1Width; + XSetFont(mDisplay, gc, fontStruct2->fid); + XDrawString(mDisplay, mImage, gc, x, pos, str2, str2Length); + + XFreeGC(mDisplay, gc); + XFreeFont(mDisplay, fontStruct1); + XFreeFont(mDisplay, fontStruct2); +} diff --git a/Temperature.app-1.5/Xpm.h b/Temperature.app-1.5/Xpm.h new file mode 100644 index 0000000..1ceb080 --- /dev/null +++ b/Temperature.app-1.5/Xpm.h @@ -0,0 +1,45 @@ +// +// Temperature.app +// +// Copyright (c) 2000-2002 Per Liden +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. +// + +#ifndef _XPM_H_ +#define _XPM_H_ + +#include +#include + +class Xpm +{ +public: + Xpm(Display* display, Window root, char** data); + virtual ~Xpm(); + void setWindowPixmap(Window win); + void setWindowPixmapShaped(Window win); + void drawString(int pos, char* font, char* str); + void drawComposedString(int pos, char* font1, char* str1, char* font2, char* str2); + +private: + Display* mDisplay; + XpmAttributes mAttributes; + Pixmap mImage; + Pixmap mMask; +}; + +#endif diff --git a/Temperature.app-1.5/pixmaps/main.xpm b/Temperature.app-1.5/pixmaps/main.xpm new file mode 100644 index 0000000..edcaa9f --- /dev/null +++ b/Temperature.app-1.5/pixmaps/main.xpm @@ -0,0 +1,210 @@ +/* XPM */ +static char * main_xpm[] = { +"64 64 143 2", +" c None", +". c #000000", +"+ c #2F2542", +"@ c #302643", +"# c #322745", +"$ c #332846", +"% c #342948", +"& c #352A49", +"* c #362B4B", +"= c #372C4C", +"- c #382D4E", +"; c #392E4F", +"> c #3A2E50", +", c #3B2F52", +"' c #3C3053", +") c #3C3154", +"! c #3D3155", +"~ c #3E3256", +"{ c #3F3357", +"] c #3F3358", +"^ c #403459", +"/ c #41345A", +"( c #41355A", +"_ c #41355B", +": c #42355B", +"< c #42365C", +"[ c #43365D", +"} c #B7BAC7", +"| c #312745", +"1 c #352A4A", +"2 c #372C4D", +"3 c #3A2F51", +"4 c #3B3052", +"5 c #43365C", +"6 c #43375E", +"7 c #44375E", +"8 c #44375F", +"9 c #44385F", +"0 c #45385F", +"a c #322846", +"b c #392E50", +"c c #3B3053", +"d c #453860", +"e c #463961", +"f c #332948", +"g c #3D3154", +"h c #403358", +"i c #463962", +"j c #473A62", +"k c #473A63", +"l c #483A63", +"m c #483A64", +"n c #332947", +"o c #342A49", +"p c #483B64", +"q c #493B65", +"r c #493C65", +"s c #493C66", +"t c #352B4A", +"u c #483B65", +"v c #4A3C66", +"w c #4A3C67", +"x c #4A3D67", +"y c #4B3D67", +"z c #4B3D68", +"A c #362B4C", +"B c #382D4D", +"C c #43375D", +"D c #4B3E69", +"E c #4C3E69", +"F c #4C3E6A", +"G c #4C3F6A", +"H c #392D4F", +"I c #453960", +"J c #4D3F6A", +"K c #4D3F6B", +"L c #4E406C", +"M c #4F406D", +"N c #4F416D", +"O c #4F416E", +"P c #50416E", +"Q c #382C4D", +"R c #4D3F6C", +"S c #4E406D", +"T c #50426F", +"U c #504270", +"V c #514270", +"W c #514371", +"X c #524371", +"Y c #524372", +"Z c #524472", +"` c #534473", +" . c #534574", +".. c #544574", +"+. c #544575", +"@. c #554676", +"#. c #564777", +"$. c #50416F", +"%. c #554675", +"&. c #574778", +"*. c #574879", +"=. c #584879", +"-. c #58497A", +";. c #58497B", +">. c #59497B", +",. c #59497C", +"'. c #3E3257", +"). c #564778", +"!. c #594A7C", +"~. c #5A4A7D", +"{. c #5A4B7D", +"]. c #5B4B7E", +"^. c #5C4C7F", +"/. c #5C4C80", +"(. c #5A4A7C", +"_. c #5D4D81", +":. c #5D4D82", +"<. c #5E4D82", +"[. c #5E4E82", +"}. c #5E4E83", +"|. c #5F4F84", +"1. c #604F85", +"2. c #615086", +"3. c #605086", +"4. c #615187", +"5. c #625188", +"6. c #625288", +"7. c #635289", +"8. c #625187", +"9. c #63528A", +"0. c #64538B", +"a. c #64538A", +"b. c #65548C", +"c. c #66548D", +"d. c #66558D", +"e. c #67558F", +"f. c #67568F", +"g. c #685790", +"h. c #695791", +"i. c #6B5894", +"j. c #2E2440", +"k. c #292039", +"l. c #00FF29", +" ", +" ", +" ", +" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +" . + @ # $ % & * = - ; > , ' ) ! ~ { ] ^ / ( _ : < < [ [ [ [ [ [ [ < < : _ ( / ^ ] { ~ ! ) ' , > ; - = * & % $ # @ } ", +" . @ | $ % 1 * 2 - ; 3 4 ' ! ~ { ] ^ / _ < 5 [ 6 7 7 8 9 0 0 0 9 8 7 7 6 [ 5 < _ / ^ ] { ~ ! ' 4 3 ; - 2 * 1 % $ | } ", +" . | a % & * 2 - b 3 c ) ! ~ ] ^ / : < [ 6 7 0 d d e e e e e e e e e d d 0 7 6 [ < : / ^ ] ~ ! ) c 3 b - 2 * & % a } ", +" . a f & * 2 - b 3 ' g ~ { h ^ _ < [ 7 9 d e e i j k k l m m m l k k j i e e d 9 7 [ < _ ^ h { ~ g ' 3 b - 2 * & f } ", +" . n o * = - b 3 ' g ~ { ^ / : [ 6 8 d e i k l p p q r s s s s s r q p p l k i e d 8 6 [ : / ^ { ~ g ' 3 b - = * o } ", +" . o t = - ; 3 ' g ~ { ^ ( < [ 7 d e i k p u r v w x y z z z z z y x w v r u p k i e d 7 [ < ( ^ { ~ g ' 3 ; - = t } ", +" . 1 A B ; 3 c g ~ { ^ ( < C 8 d e k p q s w y z D E F F G G G F F E D z y w s q p k e d 8 C < ( ^ { ~ g c 3 ; B A } ", +" . * 2 H > 4 ) ~ { ^ ( < 6 9 I i k p s w z D E J K K L L L L L L L K K J E D z w s p k i I 9 6 < ( ^ { ~ ) 4 > H 2 } ", +" . = - b , ' ! { ^ ( < 6 0 e j m q v y D F K K L M N O O P P P O O N M L K K F D y v q m j e 0 6 < ( ^ { ! ' , b - } ", +" . Q ; 3 ' ! ~ h / < C 9 e j p q w z E J R S N P T U V V W W W V V U T P N S R J E z w q p j e 9 C < / h ~ ! ' 3 ; } ", +" . - > 4 ) ~ ] ^ : [ 8 I j p r x z F K L N P T V X Y Z ` ` ` ` ` Z Y X V T P N L K F z x r p j I 8 [ : ^ ] ~ ) 4 > } ", +" . ; 3 ' ! { ^ _ [ 7 d i m q x z F K S O T V X Z ` ...+.+.+.+.+... .` Z X V T O S K F z x q m i d 7 [ _ ^ { ! ' 3 } ", +" . > 4 g ~ ] / < 6 d e k q w z F K M P V X Z ` ..+.@.@.#.#.#.#.#.@.@.+...` Z X V P M K F z w q k e d 6 < / ] ~ g 4 } ", +" . 3 ' ! { ^ : [ 8 e k p v z F K M $.V X ` ..%.@.#.&.*.*.*.=.*.*.*.&.#.@.%...` X V $.M K F z v p k e 8 [ : ^ { ! ' } ", +" . , ) ~ ] / < 7 d i p s y E K S P V Y ` +.@.#.&.*.-.;.>.>.,.>.>.;.-.*.&.#.@.+.` Y V P S K E y s p i d 7 < / ] ~ ) } ", +" . ' ! '.^ _ [ 9 e k q w D J L O V X ` +.@.).*.-.>.!.~.{.].].].{.~.!.>.-.*.).@.+.` X V O L J D w q k e 9 [ _ ^ '.! } ", +" . ' ~ ] / < 6 d i p s z F R N T X ` +.@.).*.;.!.~.].^.^./././.^.^.].~.!.;.*.).@.+.` X T N R F z s p i d 6 < / ] ~ } ", +" . ) ~ h ( 5 7 e k u w D K S P V Z ..@.).*.>.(.].^./._.:.<.[.<.:._./.^.].(.>.*.).@...Z V P S K D w u k e 7 5 ( h ~ } ", +" . ! '.^ _ [ 0 e l r y E K N T X ` %.#.*.;.(.].^._.<.}.|.|.|.|.|.}.<._.^.].(.;.*.#.%.` X T N K E y r l e 0 [ _ ^ '.} ", +" . ! { ^ : 6 d i p v z J L P V Z ..@.&.-.!.].^._.[.|.1.2.2.2.2.2.1.|.[._.^.].!.-.&.@...Z V P L J z v p i d 6 : ^ { } ", +" . ~ ] / < 7 d j p w D K M T X ` +.#.*.>.~.^._.[.|.3.4.5.6.7.6.5.4.3.|.[._.^.~.>.*.#.+.` X T M K D w p j d 7 < / ] } ", +" . ~ ] ( < 7 e k q x E K N U Y .@.&.-.!.]./.<.|.3.8.7.9.0.0.0.9.7.8.3.|.<./.].!.-.&.@. .Y U N K E x q k e 7 < ( ] } ", +" . ~ h ( [ 8 e k r y F L O V Z ..@.*.;.~.^._.}.1.4.7.a.b.c.c.c.b.a.7.4.1.}._.^.~.;.*.@...Z V O L F y r k e 8 [ ( h } ", +" . ~ ^ _ [ 9 e l s z F L O V ` +.#.*.>.{.^.:.|.2.5.9.b.d.e.f.e.d.b.9.5.2.|.:.^.{.>.*.#.+.` V O L F z s l e 9 [ _ ^ } ", +" . ~ ^ _ [ 0 e m s z G L P W ` +.#.*.>.]./.<.|.2.6.0.c.e.g.h.g.e.c.0.6.2.|.<./.].>.*.#.+.` W P L G z s m e 0 [ _ ^ } ", +" . '.^ _ [ 0 e m s z G L P W ` +.#.=.,.]./.[.|.2.7.0.c.f.h.i.h.f.c.0.7.2.|.[./.].,.=.#.+.` W P L G z s m e 0 [ _ ^ } ", +" . ~ ^ _ [ 0 e m s z G L P W ` +.#.*.>.]./.<.|.2.6.0.c.e.g.h.g.e.c.0.6.2.|.<./.].>.*.#.+.` W P L G z s m e 0 [ _ ^ } ", +" . ~ ^ _ [ 9 e l s z F L O V ` +.#.*.>.{.^.:.|.2.5.9.b.d.e.f.e.d.b.9.5.2.|.:.^.{.>.*.#.+.` V O L F z s l e 9 [ _ ^ } ", +" . ~ h ( [ 8 e k r y F L O V Z ..@.*.;.~.^._.}.1.4.7.a.b.c.c.c.b.a.7.4.1.}._.^.~.;.*.@...Z V O L F y r k e 8 [ ( h } ", +" . ~ ] ( < 7 e k q x E K N U Y .@.&.-.!.]./.<.|.3.8.7.9.0.0.0.9.7.8.3.|.<./.].!.-.&.@. .Y U N K E x q k e 7 < ( ] } ", +" . ~ ] / < 7 d j p w D K M T X ` +.#.*.>.~.^._.[.|.3.4.5.6.7.6.5.4.3.|.[._.^.~.>.*.#.+.` X T M K D w p j d 7 < / ] } ", +" . ! { ^ : 6 d i p v z J L P V Z ..@.&.-.!.].^._.[.|.1.2.2.2.2.2.1.|.[._.^.].!.-.&.@...Z V P L J z v p i d 6 : ^ { } ", +" . ! '.^ _ [ 0 e l r y E K N T X ` %.#.*.;.(.].^._.<.}.|.|.|.|.|.}.<._.^.].(.;.*.#.%.` X T N K E y r l e 0 [ _ ^ '.} ", +" . ) ~ h ( 5 7 e k u w D K S P V Z ..@.).*.>.(.].^./._.:.<.[.<.:._./.^.].(.>.*.).@...Z V P S K D w u k e 7 5 ( h ~ } ", +" . ' ~ ] / < 6 d i p s z F R N T X ` +.@.).*.;.!.~.].^.^./././.^.^.].~.!.;.*.).@.+.` X T N R F z s p i d 6 < / ] ~ } ", +" . ' ! '.^ _ [ 9 e k q w D J L O V X ` +.@.).*.-.>.!.~.{.].].].{.~.!.>.-.*.).@.+.` X V O L J D w q k e 9 [ _ ^ '.! } ", +" . , ) ~ ] / < 7 d i p s y E K S P V Y ` +.@.#.&.*.-.;.>.>.,.>.>.;.-.*.&.#.@.+.` Y V P S K E y s p i d 7 < / ] ~ ) } ", +" . 3 ' ! { ^ : [ 8 e k p v z F K M $.V X ` ..%.@.#.&.*.*.*.=.*.*.*.&.#.@.%...` X V $.M K F z v p k e 8 [ : ^ { ! ' } ", +" . > 4 g ~ ] / < 6 d e k q w z F K M P V X Z ` ..+.@.@.#.#.#.#.#.@.@.+...` Z X V P M K F z w q k e d 6 < / ] ~ g 4 } ", +" . ; 3 ' ! { ^ _ [ 7 d i m q x z F K S O T V X Z ` ...+.+.+.+.+... .` Z X V T O S K F z x q m i d 7 [ _ ^ { ! ' 3 } ", +" . - > 4 ) ~ ] ^ : [ 8 I j p r x z F K L N P T V X Y Z ` ` ` ` ` Z Y X V T P N L K F z x r p j I 8 [ : ^ ] ~ ) 4 > } ", +" . Q ; 3 ' ! ~ h / < C 9 e j p q w z E J R S N P T U V V W W W V V U T P N S R J E z w q p j e 9 C < / h ~ ! ' 3 ; } ", +" . = - b , ' ! { ^ ( < 6 0 e j m q v y D F K K L M N O O P P P O O N M L K K F D y v q m j e 0 6 < ( ^ { ! ' , b - } ", +" . * 2 H > 4 ) ~ { ^ ( < 6 9 I i k p s w z D E J K K L L L L L L L K K J E D z w s p k i I 9 6 < ( ^ { ~ ) 4 > H 2 } ", +" . 1 A B ; 3 c g ~ { ^ ( < C 8 d e k p q s w y z D E F F G G G F F E D z y w s q p k e d 8 C < ( ^ { ~ g c 3 ; B A } ", +" . o t = - ; 3 ' g ~ { ^ ( < [ 7 d e i k p u r v w x y z z z z z y x w v r u p k i e d 7 [ < ( ^ { ~ g ' 3 ; - = t } ", +" . n o * = - b 3 ' g ~ { ^ / : [ 6 8 d e i k l p p q r s s s s s r q p p l k i e d 8 6 [ : / ^ { ~ g ' 3 b - = * o } ", +" . a f & * 2 - b 3 ' g ~ { h ^ _ < [ 7 9 d e e i j k k l m m m l k k j i e e d 9 7 [ < _ ^ h { ~ g ' 3 b - 2 * & f } ", +" . | a % & * 2 - b 3 c ) ! ~ ] ^ / : < [ 6 7 0 d d e e e e e e e e e d d 0 7 6 [ < : / ^ ] ~ ! ) c 3 b - 2 * & % a } ", +" . @ | $ % 1 * 2 - ; 3 4 ' ! ~ { ] ^ / _ < 5 [ 6 7 7 8 9 0 0 0 9 8 7 7 6 [ 5 < _ / ^ ] { ~ ! ' 4 3 ; - 2 * 1 % $ | } ", +" . + @ # $ % & * = - ; > , ' ) ! ~ { ] ^ / ( _ : < < [ [ [ [ [ [ [ < < : _ ( / ^ ] { ~ ! ) ' , > ; - = * & % $ # @ } ", +" . j.+ @ # $ % & * = B H b 3 4 ' g ! ~ '.] h ^ ^ / ( ( _ _ _ _ _ ( ( / ^ ^ h ] '.~ ! g ' 4 3 b H B = * & % $ # @ + } ", +" . } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } ", +" . . . . . . . . . . . . . ", +" . . . . . . . . k.k.k.k. ", +" . . . . . . . . . . k.l.l.l. ", +" . . . . . k.l.l.l. ", +" . . . . . . . ", +" ", +" "}; diff --git a/Temperature.app-1.5/pixmaps/redlight.xpm b/Temperature.app-1.5/pixmaps/redlight.xpm new file mode 100644 index 0000000..0e3791b --- /dev/null +++ b/Temperature.app-1.5/pixmaps/redlight.xpm @@ -0,0 +1,7 @@ +/* XPM */ +static char * redlight_xpm[] = { +"3 2 2 1", +" c None", +". c #FF0000", +"...", +"..."}; diff --git a/wmCalClock-1.25/BUGS b/wmCalClock-1.25/BUGS new file mode 100644 index 0000000..32f5c37 --- /dev/null +++ b/wmCalClock-1.25/BUGS @@ -0,0 +1 @@ +Please send bug reports to mghenderson@lanl.gov diff --git a/wmCalClock-1.25/CHANGES b/wmCalClock-1.25/CHANGES new file mode 100644 index 0000000..a225d43 --- /dev/null +++ b/wmCalClock-1.25/CHANGES @@ -0,0 +1,61 @@ +wmCalClock changes. + + Version Description +------------------------------------------------------------------------------------------------ +Version 1.25 - released July 2, 1999. + Some optimization + ignores double click if no command set (patch from + Robert Horn). + + +Version 1.24 - released March 27, 1999. + Added support for additional fonts for time field; + + -tekton for Tekton + -arial for Arial (Helvetica) (this is the same font as usual) + -luggerbug for LuggerBug (part of AcidFonts). + -comicsans for ComicSans + -jazz for JazzPoster + + Different width fonts get used depending on whether or not seconds + are displayed. Still need to add in a few more fonts... Graphite + would be nice! Or EagleFeather (Frank Lloyd Wright inspired font)? + +Version 1.23 - released March 20, 1999. + Switched from wmgeneral.c stuff to xutils.c (a more stripped down version + of wmgeneral). + Centered Calendar text better. + Added command line options and code to change colors of the time + field digits and the background of the time field. So now you can + get things like darkblue on light grey or very dark color on an LCD-ish + colored background (e.g. wmCalClock -bc #6e9e69 -tc #001100).. + Rewrote the command line parsing routine. + +Version 1.22 - released February 24, 1999. + Added double click detection and -e command-line option. + +Version 1.21 - released February 4, 1999. + cosmetic for AfterStep users. removed spurious black line at RHS edge an mask. + +Version 1.2 - released January 14, 1999. + Changed support for LowColor Pixmap. Now, check for Depth + automatically. If its <= 8, then use LowColor. + + +Version 1.11 - released January 8, 1999. + Fixed bug in 12-hour mode. Now displays 12:xx:xx AM instead + of 0:xx:xx AM. + + +Version 1.1 - released January 7, 1999. + Added support for LowColor Pixmap. (21 colors may still be a + bit high, but the poor saps with 8-bit displays can at least run + it now.) + +Version 1.02 - released January 7, 1999. + Fixed bug in AM/PM determination... + +Version 1.01 - released January 3, 1999. + Added "-S" option to inhibit drawing of seconds. + +Version 1.0 - released December 16, 1998. + diff --git a/wmCalClock-1.25/COPYING b/wmCalClock-1.25/COPYING new file mode 100644 index 0000000..a43ea21 --- /dev/null +++ b/wmCalClock-1.25/COPYING @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, 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., 675 Mass Ave, Cambridge, MA 02139, 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. diff --git a/wmCalClock-1.25/HINTS b/wmCalClock-1.25/HINTS new file mode 100644 index 0000000..9dc1386 --- /dev/null +++ b/wmCalClock-1.25/HINTS @@ -0,0 +1,54 @@ +Hints for wmCalClock + +Generic. +-------- +% wmCalClock -h + +wmCalClock version: 1.24 + +usage: wmCalClock [-b ] [-tc ] [-bc ] [-e "Command"] [-S] +[-24] [-g] [-s] [-l ] [-l] [-h] + + -b Beep on the hour. Volume is between -100 to 100. + -tekton Use the Tekton font for time field. + -arial Use the Arail (i.e. Helvetica) font for time field. + -jazz Use the JazzPoster font for time field. + -litterbug Use the Litterbug font for time field. + -comicsans Use the ComicSans font for time field. + -tc Color of the time digits (e.g. red or #ff8800). + -bc Background color. + -e "Command" Command to execute via double click of mouse button 1. + -S Do not show seconds. + -24 Show 24-hour time. Default is 12 hour AM/PM Time. + -g Show Greenwich time. + -s Show Greenwich Mean Sidereal Time (GMST) in 24-hour format. + -L Show Local Sidereal Time (LST) in 24-hour format. + Longitude is in degrees (- for West + for East). + -l Use a low-color pixmap to conserve colors. On 8-bit displays the + low color pixmap will always be used. + -h Display help screen. + +Example: wmCalClock -b 100 -tc #001100 -bc #7e9e69 + + +WindowMaker. +------------ +In WindowMaker simply drag and drop the wmCalClock App on the WindowMaker Dock or Clip. + + +Afterstep. +--------- +Afterstep users put the following in their .steprc "Wharf wmCalClock - MaxSwallow +"wmCalClock" wmCalClock &". Dont use Afterstep so I have no idea if it works... + +Note: AfterStep's Wharf supposedly has a problem with pixmaps that are larger +than 60x60 pixels. Please tell the AfterStep authors to fix this, this is not +our fault, but a Wharf problem! + +Other window managers. +---------------------- +wmCalClock shows as a 64x64 shaped icon on your desktop under other window +managers. + + + diff --git a/wmCalClock-1.25/INSTALL b/wmCalClock-1.25/INSTALL new file mode 100644 index 0000000..8cf3bf6 --- /dev/null +++ b/wmCalClock-1.25/INSTALL @@ -0,0 +1,24 @@ +Installation instructions for wmCalClock. + +Requirements +-------------------------------------------------------------- +wmCalClock requires the Xpm library (which should be available on +most machines with XFree86 installed). + +Installation +-------------------------------------------------------------- +1) gunzip wmCalClock-x.xx.tar.gz +1) tar -xvf wmCalClock-x.xx.tar +2) cd wmCalClock-x.xx/Src/ +3) make +4) make install (must be root) +5) wmCalClock & (or 'wmCalClock -h' for help, or 'man wmCalClock' for the man page) + + +Notes: + +- On FreeBSD, you may need to use gmake. +- On Solaris 2.6, -lsocket is required (use the Solaris-specfic + LIB line in the Makefile instead of the default one for Linux). +- On SGI/IRIX, use gmake (?) or the Makefile.sgi + diff --git a/wmCalClock-1.25/README b/wmCalClock-1.25/README new file mode 100644 index 0000000..f1e6757 --- /dev/null +++ b/wmCalClock-1.25/README @@ -0,0 +1,32 @@ +wmCalClock-1.24 release +----------------------- +Author....: Michael G. Henderson + + +Description +----------- +wmCalClock is a simple Calendar Clock that uses anti-aliased characters and +drop shadows. Doesnt do much except tell time... + + +Files +----- +README This file. +INSTALL Installation instructions. +HINTS Hints about what you can do with wmCalClock. +BUGS Bug reports +CHANGES Change history. +COPYING GNU General Public License Version 2. +TODO Wish list. + + +Bugs +----- +Send bug reports to mghenderson@lanl.gov + + +Copyright +---------- +wmCalClock is copyright (c) 1998, 1999 by Michael G. Henderson and licensed +through the GNU General Public License. Read the COPYING file for the complete +GNU license. diff --git a/wmCalClock-1.25/Src/Makefile b/wmCalClock-1.25/Src/Makefile new file mode 100644 index 0000000..fecc1f9 --- /dev/null +++ b/wmCalClock-1.25/Src/Makefile @@ -0,0 +1,36 @@ +CC = gcc +CFLAGS = -O2 -Wall +INCDIR = -I/usr/X11R6/include/X11 -I/usr/X11R6/include +DESTDIR= /usr/X11R6 +LIBDIR = -L/usr/X11R6/lib + +# for Linux +LIBS = -lXpm -lX11 -lXext + +# for Solaris +# LIBS = -lXpm -lX11 -lXext -lsocket -lnsl + +OBJS = wmCalClock.o \ + xutils.o + + +.c.o: + $(CC) $(CFLAGS) -D$(shell echo `uname -s`) -c $< -o $*.o $(INCDIR) + + +all: wmCalClock.o wmCalClock + +wmCalClock.o: wmCalClock_master.xpm wmCalClock_mask.xbm +wmCalClock: $(OBJS) + $(CC) $(COPTS) $(SYSTEM) -o wmCalClock $^ $(INCDIR) $(LIBDIR) $(LIBS) + +clean: + for i in $(OBJS) ; do \ + rm -f $$i; \ + done + rm -f wmCalClock + +install:: wmCalClock + install -c -s -m 0755 wmCalClock $(DESTDIR)/bin + install -c -m 0644 wmCalClock.1 $(DESTDIR)/man/man1 + diff --git a/wmCalClock-1.25/Src/Makefile.sgi b/wmCalClock-1.25/Src/Makefile.sgi new file mode 100644 index 0000000..bc742cd --- /dev/null +++ b/wmCalClock-1.25/Src/Makefile.sgi @@ -0,0 +1,36 @@ +CC = gcc +CFLAGS = -O2 -Wall +INCDIR = -I/usr/X11R6/include/X11 -I/usr/X11R6/include +DESTDIR= /usr/X11R6 +LIBDIR = -L/usr/X11R6/lib + +# for Linux, IRIX +LIBS = -lXpm -lX11 -lXext + +# for Solaris +# LIBS = -lXpm -lX11 -lXext -lsocket -lnsl + +OBJS = wmCalClock.o \ + xutils.o + + +.c.o: + $(CC) $(CFLAGS) -c $< -o $*.o $(INCDIR) + + +all: wmCalClock.o wmCalClock + +wmCalClock.o: wmCalClock_master.xpm wmCalClock_mask.xbm +wmCalClock: $(OBJS) + $(CC) $(COPTS) $(SYSTEM) -o wmCalClock $(OBJS) $(INCDIR) $(LIBDIR) $(LIBS) + +clean: + for i in $(OBJS) ; do \ + rm -f $$i; \ + done + rm -f wmCalClock + +install:: wmCalClock + install -s -m 0755 wmCalClock $(DESTDIR)/bin + install -c -m 0644 wmCalClock.1 $(DESTDIR)/man/man1 + diff --git a/wmCalClock-1.25/Src/Makefile.solaris b/wmCalClock-1.25/Src/Makefile.solaris new file mode 100644 index 0000000..87219e9 --- /dev/null +++ b/wmCalClock-1.25/Src/Makefile.solaris @@ -0,0 +1,36 @@ +CC = gcc +CFLAGS = -O2 -Wall +INCDIR = -I/usr/X11R6/include/X11 -I/usr/X11R6/include +DESTDIR= /usr/X11R6 +LIBDIR = -L/usr/X11R6/lib + +# for Linux +#LIBS = -lXpm -lX11 -lXext + +# for Solaris +LIBS = -lXpm -lX11 -lXext -lsocket -lnsl + +OBJS = wmCalClock.o \ + xutils.o + + +.c.o: + $(CC) $(CFLAGS) -D$(shell echo `uname -s`) -c $< -o $*.o $(INCDIR) + + +all: wmCalClock.o wmCalClock + +wmCalClock.o: wmCalClock_master.xpm wmCalClock_mask.xbm +wmCalClock: $(OBJS) + $(CC) $(COPTS) $(SYSTEM) -o wmCalClock $^ $(INCDIR) $(LIBDIR) $(LIBS) + +clean: + for i in $(OBJS) ; do \ + rm -f $$i; \ + done + rm -f wmCalClock + +install:: wmCalClock + install -s -m 0755 wmCalClock $(DESTDIR)/bin + install -c -m 0644 wmCalClock.1 $(DESTDIR)/man/man1 + diff --git a/wmCalClock-1.25/Src/wmCalClock.1 b/wmCalClock-1.25/Src/wmCalClock.1 new file mode 100644 index 0000000..a45b476 --- /dev/null +++ b/wmCalClock-1.25/Src/wmCalClock.1 @@ -0,0 +1,65 @@ +.TH WMCALCLOCK 1 "16 December 1998" +.SH NAME +WMCALCLOCK \- Dockable Calendar Clock +.SH SYNOPSIS +.B wmCalClock +[-h] [-display ] [-b ] [-e ] [-24] [-s] [-S] [-L ] [-l] [-tc ] [-bc ] [-tekton] [-comicsans] [-arial] [-luggerbug] [-jazz] +.SH DESCRIPTION +.PP +wmCalClock is a simple Calendar Clock with anti-aliased text and drop-shadows. +.SH OPTIONS +.TP +.B \-h +Display list of command-line options. +.TP +.B \-display [display] +Use an alternate X Display. +.TP +.B \-b +Beep on the hour with specified volume (between -100 and 100). +.TP +.B \-e +Command to execute via double click of mouse button 1. (Use quotes if your command +has white space in it). +.TP +.B \-24 +Show time in 24-hour format instead of default 12-hour AM/PM format. +.TP +.B \-s +Show Greenwich Mean Sidereal Time (GMST) in 24-hour format. +.TP +.B \-S +Dont show seconds. +.TP +.B \-L +Show Local Sidereal Time (LST) in 24-hour format. Longitude is in degrees +(- for West + for East). +.TP +.B \-l +Force use of lower color pixmap to conserve colors. On displays with <= 8 bits, +the low color Pixmap will always be used. +.TP +.B \-tc +Change color of time-field digits. +.TP +.B \-bc +Change color of time-field background. +.TP +.B \-tekton +Use the Tekton font for time field. +.TP +.B \-arial +Use the Arial (i.e. Helvetica) font for time field. +.TP +.B \-jazz +Use the JazzPoster font for time field. +.TP +.B \-luggerbug +Use the LuggerBug font for time field. +.TP +.B \-comicsans +Use the ComicSans font for time field. +.SH BUGS +Who knows? (Let me know if you find any). +.SH AUTHOR +Michael G. Henderson diff --git a/wmCalClock-1.25/Src/wmCalClock.c b/wmCalClock-1.25/Src/wmCalClock.c new file mode 100644 index 0000000..fa9a2f7 --- /dev/null +++ b/wmCalClock-1.25/Src/wmCalClock.c @@ -0,0 +1,1029 @@ +/* + * + * wmCalClock-1.25 (C) 1998, 1999 Mike Henderson (mghenderson@lanl.gov) + * + * - Its a Calendar Clock.... + * + * + * + * + * 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 (see the file COPYING); if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA + * + * + * Changes: + * + * Version 1.25 - released July 2, 1999. + * Some optimization + ignores double click if no command set (patch from + * Robert Horn). + * + * Version 1.24 - released March 27, 1999. + * Added support for additional fonts for time field; + * + * -tekton for Tekton + * -arial for Arial (Helvetica) (this is the same font as usual) + * -luggerbug for LuggerBug + * -comicsans for ComicSans + * -jazz for JazzPoster + * + * Different width fonts get used depending on whether or not seconds + * are displayed. + * + * Version 1.23 - released March 20, 1999. + * Switched from wmgeneral.c stuff to xutils.c (a more stripped down version + * of wmgeneral). + * Centered Calendar text better. + * Added command line options and code to change colors of the time + * field digits and the background of the time field. So now you can + * get things like darkblue on light grey or very dark color on an LCD-ish + * colored background (e.g. wmCalClock -bc #6e9e69 -tc #001100).. + * Rewrote the command line parsing routine. + * + * Version 1.21 - released February 4, 1999. + * cosmetic for AfterStep users. removed spurious black line at RHS edge of mask. + * + * Version 1.20 - released January 14, 1999. + * Changed support for LowColor Pixmap. Now, check for Depth + * automatically. If its <= 8, then use LowColor. + * + * + * Version 1.11 - released January 8, 1999. + * Fixed bug in 12-hour mode. Now displays 12:xx:xx AM instead + * of 0:xx:xx AM. + * + * + * Version 1.10 - released January 7, 1999. + * Added support for LowColor Pixmap. (21 colors may still be a + * bit high, but the poor saps with 8-bit displays can at least run + * it now.) + * + * Version 1.02 - released January 7, 1999. + * Fixed bug in AM/PM determination... + * + * Version 1.01 - released January 3, 1999. + * Added "-S" option to inhibit drawing of seconds. + * + * Version 1.00 - released December 16, 1998. + * + * + */ + + + + + +/* + * Includes + */ +#include +#include +#include +#include +#include +#include +#include +#include "xutils.h" +#include "wmCalClock_master.xpm" +#include "wmCalClock_master_LowColor.xpm" +#include "wmCalClock_mask.xbm" + + + +/* + * Delay between refreshes (in microseconds) + */ +#define DELAY 10000L +#define WMCALCLOCK_VERSION "1.25" + + + + + +void ParseCMDLine(int argc, char *argv[]); +void ButtonPressEvent(XButtonEvent *); +void print_usage(); + + + + +int xsMonth[12] = { 150, 170, 190, 212, 233, 256, 276, 294, 317, 337, 357, 380 }; +int xeMonth[12] = { 168, 188, 210, 231, 254, 275, 292, 314, 335, 355, 377, 398 }; +int xdMonth[12]; +int yMonth = 80; +int ydMonth = 13; + +int xsDayOfWeek[7] = { 293, 150, 177, 201, 228, 253, 271 }; +int xeDayOfWeek[7] = { 314, 175, 199, 226, 250, 269, 290 }; +int xdDayOfWeek[7]; +int yDayOfWeek = 95; +int ydDayOfWeek = 13; + +/* + * I think this is 28??-pixel high adobe-myriad-bold + */ +int xsDayOfMonth[31] = { 118, 161, 205, 248, 291, 335, 378, 421, 465, + 75, 118, 162, 205, 248, 292, 335, 378, 422, 465, + 75, 118, 162, 205, 248, 292, 335, 378, 422, 465, + 75, 118 }; +/* + * I think this is 16-pixel high adobe-myriad-bold? + */ +int xeDayOfMonth[31] = { 147, 193, 236, 282, 324, 368, 411, 454, 498, + 107, 146, 192, 235, 281, 323, 367, 410, 453, 497, + 108, 147, 193, 236, 282, 324, 368, 411, 454, 498, + 108, 147 }; +int xeDayOfMonth2[31] = { 144, 190, 234, 278, 320, 365, 407, 451, 494, + 103, 143, 189, 233, 277, 319, 364, 406, 450, 493, + 104, 144, 190, 234, 278, 320, 365, 407, 451, 494, + 104, 144 }; + +/* + * I think this is 16-pixel high adobe-myriad-bold? + */ +int yDayOfMonth[31] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, + 80, 80 }; +int xdDayOfMonth[31]; +int xdDayOfMonth2[31]; +int ydDayOfMonth = 23; + + + + +/* + * Luggerbug Font Narrow - 13 pixels high. + */ +int xsDigits_Luggerbug13n[11] = { 75, 84, 92, 101, 110, 119, 127, 136, 143, 151, 159 }; +int xeDigits_Luggerbug13n[11] = { 80, 89, 97, 106, 115, 123, 132, 139, 147, 156, 159 }; +int xdDigits_Luggerbug13n[11]; +int yDigits_Luggerbug13n = 150; +int ydDigits_Luggerbug13n = 13; + +/* + * Luggerbug Font - 13 pixels high. + */ +int xsDigits_Luggerbug13[11] = { 75, 89, 103, 117, 131, 146, 159, 172, 184, 197, 208 }; +int xeDigits_Luggerbug13[11] = { 83, 97, 110, 125, 139, 153, 166, 178, 191, 205, 209 }; +int xdDigits_Luggerbug13[11]; +int yDigits_Luggerbug13 = 136; +int ydDigits_Luggerbug13 = 13; + +/* + * ComicSans Font - 12 pixels high. + */ +int xsDigits_ComicSans12n[11] = { 338, 349, 359, 370, 380, 390, 401, 411, 422, 432, 444 }; +int xeDigits_ComicSans12n[11] = { 343, 353, 364, 374, 385, 396, 406, 417, 427, 438, 445 }; +int xdDigits_ComicSans12n[11]; +int yDigits_ComicSans12n = 123; +int ydDigits_ComicSans12n = 12; + +/* + * ComicSans Font - 11 pixels high. + */ +int xsDigits_ComicSans11[11] = { 338, 353, 366, 380, 392, 407, 420, 434, 448, 461, 471 }; +int xeDigits_ComicSans11[11] = { 345, 357, 372, 386, 400, 413, 427, 441, 454, 468, 473 }; +int xdDigits_ComicSans11[11]; +int yDigits_ComicSans11 = 111; +int ydDigits_ComicSans11 = 11; + +/* + * JazzPoster Font Narrow - 12 pixels high. + */ +int xsDigits_JazzPoster12n[11] = { 211, 220, 226, 233, 241, 249, 256, 263, 271, 278, 286 }; +int xeDigits_JazzPoster12n[11] = { 217, 223, 231, 238, 247, 253, 261, 268, 276, 284, 286 }; +int xdDigits_JazzPoster12n[11]; +int yDigits_JazzPoster12n = 122; +int ydDigits_JazzPoster12n = 12; + +/* + * JazzPoster Font - 12 pixels high. + */ +int xsDigits_JazzPoster12[11] = { 211, 225, 234, 246, 258, 271, 282, 293, 305, 317, 328 }; +int xeDigits_JazzPoster12[11] = { 221, 230, 243, 254, 268, 278, 290, 301, 314, 325, 329 }; +int xdDigits_JazzPoster12[11]; +int yDigits_JazzPoster12 = 109; +int ydDigits_JazzPoster12 = 12; + + +/* + * Tekton Font - 12 pixels high Narrow (13 pixels high actually). + */ +int xsDigits_Tekton12n[11] = { 75, 84, 90, 97, 105, 114, 122, 131, 138, 147, 156 }; +int xeDigits_Tekton12n[11] = { 81, 86, 94, 103, 111, 119, 128, 135, 144, 152, 157 }; +int xdDigits_Tekton12n[11]; +int yDigits_Tekton12n = 122; +int ydDigits_Tekton12n = 13; + +/* + * Tekton Font - 12 pixels high. + */ +int xsDigits_Tekton12[11] = { 75, 89, 98, 111, 124, 137, 150, 164, 176, 191, 205 }; +int xeDigits_Tekton12[11] = { 84, 92, 105, 119, 132, 145, 159, 171, 185, 199, 206 }; +int xdDigits_Tekton12[11]; +int yDigits_Tekton12 = 108; +int ydDigits_Tekton12 = 12; + +/* + * Monotype-arial-bold-narrow - 10 pixels high. + */ +int xsDigits_Arial10[11] = { 320, 326, 333, 339, 346, 352, 358, 364, 371, 377, 384 }; +int xeDigits_Arial10[11] = { 325, 331, 338, 344, 351, 357, 363, 369, 376, 382, 385 }; +int xdDigits_Arial10[11]; +int yDigits_Arial10 = 95; +int ydDigits_Arial10 = 10; + + +int xsDigits[11]; +int xeDigits[11]; +int xdDigits[11]; +int yDigits; +int ydDigits; + + +int xsAMPM[2] = { 390, 396 }; +int xeAMPM[2] = { 394, 400 }; +int xdAMPM[2]; +int yAMPM = 95; +int ydAMPM = 6; +int Show24HourTime = 0; +int ShowGreenwichTime = 0; +int ShowSiderealTime = 0; +double Longitude; +int Flag = 0; +int Beep = 0; +int Volume = 100; +int ShowSeconds = 1; +int UseLowColorPixmap = 0; +int UseArial = 0; +int UseComicSans = 0; +int UseTekton = 0; +int UseLuggerbug = 0; +int UseJazzPoster = 0; +int GotFirstClick1, GotDoubleClick1; +int GotFirstClick2, GotDoubleClick2; +int GotFirstClick3, GotDoubleClick3; +int DblClkDelay; +int HasExecute = 0; /* controls perf optimization */ +char ExecuteCommand[1024]; + + +char TimeColor[30] = "#ffff00"; +char BackgroundColor[30] = "#181818"; + + + + + + +/* + * main + */ +int main(int argc, char *argv[]) { + + + struct tm *Time; + XEvent event; + int i, n, wid, extrady, extradx; + int Year, Month, DayOfWeek, DayOfMonth, OldDayOfMonth; + int Hours, Mins, Secs, OldSecs, digit, xoff, D[10], xsize; + long CurrentLocalTime; + double UT, TU, TU2, TU3, T0, gmst, jd(), hour24(); + + + /* + * Parse any command line arguments. + */ + ParseCMDLine(argc, argv); + + + + + + + /* + * Set the font + */ + if (UseTekton && !ShowSeconds){ + + for (i=0; i<11; ++i) xsDigits[i] = xsDigits_Tekton12[i]; + for (i=0; i<11; ++i) xeDigits[i] = xeDigits_Tekton12[i]; + for (i=0; i<11; ++i) xdDigits[i] = xdDigits_Tekton12[i]; + yDigits = yDigits_Tekton12; + ydDigits = ydDigits_Tekton12; + extrady = -1; + extradx = 0; + + } else if (UseTekton && ShowSeconds){ + + for (i=0; i<11; ++i) xsDigits[i] = xsDigits_Tekton12n[i]; + for (i=0; i<11; ++i) xeDigits[i] = xeDigits_Tekton12n[i]; + for (i=0; i<11; ++i) xdDigits[i] = xdDigits_Tekton12n[i]; + yDigits = yDigits_Tekton12n; + ydDigits = ydDigits_Tekton12n; + extrady = -2; + extradx = 1; + + } else if (UseLuggerbug && !ShowSeconds){ + + for (i=0; i<11; ++i) xsDigits[i] = xsDigits_Luggerbug13[i]; + for (i=0; i<11; ++i) xeDigits[i] = xeDigits_Luggerbug13[i]; + for (i=0; i<11; ++i) xdDigits[i] = xdDigits_Luggerbug13[i]; + yDigits = yDigits_Luggerbug13; + ydDigits = ydDigits_Luggerbug13; + extrady = -2; + extradx = 1; + + } else if (UseLuggerbug && ShowSeconds){ + + for (i=0; i<11; ++i) xsDigits[i] = xsDigits_Luggerbug13n[i]; + for (i=0; i<11; ++i) xeDigits[i] = xeDigits_Luggerbug13n[i]; + for (i=0; i<11; ++i) xdDigits[i] = xdDigits_Luggerbug13n[i]; + yDigits = yDigits_Luggerbug13n; + ydDigits = ydDigits_Luggerbug13n; + extrady = -2; + extradx = 1; + + } else if (UseComicSans && !ShowSeconds){ + + for (i=0; i<11; ++i) xsDigits[i] = xsDigits_ComicSans11[i]; + for (i=0; i<11; ++i) xeDigits[i] = xeDigits_ComicSans11[i]; + for (i=0; i<11; ++i) xdDigits[i] = xdDigits_ComicSans11[i]; + yDigits = yDigits_ComicSans11; + ydDigits = ydDigits_ComicSans11; + extrady = -1; + extradx = 1; + + } else if (UseComicSans && ShowSeconds){ + + for (i=0; i<11; ++i) xsDigits[i] = xsDigits_ComicSans12n[i]; + for (i=0; i<11; ++i) xeDigits[i] = xeDigits_ComicSans12n[i]; + for (i=0; i<11; ++i) xdDigits[i] = xdDigits_ComicSans12n[i]; + yDigits = yDigits_ComicSans12n; + ydDigits = ydDigits_ComicSans12n; + extrady = -1; + extradx = 1; + + } else if (UseJazzPoster && !ShowSeconds){ + + for (i=0; i<11; ++i) xsDigits[i] = xsDigits_JazzPoster12[i]; + for (i=0; i<11; ++i) xeDigits[i] = xeDigits_JazzPoster12[i]; + for (i=0; i<11; ++i) xdDigits[i] = xdDigits_JazzPoster12[i]; + yDigits = yDigits_JazzPoster12; + ydDigits = ydDigits_JazzPoster12; + extrady = -1; + extradx = 0; + + } else if (UseJazzPoster && ShowSeconds){ + + for (i=0; i<11; ++i) xsDigits[i] = xsDigits_JazzPoster12n[i]; + for (i=0; i<11; ++i) xeDigits[i] = xeDigits_JazzPoster12n[i]; + for (i=0; i<11; ++i) xdDigits[i] = xdDigits_JazzPoster12n[i]; + yDigits = yDigits_JazzPoster12n; + ydDigits = ydDigits_JazzPoster12n; + extrady = -1; + extradx = 1; + + } else { + + for (i=0; i<11; ++i) xsDigits[i] = xsDigits_Arial10[i]; + for (i=0; i<11; ++i) xeDigits[i] = xeDigits_Arial10[i]; + for (i=0; i<11; ++i) xdDigits[i] = xdDigits_Arial10[i]; + yDigits = yDigits_Arial10; + ydDigits = ydDigits_Arial10; + extrady = 0; + extradx = 0; + + } + + + /* + * Compute widths of digits etc... + * Should hand-encode for efficiency, but its easier to do this for development... + */ + for (i=0; i<12; ++i) xdMonth[i] = xeMonth[i] - xsMonth[i] + 1; + for (i=0; i<7; ++i) xdDayOfWeek[i] = xeDayOfWeek[i] - xsDayOfWeek[i] + 1; + for (i=0; i<31; ++i) xdDayOfMonth[i] = xeDayOfMonth[i] - xsDayOfMonth[i] + 1; + for (i=0; i<31; ++i) xdDayOfMonth2[i] = xeDayOfMonth2[i] - xsDayOfMonth[i] + 1; + for (i=0; i<11; ++i) xdDigits[i] = xeDigits[i] - xsDigits[i] + 1; + for (i=0; i<2; ++i) xdAMPM[i] = xeAMPM[i] - xsAMPM[i] + 1; + + + + + + + + + + initXwindow(argc, argv); + if (DisplayDepth <= 8) UseLowColorPixmap = 1; + + if (UseLowColorPixmap) + openXwindow(argc, argv, wmCalClock_master_LowColor, wmCalClock_mask_bits, wmCalClock_mask_width, wmCalClock_mask_height); + else + openXwindow(argc, argv, wmCalClock_master, wmCalClock_mask_bits, wmCalClock_mask_width, wmCalClock_mask_height); + + + + + + + /* + * Loop until we die + */ + n = 32000; + OldDayOfMonth = -1; + OldSecs = -1; + while(1) { + + + /* + * Only process every 10th cycle of this loop. We run it faster + * to catch expose events, etc... + * + */ + if ( HasExecute == 0 || n>10){ + + n = 0; + + if (ShowGreenwichTime){ + + CurrentLocalTime = time(CurrentTime); + Time = gmtime(&CurrentLocalTime); + DayOfMonth = Time->tm_mday-1; + DayOfWeek = Time->tm_wday; + Month = Time->tm_mon; + Hours = Time->tm_hour; + Mins = Time->tm_min; + Secs = Time->tm_sec; + + } else if (ShowSiderealTime){ + + Show24HourTime = 1; + CurrentLocalTime = time(CurrentTime); + Time = gmtime(&CurrentLocalTime); + DayOfMonth = Time->tm_mday-1; + DayOfWeek = Time->tm_wday; + Year = Time->tm_year + 1900; /* this is NOT a Y2K bug */ + Month = Time->tm_mon; + Hours = Time->tm_hour; + Mins = Time->tm_min; + Secs = Time->tm_sec; + UT = (double)Hours + (double)Mins/60.0 + (double)Secs/3600.0; + + /* + * Compute Greenwich Mean Sidereal Time (gmst) + * The TU here is number of Julian centuries + * since 2000 January 1.5 + * From the 1996 astronomical almanac + */ + TU = (jd(Year, Month+1, DayOfMonth+1, 0.0) - 2451545.0)/36525.0; + TU2 = TU*TU; + TU3 = TU2*TU; + T0 = (6.0 + 41.0/60.0 + 50.54841/3600.0) + 8640184.812866/3600.0*TU + + 0.093104/3600.0*TU2 - 6.2e-6/3600.0*TU3; + gmst = hour24(hour24(T0) + UT*1.002737909 + Longitude/15.0); + Hours = (int)gmst; + gmst = (gmst - (double)Hours)*60.0; + Mins = (int)gmst; + gmst = (gmst - (double)Mins)*60.0; + Secs = (int)gmst; + + } else { + + CurrentLocalTime = time(CurrentTime); + Time = localtime(&CurrentLocalTime); + DayOfMonth = Time->tm_mday-1; + DayOfWeek = Time->tm_wday; + Month = Time->tm_mon; + Hours = Time->tm_hour; + Mins = Time->tm_min; + Secs = Time->tm_sec; + + } + + /* + * Flag indicates AM (Flag=0) or PM (Flag=1) + */ + if (!Show24HourTime){ + Flag = (Hours >= 12) ? 1 : 0; + if (Hours == 0) + Hours = 12; + else + Hours = (Hours > 12) ? Hours-12 : Hours; + } + + + + + /* + * Blank the HH:MM section.... + */ + xsize = 0; + /* dont show leading zeros */ + if ((digit = Hours / 10) > 0){ + D[0] = digit, xsize += (xdDigits[digit]+1); + } else{ + D[0] = -1; + } + digit = Hours % 10, D[1] = digit, xsize += (xdDigits[digit]+1); + digit = 10, D[2] = digit, xsize += (xdDigits[digit]+1); + digit = Mins / 10, D[3] = digit, xsize += (xdDigits[digit]+1); + digit = Mins % 10, D[4] = digit, xsize += (xdDigits[digit]+1); + if (ShowSeconds){ + digit = 10, D[5] = digit, xsize += (xdDigits[digit]+1); + digit = Secs / 10, D[6] = digit, xsize += (xdDigits[digit]+1); + digit = Secs % 10, D[7] = digit, xsize += (xdDigits[digit]); + } + xoff = ((Hours>9)&&(!Show24HourTime)&&(ShowSeconds)) ? 28 - xsize/2 : 31 - xsize/2; + copyXPMArea(5, 110, 54, 15, 5, 5); + + + /* + * Draw Hours + */ + + /* dont show leading zeros */ + if (D[0] > -1){ + digit = D[0]; + copyXPMArea(xsDigits[digit], yDigits, xdDigits[digit], ydDigits, xoff+extradx, 7+extrady); + xoff += (xdDigits[digit]+1); + } + + digit = D[1]; + copyXPMArea(xsDigits[digit], yDigits, xdDigits[digit], ydDigits, xoff+extradx, 7+extrady); + xoff += (xdDigits[digit]+1); + + /* + * Draw Colon + */ + digit = 10; + copyXPMArea(xsDigits[digit], yDigits, xdDigits[digit], ydDigits, xoff+extradx, 7+extrady); + xoff += (xdDigits[digit]+1); + + /* + * Draw Minutes + */ + digit = D[3]; + copyXPMArea(xsDigits[digit], yDigits, xdDigits[digit], ydDigits, xoff+extradx, 7+extrady); + xoff += (xdDigits[digit]+1); + + digit = D[4]; + copyXPMArea(xsDigits[digit], yDigits, xdDigits[digit], ydDigits, xoff+extradx, 7+extrady); + xoff += (xdDigits[digit]+1); + + if (ShowSeconds){ + + /* + * Draw Colon + */ + digit = 10; + copyXPMArea(xsDigits[digit], yDigits, xdDigits[digit], ydDigits, xoff+extradx, 7+extrady); + xoff += (xdDigits[digit]+1); + + /* + * Draw Seconds + */ + digit = D[6]; + copyXPMArea(xsDigits[digit], yDigits, xdDigits[digit], ydDigits, xoff+extradx, 7+extrady); + xoff += (xdDigits[digit]+1); + + digit = D[7]; + copyXPMArea(xsDigits[digit], yDigits, xdDigits[digit], ydDigits, xoff+extradx, 7+extrady); + xoff += (xdDigits[digit]+3); + + } + + + /* + * Draw AM/PM indicator if we are using 12 Hour Clock. + * Dont show it if we are using 24 Hour Clock. + */ + if (!Show24HourTime) + copyXPMArea(xsAMPM[Flag], yAMPM, xdAMPM[Flag], ydAMPM, 54, 5); + + + + + + /* + * Beep on the hour + */ + if (Beep){ + if ((Mins == 0)&&(Secs == 0)&&(OldSecs != Secs)) XBell(display, Volume); + OldSecs = Secs; + + } + + + + + + + if (OldDayOfMonth != DayOfMonth){ + + + /* + * Blank the Calendar section.... + */ + copyXPMArea(5, 70, 54, 35, 5, 24); + + + /* + * Draw Day of Week and Month + */ + wid = xdDayOfWeek[DayOfWeek] + xdMonth[Month] + 1; + copyXPMArea(xsDayOfWeek[DayOfWeek], yDayOfWeek, xdDayOfWeek[DayOfWeek], + ydMonth, 33-wid/2, 64-24-4-12); + copyXPMArea(xsMonth[Month], yMonth, xdMonth[Month], + ydMonth, 33-wid/2+xdDayOfWeek[DayOfWeek]+1, 64-24-4-12); + + + + /* + * Draw Day of Month + */ + copyXPMArea(xsDayOfMonth[DayOfMonth], yDayOfMonth[DayOfMonth], xdDayOfMonth[DayOfMonth], ydDayOfMonth, 32-xdDayOfMonth2[DayOfMonth]/2, 36); + + + } + + + OldDayOfMonth = DayOfMonth; + + + + + } else { + + /* + * Update the counter. + */ + ++n; + + } + + + + + + /* + * Double Click Delays + * Keep track of click events. If Delay too long, set GotFirstClick's to False. + */ + if (DblClkDelay > 15) { + + DblClkDelay = 0; + GotFirstClick1 = 0; GotDoubleClick1 = 0; + GotFirstClick2 = 0; GotDoubleClick2 = 0; + GotFirstClick3 = 0; GotDoubleClick3 = 0; + + } else { + + ++DblClkDelay; + + } + + + + + /* + * Process any pending X events. + */ + while(XPending(display)){ + XNextEvent(display, &event); + switch(event.type){ + case Expose: + RedrawWindow(); + break; + case ButtonPress: + ButtonPressEvent(&event.xbutton); + break; + case ButtonRelease: + break; + } + } + + + + + + + /* + * Redraw and wait for next update + */ + RedrawWindow(); + if( HasExecute == 1) { + usleep(DELAY); + } else if( ShowSeconds == 1) { + usleep( 200000L); + } else { + usleep( 500000L); + } + + + } + + + +} + + + + + + + + +/* + * ParseCMDLine() + */ +void ParseCMDLine(int argc, char *argv[]) { + +int i; + + for (i = 1; i < argc; i++) { + + if (!strcmp(argv[i], "-display")){ + + ++i; + + } else if (!strcmp(argv[i], "-jazz")){ + + UseJazzPoster = 1; + + } else if (!strcmp(argv[i], "-arial")){ + + UseArial = 1; + + } else if (!strcmp(argv[i], "-tekton")){ + + UseTekton = 1; + + } else if (!strcmp(argv[i], "-luggerbug")){ + + UseLuggerbug = 1; + + } else if (!strcmp(argv[i], "-comicsans")){ + + UseComicSans = 1; + + } else if (!strcmp(argv[i], "-tc")){ + + if ((i+1 >= argc)||(argv[i+1][0] == '-')) { + fprintf(stderr, "wmCalClock: No color found\n"); + print_usage(); + exit(-1); + } + strcpy(TimeColor, argv[++i]); + + } else if (!strcmp(argv[i], "-bc")){ + + if ((i+1 >= argc)||(argv[i+1][0] == '-')) { + fprintf(stderr, "wmCalClock: No color found\n"); + print_usage(); + exit(-1); + } + strcpy(BackgroundColor, argv[++i]); + + } else if (!strcmp(argv[i], "-24")){ + + Show24HourTime = 1; + + } else if (!strcmp(argv[i], "-b")){ + + if ((i+1 >= argc)||(argv[i+1][0] == '-')) { + fprintf(stderr, "wmCalClock: No volume given\n"); + print_usage(); + exit(-1); + } + Beep = 1; + Volume = atoi(argv[++i]); + + } else if (!strcmp(argv[i], "-e")){ + + if ((i+1 >= argc)||(argv[i+1][0] == '-')) { + fprintf(stderr, "wmCalClock: No command given\n"); + print_usage(); + exit(-1); + } + strcpy(ExecuteCommand, argv[++i]); + HasExecute = 1; + + } else if (!strcmp(argv[i], "-g")){ + + ShowGreenwichTime = 1; + + } else if (!strcmp(argv[i], "-S")){ + + ShowSeconds = 0; + + } else if (!strcmp(argv[i], "-s")){ + + ShowSiderealTime = 1; + Longitude = 0.0; + + } else if (!strcmp(argv[i], "-L")){ + + if ((i+1 >= argc)||(argv[i+1][0] == '-')) { + fprintf(stderr, "wmCalClock: No longitude given\n"); + print_usage(); + exit(-1); + } + ShowSiderealTime = 1; + Longitude = atof(argv[++i]); + + } else if (!strcmp(argv[i], "-l")){ + + UseLowColorPixmap = 1; + + } else { + + print_usage(); + exit(1); + } + + } + + if (!ShowSeconds && !UseArial && !UseJazzPoster + && !UseComicSans && !UseLuggerbug) UseTekton = 1; + + + +} + + +void print_usage(){ + + printf("\nwmCalClock version: %s\n", WMCALCLOCK_VERSION); + printf("\nusage: wmCalClock [-b ] [-tc ] [-bc ] [-e \"Command\"] [-S]\n"); + printf(" [-24] [-g] [-s] [-l ] [-l] [-jazz] [-tekton] [-luggerbug]\n"); + printf(" [-arial] [-comicsans] [-h]\n\n"); + printf("\t-b \tBeep on the hour. Volume is between -100 to 100.\n"); + printf("\t-tekton\t\tUse the Tekton font for time field.\n"); + printf("\t-arial\t\tUse the Arial-Narrow (i.e. Helvetica-Narrow) font for time field.\n"); + printf("\t-jazz\t\tUse the JazzPoster font for time field.\n"); + printf("\t-luggerbug\tUse the Luggerbug font for time field.\n"); + printf("\t-comicsans\tUse the ComicSans font for time field.\n"); + printf("\t-tc \tColor of the time digits (e.g. red or #ff8800).\n"); + printf("\t-bc \tBackground color.\n"); + printf("\t-e \"Command\"\tCommand to execute via double click of mouse button 1.\n"); + printf("\t-S\t\tDo not show seconds.\n"); + printf("\t-24\t\tShow 24-hour time. Default is 12 hour AM/PM Time.\n"); + printf("\t-g\t\tShow Greenwich time.\n"); + printf("\t-s\t\tShow Greenwich Mean Sidereal Time (GMST) in 24-hour format. \n"); + printf("\t-L \tShow Local Sidereal Time (LST) in 24-hour format. \n"); + printf("\t \t\tLongitude is in degrees (- for West + for East).\n"); + printf("\t-l\t\tUse a low-color pixmap to conserve colors. On 8-bit displays the\n"); + printf("\t \t\tlow color pixmap will always be used.\n"); + printf("\t-h\t\tDisplay help screen.\n"); + printf("\nExample: wmCalClock -b 100 -tc #001100 -bc #7e9e69 \n\n"); + +} + + + + + + +/* + * Compute the Julian Day number for the given date. + * Julian Date is the number of days since noon of Jan 1 4713 B.C. + */ +double jd(ny, nm, nd, UT) +int ny, nm, nd; +double UT; +{ + double A, B, C, D, JD, day; + + day = nd + UT/24.0; + + + if ((nm == 1) || (nm == 2)){ + ny = ny - 1; + nm = nm + 12; + } + + if (((double)ny+nm/12.0+day/365.25)>=(1582.0+10.0/12.0+15.0/365.25)){ + A = ((int)(ny / 100.0)); + B = 2.0 - A + (int)(A/4.0); + } + else{ + B = 0.0; + } + + if (ny < 0.0){ + C = (int)((365.25*(double)ny) - 0.75); + } + else{ + C = (int)(365.25*(double)ny); + } + + D = (int)(30.6001*(double)(nm+1)); + + + JD = B + C + D + day + 1720994.5; + return(JD); + +} + +double hour24(hour) +double hour; +{ + int n; + + if (hour < 0.0){ + n = (int)(hour/24.0) - 1; + return(hour-n*24.0); + } + else if (hour > 24.0){ + n = (int)(hour/24.0); + return(hour-n*24.0); + } + else{ + return(hour); + } +} + + + + + + + +/* + * This routine handles button presses. + * + * Double click on + * Mouse Button 1: Execute the command defined in the -e command-line option. + * Mouse Button 2: No action assigned. + * Mouse Button 3: No action assigned. + * + * + */ +void ButtonPressEvent(XButtonEvent *xev){ + + char Command[512]; + + + if( HasExecute == 0) return; /* no command specified. Ignore clicks. */ + DblClkDelay = 0; + if ((xev->button == Button1) && (xev->type == ButtonPress)){ + if (GotFirstClick1) GotDoubleClick1 = 1; + else GotFirstClick1 = 1; + } else if ((xev->button == Button2) && (xev->type == ButtonPress)){ + if (GotFirstClick2) GotDoubleClick2 = 1; + else GotFirstClick2 = 1; + } else if ((xev->button == Button3) && (xev->type == ButtonPress)){ + if (GotFirstClick3) GotDoubleClick3 = 1; + else GotFirstClick3 = 1; + } + + + /* + * We got a double click on Mouse Button1 (i.e. the left one) + */ + if (GotDoubleClick1) { + GotFirstClick1 = 0; + GotDoubleClick1 = 0; + sprintf(Command, "%s &", ExecuteCommand); + system(Command); + } + + + /* + * We got a double click on Mouse Button2 (i.e. the left one) + */ + if (GotDoubleClick2) { + GotFirstClick2 = 0; + GotDoubleClick2 = 0; + } + + + /* + * We got a double click on Mouse Button3 (i.e. the left one) + */ + if (GotDoubleClick3) { + GotFirstClick3 = 0; + GotDoubleClick3 = 0; + } + + + + return; + +} + diff --git a/wmCalClock-1.25/Src/wmCalClock_mask.xbm b/wmCalClock-1.25/Src/wmCalClock_mask.xbm new file mode 100644 index 0000000..f7102fb --- /dev/null +++ b/wmCalClock-1.25/Src/wmCalClock_mask.xbm @@ -0,0 +1,38 @@ +#define wmCalClock_mask_width 64 +#define wmCalClock_mask_height 64 +static char wmCalClock_mask_bits[] = { + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff, + 0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff, + 0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff, + 0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff, + 0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0, + 0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f, + 0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff, + 0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff, + 0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff, + 0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff, + 0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff, + 0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0, + 0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f, + 0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff, + 0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff, + 0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff, + 0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff, + 0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff, + 0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff, + 0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0, + 0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f, + 0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff, + 0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff, + 0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff, + 0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff, + 0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff, + 0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff, + 0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0, + 0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00}; diff --git a/wmCalClock-1.25/Src/wmCalClock_master.xpm b/wmCalClock-1.25/Src/wmCalClock_master.xpm new file mode 100644 index 0000000..c5e7fee --- /dev/null +++ b/wmCalClock-1.25/Src/wmCalClock_master.xpm @@ -0,0 +1,347 @@ +/* XPM */ +static char *wmCalClock_master[] = { +/* width height num_colors chars_per_pixel */ +" 499 165 175 2", +/* colors */ +".. c #000000", +".# c #020204", +".a c #0e0e0c", +".b c #0e0e14", +".c c #0e1214", +".d c #1c0000", +".e c #121214", +".f c #121614", +".g c #161614", +".h c #16161c", +".i c #161a1c", +".j c #181818 s Back", +".k c #1e1e24", +".l c #1e2224", +".m c #380000", +".n c #313115 s Color1", +".o c #222224", +".p c #222624", +".q c #262624", +".r c #26262c", +".s c #262a2c", +".t c #2a2a2c", +".u c #2a2e2c", +".v c #2e2e2c", +".w c #2e2e34", +".x c #282c38", +".y c #2e3234", +".z c #283038", +".A c #323234", +".B c #323634", +".C c #32363c", +".D c #36363c", +".E c #363a3c", +".F c #3a3a3c", +".G c #3a3e3c", +".H c #303040", +".I c #303440", +".J c #303840", +".K c #3a3e44", +".L c #3e3e44", +".M c #383848", +".N c #383c48", +".O c #3e4244", +".P c #384048", +".Q c #550000", +".R c #710000", +".S c #4a4a12 s Color2", +".T c #656510 s Color3", +".U c #7e7e0d s Color4", +".V c #424244", +".W c #424644", +".X c #404048", +".Y c #42464c", +".Z c #46464c", +".0 c #464a4c", +".1 c #4a4a4c", +".2 c #4a4e4c", +".3 c #404050", +".4 c #404450", +".5 c #404850", +".6 c #484850", +".7 c #4a4e54", +".8 c #4e4e54", +".9 c #484858", +"#. c #484c58", +"## c #4e5254", +"#a c #485058", +"#b c #525254", +"#c c #52565c", +"#d c #56565c", +"#e c #565a5c", +"#f c #5a5e5c", +"#g c #505060", +"#h c #505460", +"#i c #5a5e64", +"#j c #5e5e64", +"#k c #5e6264", +"#l c #62626c", +"#m c #62666c", +"#n c #666a6c", +"#o c #666a74", +"#p c #6a6e74", +"#q c #6a7274", +"#r c #6e7274", +"#s c #6e727c", +"#t c #6e767c", +"#u c #72767c", +"#v c #727a7c", +"#w c #767a7c", +"#x c #767a84", +"#y c #767e84", +"#z c #7a7e84", +"#A c #7a8284", +"#B c #7e8284", +"#C c #7e828c", +"#D c #7e868c", +"#E c #8d0000", +"#F c #aa0000", +"#G c #c60000", +"#H c #e20000", +"#I c #ff0000", +"#J c #97970a s Color5", +"#K c #b2b208 s Color6", +"#L c #cbcb05 s Color7", +"#M c #e4e402 s Color8", +"#N c #ffff00 s Color9", +"#O c #82868c", +"#P c #828a8c", +"#Q c #868a8c", +"#R c #868a94", +"#S c #868e94", +"#T c #8a8e94", +"#U c #8a9294", +"#V c #8a929c", +"#W c #8e929c", +"#X c #8e969c", +"#Y c #92969c", +"#Z c #929a9c", +"#0 c #929aa4", +"#1 c #969aa4", +"#2 c #969ea4", +"#3 c #9a9ea4", +"#4 c #9aa2a4", +"#5 c #98a0a8", +"#6 c #9aa2ac", +"#7 c #9ea2ac", +"#8 c #9ea6ac", +"#9 c #a2a6ac", +"a. c #a2aaac", +"a# c #a0a4b0", +"aa c #a2aab4", +"ab c #a6aab4", +"ac c #a6aeb4", +"ad c #aaaeb4", +"ae c #aab2bc", +"af c #aeb2bc", +"ag c #aeb6bc", +"ah c #b2b6bc", +"ai c #b2b6c4", +"aj c #b2bac4", +"ak c #b6bac4", +"al c #b6bec4", +"am c #babecc", +"an c #bac2cc", +"ao c #bec2cc", +"ap c #bec6cc", +"aq c #bec6d4", +"ar c #c2cad4", +"as c #c6cad4", +"at c #c6ced4", +"au c #c6cedc", +"av c #c8ccd8", +"aw c #cacedc", +"ax c #c8d0d8", +"ay c #cad2dc", +"az c #ced6dc", +"aA c #d0d0d0", +"aB c #d0d0d8", +"aC c #ced6e4", +"aD c #d0d0e0", +"aE c #d0d4e0", +"aF c #d0d8e0", +"aG c #d2dae4", +"aH c #d8d8e0", +"aI c #d8d8e8", +"aJ c #d8dce8", +"aK c #d8e0e8", +"aL c #e0e0f0", +"aM c #e0e4f0", +"aN c #e0e8f0", +"aO c #e8e8f8", +"aP c #e8ecf8", +"aQ c #e8f0f8", +"aR c #f0f0f8", +"aS c #f0f4f8", +/* pixels */ +"aSaSaRaRaRaQaQaQaPaPaPaPaPaPaPaOaOaNaNaNaNaMaMaMaMaMaMaLaLaKaKaKaKaJaJaJaJaJaJaJaIaHaFaFaFaFaEaEaEaEaEaEaDaBaxaxaxaxaxavavava#........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", +"aSaRaRaRaQaQaQaPaPaPaPaPaPaPaOaOaNaNaNaNaMaMaMaMaMaMaLaLaKaKaKaKaJaJaJaJaJaJaJaIaHaFaFaFaFaEaEaEaEaEaEaDaBaxaxaxaxaxavavavav#h........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", +"aRaR#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#5#5#5#5#h........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", +"aRaR#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#5#5#5#5#h........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", +"aRaQ#5#5................................................................................................................#5#5#h........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", +"aQaQ#5#5...j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.jaA#5#5#h........................aGaGaGaGaa#k.0.0#kaaaGaGaGaGaGaGaGaGaGaGaa#k.0.0#kaaaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGan#w.0.0.0#WaGaGaGaGaGaGaGaGaGaGaGaGaa#W#W#WanaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#W.0.0.0#wanaGaGaGaGaGaGaGaGaG#W#k.0.0.0#WanaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaa#k.0.0#kaaaGaGaGaGaGaGaGaGan#W#k.0.0.0#vaaaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGan#w.0.0.0#WaGaGaGaGaGaGaGaGaGaGaGaGan#W#W#W#W#WaaaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#W.0.0.0#wanaGaGaGaGaGaGaGaGaa#W#W#W#W#W#W#U#U#WanaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaa#k.0.0#kaaaGaGaGaGaGaGaGaGaGaGaGaGaGaa#W.0.0.0aaaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGan#w.0.0.0#WaGaGaGaGaGaGan#W#W#W#W#W#W#U#U#U#U#U#U#WaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#W.0.0.0#wanaGaGaGaGaGaGaGaGaGaG#W.0.0.0#kaaaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaa#k.0.0#kaaaGaGaGaGaGaGaGaGaGaGaa#k.0.0#kaaaGaGaGaGaGaGaGaG", +"aQaQ#5#5...j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.jaA#5#5#g........................aGaGan.0.#.#.#.#.#.#.walaCaGaGaGaGaGan.0.#.#.#.#.#.#.walaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#w.#.#.#.#.#.#.h#TaCaGaGaGaGaGaGaG#w.y.#.#.#.##SazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaa.i.#.#.#.#.#.##iazaCaGaGaGaG#w.i.#.#.#.#.#.#.##iazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGan.0.#.#.#.#.#.#.walaCaGaGaGan.y.#.#.#.#.#.#.#.#.YalaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#w.#.#.#.#.#.#.h#TaCaGaGaGaGaGaGaGaGaG.y.#.#.#.#.#.YazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaa.i.#.#.#.#.#.##iazaCaGaGaGaGaG.0.#.#.#.#.#.#.#.#.##SazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGan.0.#.#.#.#.#.#.walaCaGaGaGaGaGaGaGaG#w.i.#.#.#.#.##SazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#w.#.#.#.#.#.#.h#TaCaGaGaG#W.#.#.#.#.#.#.#.#.#.#.#.#.#ayazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaa.i.#.#.#.#.#.##iazaCaGaGaGaGaG#w.#.#.#.#.#.#.#.halaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGan.0.#.#.#.#.#.#.walaCaGaGaGaGaGaa.i.#.#.#.#.#.#.walaCaGaGaGaGaG", +"aQaP#5#5...j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.jaA#5#5#g........................aGaG.y.#.#.#.#.#.#.#.#.gatazaGaGaGaG.y.#.#.#.#.#.#.#.#.gatazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#w.#.#.#.#.#.#.#.#.##3ayaCaGaGan#w.i.#.#.#.#.#.##BaqayaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGan.#.#.#.#.#.#.#.#.##datazaGaG#w.#.#.#.#.#.#.#.#.#.#.OatazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.y.#.#.#.#.#.#.#.#.gatazaGaGan.#.#.#.#.#.#.#.#.#.#.gatazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#w.#.#.#.#.#.#.#.#.##3ayaCaGaGaGaGaGaG#w.#.#.#.#.#.#.LaqayaCaGaGaGaGaGaGaGaGaGaGaGaGaGan.#.#.#.#.#.#.#.#.##datazaGaGaGaG.#.#.#.#.#.#.#.#.#.##zaqayaCaGaGaGaGaGaGaGaGaGaGaGaGaG.y.#.#.#.#.#.#.#.#.gatazaGaGaGaGaGan.i.#.#.#.#.#.#.##BarayaGaGaGaGaGaGaGaGaGaGaGaGaGaG#w.#.#.#.#.#.#.#.#.##3ayaCaG#W.#.#.#.#.#.#.#.#.#.#.#.#.#anaqayaGaGaGaGaGaGaGaGaGaGaGaGan.#.#.#.#.#.#.#.#.##datazaGaGaG#k.#.#.#.#.#.#.#.#.#.gagazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.y.#.#.#.#.#.#.#.#.gatazaGaGaG#W.#.#.#.#.#.#.#.#.#.gagazaGaGaGaG", +"aPaP#5#5...j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.jaA#5#5#g........................aG#k.#.#.#.#.q.p.#.#.#.##barazaGaG#k.#.#.#.#.q.p.#.#.#.##barazaGaGaGaGaGaGaGaGaGaGaGaGaGaa.#.#.#.#.e.D.#.#.#.#.faoawaCaGaa.#.#.#.#.#.#.#.##pagaqazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.i.#.#.#.#.E.e.#.#.#.##WasazaGaa.#.#.#.s.F.p.#.#.#.#.##VasazaGaGaGaGaGaGaGaGaGaGaGaGaG#k.#.#.#.#.q.p.#.#.#.##barazaGaG.h.#.#.F.D.p.#.#.#.#.##masazaGaGaGaGaGaGaGaGaGaGaGaGaGaa.#.#.#.#.e.D.#.#.#.#.faoawaCaGaGaGaGan.i.#.#.#.#.#.#.DagaqazaGaGaGaGaGaGaGaGaGaGaGaGaG.i.#.#.#.#.E.e.#.#.#.##WasazaGaGaG.#.#.#.#.#.#.#.#.#.##pagaqazaGaGaGaGaGaGaGaGaGaGaGaG#k.#.#.#.#.q.p.#.#.#.##barazaGaGaGaa.#.#.#.#.#.#.q.D.D#OajarazaGaGaGaGaGaGaGaGaGaGaGaGaa.#.#.#.#.e.D.#.#.#.#.faoawaC#U.#.#.#.#.#.#.#.#.#.#.#.#.eaaaharazaGaGaGaGaGaGaGaGaGaGaG.i.#.#.#.#.E.e.#.#.#.##WasazaGaa.#.#.#.#.E#p#i.#.#.#.#.LarazaGaGaGaGaGaGaGaGaGaGaGaGaG#k.#.#.#.#.q.p.#.#.#.##barazaGan.i.#.#.#.#.E.D.#.#.#.#.sarazaGaGaG", +"aPaP#5#5...j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.jaA#5#5#a........................aG.#.#.#.##i#1#1#e.#.#.#.##8arazaG.#.#.#.##i#1#1#e.#.#.#.##8arazaGaGaGaGaGaGaGaGaGaGaGaG.0.#.#.#.p#1#1#T.#.#.#.##kaoayaGaG.#.#.#.s.#.#.#.##k#9anayaGaGaGaGaGaGaGaGaGaGaGaGaGaG#W.#.#.#.##T#0#1.o.#.#.#.pakataCaG.h.u#Taa#7#8#p.#.#.#.#.DakataCaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##i#1#1#e.#.#.#.##8arazaG#i#raj#9#3#7#W.#.#.#.#.DakataCaGaGaGaGaGaGaGaGaGaGaGaG.0.#.#.#.p#1#1#T.#.#.#.##kaoayaGaGaGaG#k.#.#.g.E.#.#.#.y#9anayaGaGaGaGaGaGaGaGaGaGaGaG#W.#.#.#.##T#0#1.o.#.#.#.pakataCaGaa.#.#.#.W#k#k#k#k#k#l#QabanayaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##i#1#1#e.#.#.#.##8arazaGan.i.#.#.#.f#i#7#2#2#7abajarazaGaGaGaGaGaGaGaGaGaGaGaG.0.#.#.#.p#1#1#T.#.#.#.##kaoayan#S#B#r#m#l#k#k#k.c.#.#.####1aeaqazaGaGaGaGaGaGaGaGaGaG#W.#.#.#.##T#0#1.o.#.#.#.pakataC#k.#.#.#.e#1#1#6.0.#.#.#.#ajarazaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##i#1#1#e.#.#.#.##8araz#k.#.#.#.e#T#1#2#n.#.#.#.##UarazaGaG", +"aPaP#5#5...j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.jaA#5#5#a........................#w.#.#.#.e#0#0#8ae.e.#.#.##iakat#u.#.#.#.e#0#0#8ae.e.#.#.##iakataCaGaGaGaGaGaGaGaGaGaGan.#.#.#.##u#Y#7ad.7.#.#.#.oagasaCaG.Z#e#7aa.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaG.y.#.#.#.Z#W#Y#8#P.#.#.#.##ZanayaG#Tarajadadagaj.F.#.#.#.AacapazaGaGaGaGaGaGaGaGaGaGaG#w.#.#.#.e#0#0#8ae.e.#.#.##iakataCaCawanafadagaj.F.#.#.#.AacapazaGaGaGaGaGaGaGaGaGaGaGan.#.#.#.##u#Y#7ad.7.#.#.#.oagasaCaGaGaa.#.#.##m.D.#.#.#.w#6alayaGaGaGaGaGaGaGaGaGaGaGaG.y.#.#.#.Z#W#Y#8#P.#.#.#.##ZanayaG#U.#.#.##B#U#Z#3#6#6#7#9agaqazaGaGaGaGaGaGaGaGaGaGaG#w.#.#.#.e#0#0#8ae.e.#.#.##iakataC#k.#.#.#.F#W#3#6#8abagalaqayaGaGaGaGaGaGaGaGaGaGaGaGan.#.#.#.##u#Y#7ad.7.#.#.#.oagasazazaqag#9#7#6#6#z.#.#.#.##S#1agasaCaGaGaGaGaGaGaGaGaGaG.y.#.#.#.Z#W#Y#8#P.#.#.#.##Zanay.Z.#.#.#.A#Y#7ae#x.#.#.#.##9alataCaGaGaGaGaGaGaGaGaGaG#w.#.#.#.e#0#0#8ae.e.#.#.##iakat.h.#.#.#.Z#0#3aaae.F.#.#.#.DakataCaG", +"aPaP#5#5...j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.jaA#5#5#a.........................0.#.#.#.A#Y#8aiap.O.#.#.#.Aacap.Z.#.#.#.A#Y#8aiap.O.#.#.#.AacapazaGaGaGaGaGaGaGaGaGaG#W.#.#.#.##W#1aeao#C.#.#.#.#aaanayaGazarajac.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##m#X#7aiap.#.#.#.##nagataCaCayaranapasat.V.#.#.#.l#8amayaGaGaGaGaGaGaGaGaGaGaG.0.#.#.#.A#Y#8aiap.O.#.#.#.AacapazaGazauaqaqasag.g.#.#.####8anayaGaGaGaGaGaGaGaGaGaGaG#W.#.#.#.##W#1aeao#C.#.#.#.#aaanayaGaG.i.#.#.fab.D.#.#.#.y#6alayaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##m#X#7aiap.#.#.#.##nagataC#T.#.#.##W#ZaaahalalalanaqayaCaGaGaGaGaGaGaGaGaGaGaG.0.#.#.#.A#Y#8aiap.O.#.#.#.Aacapal.#.#.#.f#U#3#p#u#zanarawazaCaGaGaGaGaGaGaGaGaGaGaGaG#W.#.#.#.##W#1aeao#C.#.#.#.#aaanayaCayaqanalalal.s.#.#.#.O#U#6alayaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##m#X#7aiap.#.#.#.##nagat.Z.#.#.#.c#1aeap#r.#.#.#.k#0adaqazaGaGaGaGaGaGaGaGaGaG.0.#.#.#.A#Y#8aiap.O.#.#.#.Aacap.#.#.#.##m#1acalar#C.#.#.#.eacapazaG", +"aPaP#5#5...j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.jaA#5#5#..........................h.#.#.####1aearay#S.#.#.#.c#8am.h.#.#.####1aearay#S.#.#.#.c#8amayaGaGaGaGaGaGaGaGaGaG#k.#.#.#.l#W#6alauay.#.#.#.##wagataCaCayaran.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaa.#.#.#.##B#1aearay.Y.#.#.#.OabapazaGaCazazazaCaC.Z.#.#.#.y#6alayaGaGaGaGaGaGaGaGaGaGaG.h.#.#.####1aearay#S.#.#.#.c#8amayaGaG#T#T#T#i.h.#.#.#.o#W#8anayaGaGaGaGaGaGaGaGaGaGaG#k.#.#.#.l#W#6alauay.#.#.#.##wagataC#w.#.#.##k#8.E.#.#.#.y#6alayaGaGaGaGaGaGaGaGaGaGaGaa.#.#.#.##B#1aearay.Y.#.#.#.Oabapaz.Z.#.#.#.#.#.#.O#qauayayazaCaGaGaGaGaGaGaGaGaGaGaGaG.h.#.#.####1aearay#S.#.#.#.c#8am#t.#.#.#.D.Y.#.#.#.#.##iayaCaGaGaGaGaGaGaGaGaGaGaGaGaG#k.#.#.#.l#W#6alauay.#.#.#.##wagasaCaCazayayay#R.#.#.#.##C#YaaaoazaGaGaGaGaGaGaGaGaGaGaa.#.#.#.##B#1aearay.Y.#.#.#.Oabap#8.#.#.#.#.o#T#3.#.#.#.##j#YacapazaGaGaGaGaGaGaGaGaGaG.h.#.#.####1aearay#S.#.#.#.c#8al.#.#.#.####3ajataz#S.#.#.#.##7alayaG", +"aPaP#5#5...j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.jaA#5#5#..........................#.#.#.##k#3ajawaG#T.#.#.#.##3ak.#.#.#.##k#3ajawaG#T.#.#.#.##3akawaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.y#XaaaoazaC.#.#.#.##kaaapazaGaCazay.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaG#W.#.#.#.##T#3ajawaC.Z.#.#.#.y#8amayaGaGaGaGaGaGan.#.#.#.##k#6alayaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##k#3ajawaG#T.#.#.#.##3akawaGaG.#.#.#.#.#.#.#.7#2#1acapazaGaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.y#XaaaoazaC.#.#.#.##kaaapal.#.#.#.s#8#8.G.#.#.#.y#6alayaGaGaGaGaGaGaGaGaGaGaG#W.#.#.#.##T#3ajawaC.Z.#.#.#.y#8amay.Z.#.#.#.#.#.#.#.#.gajazaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##k#3ajawaG#T.#.#.#.##3ak.Y.#.#.#.#.#.#.#.#.#.#.#.OatazaGaGaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.y#XaaaoazaC.#.#.#.##kaaapazaGaGaGaGaG.h.#.#.#.Y#W#3agataCaGaGaGaGaGaGaGaGaGaG#W.#.#.#.##T#3ajawaC.Z.#.#.#.y#8amay.Y.#.#.#.#.#.#.#.#.#.W#W#3agataCaGaGaGaGaGaGaGaGaGaG.#.#.#.##k#3ajawaG#T.#.#.#.##3aj.u.#.#.#.b#Talayan.w.#.#.#.##1agasaC", +"aPaO#5#5...j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.jaA#5#5#..........................#.#.#.##k#6alayaG#U.#.#.#.##1af.#.#.#.##k#6alayaG#U.#.#.#.##1agasaCaGaGaGaGaGaGaGaGaG.Z.#.#.#.y#1afaraCaG.#.#.#.##j#7amayaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaG#U.#.#.#.##T#3alayaG.Z.#.#.#.y#6alayaGaGaGaGaGaG.i.#.#.#.e#W#8amayaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##k#6alayaG#U.#.#.#.##1agasaCaG.#.#.#.#.#.#.r#e#3#9akataCaGaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.y#1afaraCaG.#.#.#.##j#7am.Y.#.#.##C#3ab.L.#.#.#.y#6alayaGaGaGaGaGaGaGaGaGaGaG#U.#.#.#.##T#3alayaG.Z.#.#.#.y#6alay.h.#.#.#.#.#.#.#.#.#.gagazaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##k#6alayaG#U.#.#.#.##1ag.#.#.#.#.#.#.#.#.#.#.#.#.###arazaGaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.y#1afaraCaG.#.#.#.##j#7amayaGaGaGaG#w.#.#.#.##O#YaaanayaGaGaGaGaGaGaGaGaGaGaG#U.#.#.#.##T#3alayaG.Z.#.#.#.y#6alayay#p.#.#.#.#.#.#.#.o#D#YaaanayaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##k#6alayaG#U.#.#.#.##1af#p.#.#.#.#.#.K.V.#.#.#.#.#.##Wabapaz", +"aOaO#5#5...j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.jaA#5#5#..........................#.#.#.##j#6alayaG#U.#.#.#.##Waa.#.#.#.##j#6alayaG#U.#.#.#.##WaaapazaGaGaGaGaGaGaGaGaG.Z.#.#.#.y#3ajawaGaG.#.#.#.##i#6alayaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaG#U.#.#.#.##S#6alayaG.Z.#.#.#.y#6alayaGaGaGaGaG.0.#.#.#.##l#YabapazaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##j#6alayaG#U.#.#.#.##WaaapazaG.#.#.#.#.#.#.#.#.e#4arazaGaGaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.y#3ajawaGaG.#.#.#.##i#6#X.#.#.#.2#2#6ah.V.#.#.#.y#6alayaGaGaGaGaGaGaGaGaGaGaG#U.#.#.#.##S#6alayaG.Z.#.#.#.y#6alay.Z#S#z#p##.w.#.#.#.#.###asazaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##j#6alayaG#U.#.#.#.##Waa.#.#.#.#.#.7#Y#2#v.c.#.#.#.#ajarazaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.y#3ajawaGaG.#.#.#.##i#6alayaGaGaGaG.i.#.#.#.Y#W#3agasaCaGaGaGaGaGaGaGaGaGaGaG#U.#.#.#.##S#6alayaG.Z.#.#.#.y#6alay#T.g.#.#.#.#.#.#.#.#.c#TaiataCaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##j#6alayaG#U.#.#.#.##Waaan.g.#.#.#.#.#.#.#.#.#.#.#.a#U#8anay", +"aOaN#5#5...j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.jaA#5#5#..........................#.#.#.##i#6alayaG#U.#.#.#.##T#7.#.#.#.##i#6alayaG#U.#.#.#.##T#7amayaGaGaGaGaGaGaGaGaG.Z.#.#.#.y#6alayaGaG.#.#.#.##i#6alayaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaG#U.#.#.#.##S#6alayaG.Z.#.#.#.y#6alayaGaGaGaG.0.#.#.#.#.Y#W#3agataCaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaG#U.#.#.#.##T#7amayaGayanab#R.O.#.#.#.#.sarazaGaGaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.y#6alayaGaG.#.#.#.##i#6.f.#.#.#.o.A.D.L.g.#.#.#.c.C.LayaGaGaGaGaGaGaGaGaGaGaG#U.#.#.#.##S#6alayaG.Z.#.#.#.y#6alayaGazaqaf#9#6#T.e.#.#.#.eakataCaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaG#U.#.#.#.##T#7.#.#.#.#.G#R#X#3#6#e.#.#.#.##pakataCaGaGaGaGaGaGaGaGaG.Z.#.#.#.y#6alayaGaG.#.#.#.##i#6alayaGaGaG#w.#.#.#.##O#YaaanayaGaGaGaGaGaGaGaGaGaGaGaG#U.#.#.#.##S#6alayaG.Z.#.#.#.y#6al#R.#.#.#.#.W#i.k.#.#.#.#.eaaawaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaG#U.#.#.#.##T#7alag.t.#.#.#.#.#.#.F.#.#.#.w#Waaapaz", +"aNaN#5#5...j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.jaA#5#5#..........................w.#.#.#.L#6alayaG#k.#.#.#.k#T#7.s.#.#.#.L#6alayaG#k.#.#.#.k#T#7amayaGaGaGaGaGaGaGaGaG#v.#.#.#.c#6alayaGaa.#.#.#.##z#6alayaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGan.#.#.#.##p#6alayaG.h.#.#.####6alayaGaGaG.0.#.#.#.#.D#Y#0abanayaGaGaGaGaGaGaGaGaGaGaGaG.w.#.#.#.L#6alayaG#k.#.#.#.k#T#7amayaGazaqag#9#7#n.#.#.#.##UarazaGaGaGaGaGaGaGaGaGaGaG#v.#.#.#.c#6alayaGaa.#.#.#.##z#3.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#asazaCaGaGaGaGaGaGaGaGaGan.#.#.#.##p#6alayaG.h.#.#.####6alayaGaCayaqanalak#k.#.#.#.#abanayaGaGaGaGaGaGaGaGaGaGaG.w.#.#.#.L#6alayaG#k.#.#.#.k#T#7.#.#.#.##e#U#6aeakal.#.#.#.##macapazaGaGaGaGaGaGaGaGaG#v.#.#.#.c#6alayaGaa.#.#.#.##z#6alayaGaGaG.i.#.#.#.Y#W#3agasaCaGaGaGaGaGaGaGaGaGaGaGaGan.#.#.#.##p#6alayaG.h.#.#.####6al.#.#.#.##i#1#Y#1#n.#.#.#.##marazaGaGaGaGaGaGaGaGaGaGaG.w.#.#.#.L#6alayaG#k.#.#.#.k#T#7amauat#V.0.A.A#c#T.o.#.#.#.7#1afasaC", +"aNaN#5#5...j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.jaA#5#5.9.........................Z.#.#.#.w#6alayaG.Z.#.#.#.w#Waa.L.#.#.#.w#6alayaG.Z.#.#.#.w#WaaapazaGaGaGaGaGaGaGaGaG#U.#.#.#.##3akawaG#U.#.#.#.##S#6alayaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaG.#.#.#.##k#6alayaGan.y.#.#.#.#.D#0#0#9akataCaGaGaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.w#6alayaG.Z.#.#.#.w#WaaapazaGaCayaqanalaj.#.#.#.##pakataCaGaGaGaGaGaGaGaGaGaG#U.#.#.#.##3akawaG#U.#.#.#.##S#6.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#akaqayaGaGaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaG.#.#.#.##k#6alayaGaGaCazayayaw#O.#.#.#.##3agataCaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.w#6alayaG.Z.#.#.#.w#Waa.s.#.#.#.7#0aeapauay.#.#.#.##j#8amayaGaGaGaGaGaGaGaGaG#U.#.#.#.##3akawaG#U.#.#.#.##S#6alayaGaG#w.#.#.#.##O#YaaanayaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaG.#.#.#.##k#6#z.#.#.#.##2#1#7aeai.r.#.#.#.DakataCaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.w#6alayaG.Z.#.#.#.w#Waaaoayazarakac#8#8#p.#.#.#.##A#3akawaG", +"aNaN#5#5...j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.jaA#5#5.9........................#T.#.#.#.##Takawan.#.#.#.##k#1af#D.#.#.#.##Takawan.#.#.#.##k#1agasaCaGaGaGaGaGaGaGaGaGaG.#.#.#.##cagasaC.w.#.#.#.w#T#7amayaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaG.Y.#.#.#.k#3alay#v.#.#.#.##W#6alayan.i.#.#.#.##p#0#0#8ajarazaGaGaGaGaGaGaGaGaGaGaGaGaG#T.#.#.#.##Takawan.#.#.#.##k#1agagaCaGaGaCazayay#4.#.#.#.##macapazaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##cagasaC.w.#.#.#.w#T#7.K.L.F.A.y.A.B.D.e.#.#.#.a.w.AaaajarazaGaGaGaGaGaGaGaGaG.Y.#.#.#.k#3alay#v.#.#.#.##W#6alayaGaGaGaGaGaGaG.Z.#.#.#.k#YacapazaGaGaGaGaGaGaGaGaGaG#T.#.#.#.##Takawan.#.#.#.##k#1af#d.#.#.#.b#3ajauaC#T.#.#.#.##z#6alayaGaGaGaGaGaGaGaGaGaG.#.#.#.##cagasaC.w.#.#.#.w#T#7amayaGan.i.#.#.#.Y#W#3agasaCaGaGaGaGaGaGaGaGaGaGaGaGaGaG.Y.#.#.#.k#3alay#v.#.#.#.##W#6#z.#.#.#.##B#1aeapat.O.#.#.#.AacapazaGaGaGaGaGaGaGaGaGaG#T.#.#.#.##Takawan.#.#.#.##k#1agasaCaGazatapan#z.#.#.#.#.V#W#8alayaG", +"aNaM#5#5aAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaA#5#5.9........................aG.g.#.#.#.A#3ag.Z.#.#.#.e#W#7alau.g.#.#.#.A#3ag.Z.#.#.#.e#W#7alayaGaGaGaGaGaGaGaGaGaGaG#i.#.#.#.c#Dao#u.#.#.#.##p#WaaapazaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaG#8.#.#.#.##eaj#6.h.#.#.#.O#W#8amaj.h.#.#.#.#.e.A.A.D.K.V.Za.aGaGaGaGaGaGaGaGaGaGaGaGaGaG.g.#.#.#.A#3ag.Z.#.#.#.e#W#7al#R.h#k#WaGaGaG#v.h.#.#.#.##U#8anayaGaGaGaGaGaGaGaGaGaGaG#i.#.#.#.c#Dao#u.#.#.#.##p#Waaamanagaa#7#7#8aa.D.#.#.#.w#U#2aaajarazaGaGaGaGaGaGaGaGaG#8.#.#.#.##eaj#6.h.#.#.#.O#W#8am#S.Z#WanaGaGaa.Z.#.#.#.#.8#YacapazaGaGaGaGaGaGaGaGaGaGaG.g.#.#.#.A#3ag.Z.#.#.#.e#W#7alag.#.#.#.#.B#8aua..h.#.#.#.k#T#7amayaGaGaGaGaGaGaGaGaGaG#i.#.#.#.c#Dao#u.#.#.#.##p#WaaapazaG#k.#.#.#.##O#YaaanayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#8.#.#.#.##eaj#6.h.#.#.#.O#W#8#X.#.#.#.#.w#3ajau#T.#.#.#.####8anayaGaGaGaGaGaGaGaGaGaGaG.g.#.#.#.A#3ag.Z.#.#.#.e#W#7alayaGaGaGal#S.w.#.#.#.#.e#D#0acapazaG", +"aMaM#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#5#5#5#5.6........................aG#T.#.#.#.#.#.#.#.#.#.##l#Yaaaoay#S.#.#.#.#.#.#.#.#.#.##l#YaaaoazaGaGaGaGaGaGaGaGaGaGaGal.g.#.#.#.#.#.#.#.#.#.A#W#2agataCaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaC.V.#.#.#.#.#.#.#.#.#.e#C#Yabap.#.#.#.#.#.#.#.#.#.#.#.#.##SazaCaGaGaGaGaGaGaGaGaGaGaGaG#T.#.#.#.#.#.#.#.#.#.##l#Yaaao.Z.#.#.#.#.#.#.#.#.#.#.#.7#T#8anayaGaGaGaGaGaGaGaGaGaGaGal.g.#.#.#.#.#.#.#.#.#.A#W#2agarataqanalalalal.L.#.#.#.w#ZabakaqayaGaGaGaGaGaGaGaGaGaGaC.V.#.#.#.#.#.#.#.#.#.e#C#Yabap#i.#.#.#.#.#.#.#.#.#.#.o#W#3agataCaGaGaGaGaGaGaGaGaGaGaG#T.#.#.#.#.#.#.#.#.#.##l#Yaaaoay#s.#.#.#.#.#.#.#.#.#.#.##z#WaaapazaGaGaGaGaGaGaGaGaGaGal.g.#.#.#.#.#.#.#.#.#.A#W#2agataCan.#.#.#.#.Y#W#3agasaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaC.V.#.#.#.#.#.#.#.#.#.e#C#Yabao.u.#.#.#.#.e.K.u.#.#.#.#.e#W#8anayaGaGaGaGaGaGaGaGaGaGaG#T.#.#.#.#.#.#.#.#.#.##l#Yaaaoaz#U.#.#.#.#.#.#.#.#.e#O#0#9akataCaG", +"aMaM#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#5#5#5#5.5........................aGaC.V.#.#.#.#.#.#.#.#.A#W#3agataCaC.V.#.#.#.#.#.#.#.#.A#W#3agataCaGaGaGaGaGaGaGaGaGaGaGaC#Q.#.#.#.#.#.#.#.#.e#D#ZaaanayaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaj.g.#.#.#.#.#.#.#.##m#Y#8akat.#.#.#.#.#.#.#.#.#.#.#.#.##zaqayaCaGaGaGaGaGaGaGaGaGaGaGaC.V.#.#.#.#.#.#.#.#.A#W#3agat.h.#.#.#.#.#.#.#.#.#.#.W#T#YabapazaGaGaGaGaGaGaGaGaGaGaGaC#Q.#.#.#.#.#.#.#.#.e#D#ZaaanayaCazayayayayay.Y.#.#.#.y#3aiasazaCaGaGaGaGaGaGaGaGaGaGaGaj.g.#.#.#.#.#.#.#.##m#Y#8akat.w.#.#.#.#.#.#.#.#.#.D#O#0abanayaGaGaGaGaGaGaGaGaGaGaGaGaC.V.#.#.#.#.#.#.#.#.A#W#3agatazaz.O.#.#.#.#.#.#.#.#.##m#W#3agataCaGaGaGaGaGaGaGaGaGaGaC#Q.#.#.#.#.#.#.#.#.e#D#ZaaanayaG#k.#.#.#.##D#YaaanayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaj.g.#.#.#.#.#.#.#.##m#Y#8akataj.g.#.#.#.#.#.#.#.#.#.e#D#0acapazaGaGaGaGaGaGaGaGaGaGaGaC.V.#.#.#.#.#.#.#.#.A#W#3agataC#W.#.#.#.#.#.#.#.p#P#0#8ajarazaGaG", +"aMaM#5#5................................................................................................................#5#5.5........................aGaGay#o.e.#.#.#.#.e#m#Y#1abanayaGaGay#o.e.#.#.#.#.e#m#Y#1abanayaGaGaGaGaGaGaGaGaGaGaGaGaGaz#2.r.#.#.#.#.#.W#Y#Z#9akataCaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCag##.#.#.#.#.#.o#Q#Z#6agaraz.#.#.#.#.#.#.#.#.#.#.#.#.##pagaqazaGaGaGaGaGaGaGaGaGaGaGaGay#o.e.#.#.#.#.e#m#Y#1abanaya..Z.#.#.#.#.#.#.#.o#v#Y#Z#9akataCaGaGaGaGaGaGaGaGaGaGaGaGaz#2.r.#.#.#.#.#.W#Y#Z#9akataCaGaGaGaGaGaGaG.Z.#.#.#.A#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaCag##.#.#.#.#.#.o#Q#Z#6agaraz#k.h.#.#.#.#.#.#.o#c#Z#1#9akataCaGaGaGaGaGaGaGaGaGaGaGaGaGay#o.e.#.#.#.#.e#m#Y#1abanayaGaCat#z.e.#.#.#.#.#.o#Q#Y#1abanayaGaGaGaGaGaGaGaGaGaGaGaGaz#2.r.#.#.#.#.#.W#Y#Z#9akataCan.#.#.#.#.V#W#3agasaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCag##.#.#.#.#.#.o#Q#Z#6agarazazat##.e.#.#.#.#.#.#.0#P#0#9akataCaGaGaGaGaGaGaGaGaGaGaGaGay#o.e.#.#.#.#.e#m#Y#1abanayaG#W.#.#.#.#.#.C#w#0#1#9ajarazaGaGaG", +"aMaM#5#5..aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaA#5#5.5........................aGaGaCatal#O#n#m#t#Y#0#3abalataCaGaGaCatal#O#n#m#t#Y#0#3abalataCaGaGaGaGaGaGaGaGaGaGaGaGaGaGayao#2#o#m#l#W#W#0#9ajarazaGaGaGaGaGaGayan#8#X#X#8anayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGazaraj#p#m#k#C#Y#0#6aeaoayaCayanab#0#U#S#S#T#W#W#W#W#Y#1abanayaGaGaGaGaGaGaGaGaGaGaGaGaCatal#O#n#m#t#Y#0#3abalataCaGazar#R#n#m#k#t#X#Y#0#3abakarazaGaGaGaGaGaGaGaGaGaGaGaGaGaGayao#2#o#m#l#W#W#0#9ajarazaGaGaGaGaGaGaGaGaGayan#9#1#9anayaGaGaGaGaGaGaGaGaGaGaGaGaGaGazaraj#p#m#k#C#Y#0#6aeaoayaGaGazar#u#n#m#k#X#Y#0#3abakarazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCatal#O#n#m#t#Y#0#3abalataCaGaGazasak#Z#n#m#l#X#Y#0#3abalataCaGaGaGaGaGaGaGaGaGaGaGaGaGayao#2#o#m#l#W#W#0#9ajarazaGaGaGauak#8#Y#1abanayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGazaraj#p#m#k#C#Y#0#6aeaoayaGaGazasak#Z#o#n#p#A#6#1#1#9ajarazaGaGaGaGaGaGaGaGaGaGaGaGaGaCatal#O#n#m#t#Y#0#3abalataCaGan#T#B#r#R#Y#Y#0#3abakarazaGaGaGaG", +"aMaM#5#5..aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaA#5#5.4........................aGaGaGazatanagab#8#8abaganatazaGaGaGaGazatanagab#8#8abaganatazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCawaoahab#8#7#8acakarazaGaGaGaGaGaGaGazaqaf#9#9afaqazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGazarakac#8#7#8abahaoawaCaGazaqag#9#6#6#6#6#6#6#6#6#7#9agaqazaGaGaGaGaGaGaGaGaGaGaGaGaGazatanagab#8#8abaganatazaGaGaCatalad#8#7#6#7#8abaganatazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCawaoahab#8#7#8acakarazaGaGaGaGaGaGaGaGaGaGazaqagabagaqazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGazarakac#8#7#8abahaoawaCaGaGaCatalad#8#7#7#8abaganatazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGazatanagab#8#8abaganatazaGaGaGaGazatanagab#8#7#8abaganatazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCawaoahab#8#7#8acakarazaGaGaGaCatalac#9acalataCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGazarakac#8#7#8abahaoawaCaGaGaGazatanahacaaaa#9#9acakarazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGazatanagab#8#8abaganatazaGaGaGazaqag#9#7#8abaganatazaGaGaGaGaG", +"aMaL#5#5..aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaA#5#5.4........................aGaGaGaGaCayatapananapatayaCaGaGaGaGaGaGaCayatapananapatayaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCayatapamalamapatazaGaGaGaGaGaGaGaGaCayaqananaqayaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGazatapamalamapatayaCaGaGaCayaqanalalalalalalalalalanaqayaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCayatapananapatayaCaGaGaGaGazatapanalalalamapatayaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCayatapamalamapatazaGaGaGaGaGaGaGaGaGaGaGaCayaqanaqayaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGazatapamalamapatayaCaGaGaGaGazatapanalalamapatayaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCayatapananapatayaCaGaGaGaGaGaGaCayatapamalamapatayaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCayatapamalamapatazaGaGaGaGaGayarananapatazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGazatapamalamapatayaCaGaGaGaGaGaCayatapanalalanapatazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCayatapananapatayaCaGaGaGaGaCayaqanalamapatayaCaGaGaGaGaGaG", +"aLaL#5#5..aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaA#5#5.4........................aGaGaGaGaGaGaCazayayazaCaGaGaGaGaGaGaGaGaGaGaCazayayazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCazayayayazaCaGaGaGaGaGaGaGaGaGaGaCazayayazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCazayayayazaCaGaGaGaGaGaCazayayayayayayayayayayayazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCazayayazaCaGaGaGaGaGaGaGaCazayayayayayazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCazayayayazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaCazayazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCazayayayazaCaGaGaGaGaGaGaGaCazayayayayazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCazayayazaCaGaGaGaGaGaGaGaGaGaGaCazayayayazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCazayayayazaCaGaGaGaGaGaGaGazayayazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCazayayayazaCaGaGaGaGaGaGaGaGaGaCazayayayayazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCazayayazaCaGaGaGaGaGaGaGaCazayayayazaCaGaGaGaGaGaGaGaG", +"aLaK#5#5..aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaA#5#5.4........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", +"aKaK#5#5..aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaA#5#5.4........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", +"aKaK#5#5..aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaA#5#5.4........................aGaGaGaGaG#W#W#W#WaGaGaGaGaGaGaGaGaGaGaa#k.0.0#kaaaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaa#W#W#WanaGaGaGaGaGaGaGaGaGaGaGaa#W#W#WanaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGan#W#W#WaaaGaGaGaGaGaGaGaGaG#W#k.0.0.0#WanaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#W#W#W#WaGaGaGaGaGaGaGaGan#W#k.0.0.0#vaaaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaa#W#W#WanaGaGaGaGaGaGaGaGaGaGaGan#W#W#W#W#WaaaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGan#W#W#WaaaGaGaGaGaGaGaGaGaa#W#W#W#W#W#W#U#U#WanaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#W#W#W#WaGaGaGaGaGaGaGaGaGaGaGaGaGaa#W.0.0.0aaaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaa#W#W#WanaGaGaGaGaGan#W#W#W#W#W#W#U#U#U#U#U#U#WaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGan#W#W#WaaaGaGaGaGaGaGaGaGaGaG#W.0.0.0#kaaaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#W#W#W#WaGaGaGaGaGaGaGaGaGaGaa#k.0.0#kaaaGaGaGaGaGaGaGaG..", +"aKaK#5#5..aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaA#5#5.3........................aGaGan#k.i.#.#.#.#ayazaCaGaGaGaGaGan.0.#.#.#.#.#.#.walaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#w.y.#.#.#.##SazaCaGaGaGaGaGaGaG#w.y.#.#.#.##SazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaa.0.#.#.#.#.YazaCaGaGaGaGaG#w.i.#.#.#.#.#.#.##iazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGan#k.i.#.#.#.#ayazaCaGaGaGan.y.#.#.#.#.#.#.#.#.YalaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#w.y.#.#.#.##SazaCaGaGaGaGaGaGaGaGaG.y.#.#.#.#.#.YazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaa.0.#.#.#.#.YazaCaGaGaGaGaGaG.0.#.#.#.#.#.#.#.#.##SazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGan#k.i.#.#.#.#ayazaCaGaGaGaGaGaGaGaG#w.i.#.#.#.#.##SazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#w.y.#.#.#.##SazaCaGaGaG#W.#.#.#.#.#.#.#.#.#.#.#.#.#ayazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaa.0.#.#.#.#.YazaCaGaGaGaGaGaG#w.#.#.#.#.#.#.#.halaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGan#k.i.#.#.#.#ayazaCaGaGaGaGaGaa.i.#.#.#.#.#.#.walaCaGaGaGaGaG..", +"aKaJ#5#5..aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaA#5#5.3........................aa#k.#.#.#.#.#.#.#anaqayaCaGaGaGaG.y.#.#.#.#.#.#.#.#.gatazaGaGaGaGaGaGaGaGaGaGaGaGaGaGan#w.i.#.#.#.#.#.##BaqayaCaGaGaGan#w.i.#.#.#.#.#.##BaqayaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#W.y.#.#.#.#.#.#.LaqayaCaGaGaG#w.#.#.#.#.#.#.#.#.#.#.OatazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaa#k.#.#.#.#.#.#.#anaqayaCaGaGan.#.#.#.#.#.#.#.#.#.#.gatazaGaGaGaGaGaGaGaGaGaGaGaGaGaGan#w.i.#.#.#.#.#.##BaqayaCaGaGaGaGaGaGaG#w.#.#.#.#.#.#.LaqayaCaGaGaGaGaGaGaGaGaGaGaGaGaG#W.y.#.#.#.#.#.#.LaqayaCaGaGaGaGaG.#.#.#.#.#.#.#.#.#.##zaqayaCaGaGaGaGaGaGaGaGaGaGaGaGaa#k.#.#.#.#.#.#.#anaqayaCaGaGaGaGaGan.i.#.#.#.#.#.#.##BarayaGaGaGaGaGaGaGaGaGaGaGaGaGan#w.i.#.#.#.#.#.##BaqayaCaGaG#W.#.#.#.#.#.#.#.#.#.#.#.#.#anaqayaGaGaGaGaGaGaGaGaGaGaGaG#W.y.#.#.#.#.#.#.LaqayaCaGaGaGaG#k.#.#.#.#.#.#.#.#.#.gagazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaa#k.#.#.#.#.#.#.#anaqayaCaGaGaG#W.#.#.#.#.#.#.#.#.#.gagazaGaGaGaG..", +"aJaJ#5#5..aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaA#5#5.X........................#k.#.#.#.#.#.#.#.##9agaqazaGaGaG#k.#.#.#.#.q.p.#.#.#.##barazaGaGaGaGaGaGaGaGaGaGaGaGaGaa.#.#.#.#.#.#.#.##pagaqazaGaGaGaa.#.#.#.#.#.#.#.##pagaqazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.i.#.#.#.#.#.#.#.DagaqazaGaGaGaa.#.#.#.s.F.p.#.#.#.#.##VasazaGaGaGaGaGaGaGaGaGaGaGaGaG#k.#.#.#.#.#.#.#.##9agaqazaGaGaG.h.#.#.F.D.p.#.#.#.#.##masazaGaGaGaGaGaGaGaGaGaGaGaGaGaa.#.#.#.#.#.#.#.##pagaqazaGaGaGaGaGaGan.i.#.#.#.#.#.#.DagaqazaGaGaGaGaGaGaGaGaGaGaGaGaG.i.#.#.#.#.#.#.#.DagaqazaGaGaGaGaG.#.#.#.#.#.#.#.#.#.##pagaqazaGaGaGaGaGaGaGaGaGaGaGaG#k.#.#.#.#.#.#.#.##9agaqazaGaGaGaGaa.#.#.#.#.#.#.q.D.D#OajarazaGaGaGaGaGaGaGaGaGaGaGaGaa.#.#.#.#.#.#.#.##pagaqazaGaG#W.#.#.#.#.#.#.#.#.#.#.#.#.eaaaharazaGaGaGaGaGaGaGaGaGaGaG.i.#.#.#.#.#.#.#.DagaqazaGaGaGaa.#.#.#.#.E#p#i.#.#.#.#.LarazaGaGaGaGaGaGaGaGaGaGaGaGaG#k.#.#.#.#.#.#.#.##9agaqazaGaGan.i.#.#.#.#.E.D.#.#.#.#.sarazaGaGaG..", +"aJaJ#5#5..aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaA#5#5.P........................#W.#.#.#.r.#.#.#.##W#9anayaGaGaG.#.#.#.##i#1#1#e.#.#.#.##8arazaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.s.#.#.#.##k#9anayaGaGaGaG.#.#.#.s.#.#.#.##k#9anayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.0.#.#.g.e.#.#.#.y#9anayaGaGaGaG.h.u#Taa#7#8#p.#.#.#.#.DakataCaGaGaGaGaGaGaGaGaGaGaGaG#W.#.#.#.r.#.#.#.##W#9anayaGaGaG#i#raj#9#3#7#W.#.#.#.#.DakataCaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.s.#.#.#.##k#9anayaGaGaGaGaGaG#k.#.#.g.E.#.#.#.y#9anayaGaGaGaGaGaGaGaGaGaGaGaGaG.0.#.#.g.e.#.#.#.y#9anayaGaGaGaGaa.#.#.#.W#k#k#k#k#k#l#QabanayaGaGaGaGaGaGaGaGaGaGaGaG#W.#.#.#.r.#.#.#.##W#9anayaGaGaGan.i.#.#.#.f#i#7#2#2#7abajarazaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.s.#.#.#.##k#9anayaGaGan#T#B#r#m#l#k#k#k.c.#.#.####1aeaqazaGaGaGaGaGaGaGaGaGaGaG.0.#.#.g.e.#.#.#.y#9anayaGaGaG#k.#.#.#.e#1#1#6.0.#.#.#.#ajarazaGaGaGaGaGaGaGaGaGaGaGaG#W.#.#.#.r.#.#.#.##W#9anayaGaG#k.#.#.#.e#T#1#2#n.#.#.#.##UarazaGaG..", +"aJaJ#5#5..aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaA#5#5.P........................aG.h#paf#o.#.#.#.##T#6alayaGaG#w.#.#.#.e#0#0#8ae.e.#.#.##iakataCaGaGaGaGaGaGaGaGaGaGaGaG.Z#e#7aa.#.#.#.##i#6alayaGaGaGaG.Z#e#7aa.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#W.w#2ag.D.#.#.#.w#6alayaGaGaGaG#Tarajadadagaj.F.#.#.#.AacapazaGaGaGaGaGaGaGaGaGaGaGaGaG.h#paf#o.#.#.#.##T#6alayaGaGaGaGawanafadagaj.F.#.#.#.AacapazaGaGaGaGaGaGaGaGaGaGaGaGaG.Z#e#7aa.#.#.#.##i#6alayaGaGaGaGaGaa.#.#.##m.D.#.#.#.w#6alayaGaGaGaGaGaGaGaGaGaGaGaGaG#W.w#2ag.D.#.#.#.w#6alayaGaGaGaG#U.#.#.##B#U#Z#3#6#6#7#9agaqazaGaGaGaGaGaGaGaGaGaGaGaGaG.h#paf#o.#.#.#.##T#6alayaGaGaG#k.#.#.#.F#W#3#6#8abagalaqayaGaGaGaGaGaGaGaGaGaGaGaGaGaG.Z#e#7aa.#.#.#.##i#6alayaGaGaGazaqag#9#7#6#6#z.#.#.#.##S#1agasaCaGaGaGaGaGaGaGaGaGaGaG#W.w#2ag.D.#.#.#.w#6alayaGaGaG.0.#.#.#.A#Y#7ae#x.#.#.#.##9alataCaGaGaGaGaGaGaGaGaGaGaGaG.h#paf#o.#.#.#.##T#6alayaGaG.i.#.#.#.Z#0#3aaae.F.#.#.#.DakataCaG..", +"aJaJ#5#5..aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaA#5#5.P........................aGazarai#r.#.#.#.##S#6alayaGaG.0.#.#.#.A#Y#8aiap.O.#.#.#.AacapazaGaGaGaGaGaGaGaGaGaGaGaGazarajac.#.#.#.##i#6alayaGaGaGaGazarajac.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGazaraj.F.#.#.#.y#6alayaGaGaGaGaGayaranapasat.V.#.#.#.l#8amayaGaGaGaGaGaGaGaGaGaGaGaGaGazarai#r.#.#.#.##S#6alayaGaGaGaGazauaqaqasag.g.#.#.####8anayaGaGaGaGaGaGaGaGaGaGaGaGaGazarajac.#.#.#.##i#6alayaGaGaGaGaG.i.#.#.fab.D.#.#.#.y#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGazaraj.F.#.#.#.y#6alayaGaGaGaG#U.#.#.##W#ZaaahalalalanaqayaCaGaGaGaGaGaGaGaGaGaGaGaGaGazarai#r.#.#.#.##S#6alayaGaGan.#.#.#.f#U#3#p#u#zanarawazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGazarajac.#.#.#.##i#6alayaGaGaGaCayaqanalalal.s.#.#.#.O#U#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGazaraj.F.#.#.#.y#6alayaGaGaG.Z.#.#.#.c#1aeap#r.#.#.#.k#0adaqazaGaGaGaGaGaGaGaGaGaGaGaGazarai#r.#.#.#.##S#6alayaGaG.#.#.#.##m#1acalar#C.#.#.#.eacapazaG..", +"aJaJ#5#5..aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaA#5#5.N........................aGaGayar#B.#.#.#.##S#6alayaGaG.h.#.#.####1aearay#S.#.#.#.c#8amayaGaGaGaGaGaGaGaGaGaGaGaGaGayaran.#.#.#.##i#6alayaGaGaGaGaGayaran.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGayar.O.#.#.#.y#6alayaGaGaGaGaGaGazazazaCaC.Z.#.#.#.y#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGayar#B.#.#.#.##S#6alayaGaGaGaGaG#T#T#T#i.h.#.#.#.o#W#8anayaGaGaGaGaGaGaGaGaGaGaGaGaGaGayaran.#.#.#.##i#6alayaGaGaGaG#w.#.#.##k#8.E.#.#.#.y#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGayar.O.#.#.#.y#6alayaGaGaGaG.Z.#.#.#.#.#.#.O#qauayayazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGayar#B.#.#.#.##S#6alayaGaG#w.#.#.#.D.Y.#.#.#.#.##iayaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGayaran.#.#.#.##i#6alayaGaGaGaGaCazayayay#R.#.#.#.##C#YaaaoazaGaGaGaGaGaGaGaGaGaGaGaGaGaGayar.O.#.#.#.y#6alayaGaGaGaa.#.#.#.#.o#T#3.#.#.#.##j#YacapazaGaGaGaGaGaGaGaGaGaGaGaGaGayar#B.#.#.#.##S#6alayaGaG.#.#.#.####3ajataz#S.#.#.#.##7alayaG..", +"aJaJ#5#5..aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaA#5#5.N........................aGaGaCaz#R.#.#.#.##S#6alayaGaG.#.#.#.##k#3ajawaG#T.#.#.#.##3akawaGaGaGaGaGaGaGaGaGaGaGaGaGaGazay.#.#.#.##i#6alayaGaGaGaGaGaGazay.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaz.Z.#.#.#.y#6alayaGaGaGaGaGaGaGaGaGaGan.#.#.#.##k#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCaz#R.#.#.#.##S#6alayaGaGaGaGaG.#.#.#.#.#.#.#.7#2#1acapazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGazay.#.#.#.##i#6alayaGaGaGan.#.#.#.s#8#8.G.#.#.#.y#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaz.Z.#.#.#.y#6alayaGaGaGaG.Z.#.#.#.#.#.#.#.#.gajazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCaz#R.#.#.#.##S#6alayaGaG.0.#.#.#.#.#.#.#.#.#.#.#.OatazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGazay.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaG.h.#.#.#.Y#W#3agataCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaz.Z.#.#.#.y#6alayaGaGaGaG.Y.#.#.#.#.#.#.#.#.#.W#W#3agataCaGaGaGaGaGaGaGaGaGaGaGaGaGaCaz#R.#.#.#.##S#6alayaGaG.w.#.#.#.b#Talayan.w.#.#.#.##1agasaC..", +"aJaI#5#5..aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaA#5#5.N........................aGaGaGaG#T.#.#.#.##S#6alayaGaG.#.#.#.##k#6alayaG#U.#.#.#.##1agasaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.y#6alayaGaGaGaGaGaGaGaGaGaG.i.#.#.#.e#W#8amayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#T.#.#.#.##S#6alayaGaGaGaGaG.#.#.#.#.#.#.r#e#3#9akataCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaGaG.0.#.#.##C#3ab.L.#.#.#.y#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.y#6alayaGaGaGaG.h.#.#.#.#.#.#.#.#.#.gagazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#T.#.#.#.##S#6alayaGaG.#.#.#.#.#.#.#.#.#.#.#.#.###arazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaG#w.#.#.#.##O#YaaanayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.y#6alayaGaGaGaGaz#p.#.#.#.#.#.#.#.o#D#YaaanayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#T.#.#.#.##S#6alayaGaG#u.#.#.#.#.#.K.V.#.#.#.#.#.##Wabapaz..", +"aIaH#5#5..aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaA#5#5.N........................aGaGaGaG#U.#.#.#.##S#6alayaGaG.#.#.#.##j#6alayaG#U.#.#.#.##WaaapazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.y#6alayaGaGaGaGaGaGaGaGaG.0.#.#.#.##l#YabapazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#U.#.#.#.##S#6alayaGaGaGaGaG.#.#.#.#.#.#.#.#.e#4arazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaGaa.#.#.#.2#2#6ah.V.#.#.#.y#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.y#6alayaGaGaGaG.Z#S#z#p##.w.#.#.#.#.###asazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#U.#.#.#.##S#6alayaGaG.#.#.#.#.#.7#Y#2#v.c.#.#.#.#ajarazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaG.i.#.#.#.Y#W#3agasaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.y#6alayaGaGaGaG#T.g.#.#.#.#.#.#.#.#.c#TaiataCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#U.#.#.#.##S#6alayaGaGaC.g.#.#.#.#.#.#.#.#.#.#.#.a#U#8anay..", +"aHaF#5#5..aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaA#5#5.N........................aGaGaGaG#U.#.#.#.##S#6alayaGaG.#.#.#.##i#6alayaG#U.#.#.#.##T#7amayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.y#6alayaGaGaGaGaGaGaGaG.0.#.#.#.#.Y#W#3agataCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#U.#.#.#.##S#6alayaGaGaGaGaGazanab#R.O.#.#.#.#.sarazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaG.i.#.#.#.o.A.D.L.g.#.#.#.c.C.LayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.y#6alayaGaGaGaGaGazaqaf#9#6#T.e.#.#.#.eakataCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#U.#.#.#.##S#6alayaGaG.#.#.#.#.G#R#X#3#6#e.#.#.#.##pakataCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaG#w.#.#.#.##O#YaaanayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.y#6alayaGaGaG#W.#.#.#.#.W#i.k.#.#.#.#.eaaawaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#U.#.#.#.##S#6alayaGaGaGak.t.#.#.#.#.#.#.F.#.#.#.w#Waaapaz..", +"aFaF#5#5..aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaA#5#5.N........................aGaGaGaG#U.#.#.#.##S#6alayaGaG.w.#.#.#.L#6alayaG#k.#.#.#.k#T#7amayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.y#6alayaGaGaGaGaGaGaG.0.#.#.#.#.D#Y#0abanayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#U.#.#.#.##S#6alayaGaGaGaGaGazaqag#9#7#n.#.#.#.##UarazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaG.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#asazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.y#6alayaGaGaGaGaGaCayaqanalak#k.#.#.#.#abanayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#U.#.#.#.##S#6alayaGaG.#.#.#.##e#U#6aeakal.#.#.#.##macapazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaG.i.#.#.#.Y#W#3agasaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.y#6alayaGaGaG.#.#.#.##i#1#Y#1#n.#.#.#.##marazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#U.#.#.#.##S#6alayaGaGaGaCat#V.0.A.A#c#T.o.#.#.#.7#1afasaC..", +"aFaF#5#5..aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaA#5#5.N........................aGaGaGaG#U.#.#.#.##S#6alayaGaG.Z.#.#.#.w#6alayaG.Z.#.#.#.w#WaaapazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.y#6alayaGaGaGaGaGan.y.#.#.#.#.D#0#0#9akataCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#U.#.#.#.##S#6alayaGaGaGaGaGaCayaqanalaj.#.#.#.##pakataCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaG.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#akaqayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.y#6alayaGaGaGaGaGaGaCazayayaw#O.#.#.#.##3agataCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#U.#.#.#.##S#6alayaGaG.w.#.#.#.7#0aeapauay.#.#.#.##j#8amayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaG#w.#.#.#.##O#YaaanayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.y#6alayaGaG#W.#.#.#.##2#1#7aeai.r.#.#.#.DakataCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#U.#.#.#.##S#6alayaGaGaGaGazasakac#8#8#p.#.#.#.##A#3akawaG..", +"aFaF#5#5..aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaA#5#5.M........................aGaGaGaG#U.#.#.#.##S#6alayaGaG#T.#.#.#.##Takawan.#.#.#.##k#1agasaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.y#6alayaGaGaGaGan.i.#.#.#.##p#0#0#8ajarazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#U.#.#.#.##S#6alayaGaGanaGaGaGaCazayay#4.#.#.#.##macapazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaG.Z.O.F.A.y.A.B.D.e.#.#.#.a.w.AaaajarazaGaGaGaGaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.y#6alayaGaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.k#YacapazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#U.#.#.#.##S#6alayaGaG#i.#.#.#.b#3ajauaC#T.#.#.#.##z#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGan.i.#.#.#.Y#W#3agasaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.y#6alayaGaG#W.#.#.#.##B#1aeapat.O.#.#.#.AacapazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#U.#.#.#.##S#6alayaGaGaGaGaGazatapan#z.#.#.#.#.V#W#8alayaG..", +"aFaE#5#5..aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaA#5#5.M........................aGaGaGaG#U.#.#.#.##S#6alayaGaGaG.g.#.#.#.A#3ag.Z.#.#.#.e#W#7alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.y#6alayaGaGaGan.i.#.#.#.#.e.A.A.D.K.V.Za.aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#U.#.#.#.##S#6alayaGaG#W.i#k#WaGaGaG#v.h.#.#.#.##U#8anayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaGazarahaa#7#7#8aa.D.#.#.#.w#U#2aaajarazaGaGaGaGaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.y#6alayaGaGaG#W.0#WanaGaGaa.Z.#.#.#.#.8#YacapazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#U.#.#.#.##S#6alayaGaGal.#.#.#.#.B#8aua..h.#.#.#.k#T#7amayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaG#k.#.#.#.##O#YaaanayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.y#6alayaGaGaa.#.#.#.#.w#3ajau#T.#.#.#.####8anayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#U.#.#.#.##S#6alayaGaGaGaGaGaGal#S.w.#.#.#.#.e#D#0acapazaG..", +"aEaE#5#5..aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaA#5#5.J........................aGaGaGaG#U.#.#.#.##S#6alayaGaGaG#T.#.#.#.#.#.#.#.#.#.##l#YaaaoazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.y#6alayaGaGaG.#.#.#.#.#.#.#.#.#.#.#.#.##SazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#U.#.#.#.##S#6alayaGaG.0.#.#.#.#.#.#.#.#.#.#.#.7#T#8anayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaGaGayaqanalalalal.L.#.#.#.w#ZabakaqayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.y#6alayaGaGaG#k.#.#.#.#.#.#.#.#.#.#.o#W#3agataCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#U.#.#.#.##S#6alayaGaGaG#s.#.#.#.#.#.#.#.#.#.#.##z#WaaapazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaGan.#.#.#.#.Y#W#3agasaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.y#6alayaGaGaG.w.#.#.#.#.e.K.u.#.#.#.#.e#W#8anayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#U.#.#.#.##S#6alayaGaGaG#W.#.#.#.#.#.#.#.#.e#O#0#9akataCaG..", +"aEaE#5#5..aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaA#5#5.J........................aGaGaGaG#U.#.#.#.##S#6alayaGaGaGaC.V.#.#.#.#.#.#.#.#.A#W#3agataCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.y#6alayaGaGaG.#.#.#.#.#.#.#.#.#.#.#.#.##zaqayaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#U.#.#.#.##S#6alayaGaG.i.#.#.#.#.#.#.#.#.#.#.W#T#YabapazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaCazayayayayay.Y.#.#.#.y#3aiasazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.y#6alayaGaGaG.y.#.#.#.#.#.#.#.#.#.D#O#0abanayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#U.#.#.#.##S#6alayaGaGaGaz.O.#.#.#.#.#.#.#.#.##m#W#3agataCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaG#k.#.#.#.##D#YaaanayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.y#6alayaGaGaGal.g.#.#.#.#.#.#.#.#.#.e#D#0acapazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#U.#.#.#.##S#6alayaGaGaG#W.#.#.#.#.#.#.#.p#P#0#8ajarazaGaG..", +"aEaE#5#5..aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaA#5#5.J........................aGaGaGaG#U.#.#.#.##T#6alayaGaGaGaGay#o.e.#.#.#.#.e#m#Y#1abanayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.A#7alayaGaGaG.#.#.#.#.#.#.#.#.#.#.#.#.##pagaqazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#U.#.#.#.##T#6alayaGaGaa.Z.#.#.#.#.#.#.#.o#v#Y#Z#9akataCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.A#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.A#7alayaGaGaG#k.h.#.#.#.#.#.#.o#c#Z#1#9akataCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#U.#.#.#.##T#6alayaGaGaGaCat#z.e.#.#.#.#.#.o#Q#Y#1abanayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaGaGan.#.#.#.#.V#W#3agasaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.A#7alayaGaGaGaCat##.e.#.#.#.#.#.#.0#P#0#9akataCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#U.#.#.#.##T#6alayaGaGaG#W.#.#.#.#.#.C#w#0#1#9ajarazaGaGaG..", +"aEaE#5#5..aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaA#5#5.J........................aGaGaGaGaGayan#8#X#X#8anayaGaGaGaGaCatal#O#n#m#t#Y#0#3abalataCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGayan#8#X#X#8anayaGaGaGaGaGaGaGaGayan#8#X#X#8anayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGayan#9#1#9anayaGaGaGazanab#0#U#S#S#T#W#W#W#W#Y#1abanayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGayan#8#X#X#8anayaGaGaGazar#R#n#m#k#t#X#Y#0#3abakarazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGayan#8#X#X#8anayaGaGaGaGaGaGaGaGaGaGaGayan#9#1#9anayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGayan#9#1#9anayaGaGaGaGazar#u#n#m#k#X#Y#0#3abakarazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGayan#8#X#X#8anayaGaGaGaGazasak#Z#n#m#l#X#Y#0#3abalataCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGayan#8#X#X#8anayaGaGaGaGaGauak#8#Y#1abanayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGayan#9#1#9anayaGaGaGaGazasak#Z#o#n#p#A#6#1#1#9ajarazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGayan#8#X#X#8anayaGaGaGan#T#B#r#R#Y#Y#0#3abakarazaGaGaGaG..", +"aEaE#5#5..aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaA#5#5.I........................aGaGaGaGaGazaqaf#9#9afaqazaGaGaGaGaGazatanagab#8#8abaganatazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGazaqaf#9#9afaqazaGaGaGaGaGaGaGaGazaqaf#9#9afaqazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGazaqagabagaqazaGaGaGazaqag#9#6#6#6#6#6#6#6#6#7#9agaqazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGazaqaf#9#9afaqazaGaGaGaCatalad#8#7#6#7#8abaganatazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGazaqaf#9#9afaqazaGaGaGaGaGaGaGaGaGaGaGazaqagabagaqazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGazaqagabagaqazaGaGaGaGaCatalad#8#7#7#8abaganatazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGazaqaf#9#9afaqazaGaGaGaGaGazatanagab#8#7#8abaganatazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGazaqaf#9#9afaqazaGaGaGaGaCatalac#9acalataCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGazaqagabagaqazaGaGaGaGaGazatanahacaaaa#9#9acakarazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGazaqaf#9#9afaqazaGaGaGaGazaqag#9#7#8abaganatazaGaGaGaGaG..", +"aEaD#5#5..aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaA#5#5.I........................aGaGaGaGaGaCayaqananaqayaCaGaGaGaGaGaGaCayatapananapatayaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCayaqananaqayaCaGaGaGaGaGaGaGaGaCayaqananaqayaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCayaqanaqayaCaGaGaGaCayaqanalalalalalalalalalanaqayaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCayaqananaqayaCaGaGaGaGazatapanalalalamapatayaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCayaqananaqayaCaGaGaGaGaGaGaGaGaGaGaGaCayaqanaqayaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCayaqanaqayaCaGaGaGaGaGazatapanalalamapatayaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCayaqananaqayaCaGaGaGaGaGaGaCayatapamalamapatayaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCayaqananaqayaCaGaGaGaGaGayarananapatazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCayaqanaqayaCaGaGaGaGaGaGaCayatapanalalanapatazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCayaqananaqayaCaGaGaGaGaCayaqanalamapatayaCaGaGaGaGaGaG..", +"aDaB#5#5..aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaA#5#5.I........................aGaGaGaGaGaGaCazayayazaCaGaGaGaGaGaGaGaGaGaCazayayazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCazayayazaCaGaGaGaGaGaGaGaGaGaGaCazayayazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCazayazaCaGaGaGaGaGaCazayayayayayayayayayayayazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCazayayazaCaGaGaGaGaGaGaCazayayayayayazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCazayayazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaCazayazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCazayazaCaGaGaGaGaGaGaGaCazayayayayazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCazayayazaCaGaGaGaGaGaGaGaGaGaCazayayayazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCazayayazaCaGaGaGaGaGaGaGazayayazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCazayazaCaGaGaGaGaGaGaGaGaGaCazayayayayazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCazayayazaCaGaGaGaGaGaGaCazayayayazaCaGaGaGaGaGaGaGaG..", +"aBax#5#5..aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaA#5#5.I........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", +"axax#5#5..aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaA#5#5.I........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", +"axax#5#5..aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaA#5#5.I........................aGaGaGaa#w.0.0.0#waaaGaGaGaGaGaGaGaGaGaGaa#k.0.0#kaaaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGan#W.0.0.0#k#WaGaGaGaGaGaGaGaGaGaGaGaGaa#W#W#WanaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#W#k.0.0.0#WanaGaGaGaGaGaGaGaGaG#W#k.0.0.0#WanaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaa#w.0.0.0#waaaGaGaGaGaGaGaGaGan#W#k.0.0.0#vaaaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGan#W.0.0.0#k#WaGaGaGaGaGaGaGaGaGaGaGaGan#W#W#W#W#WaaaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#W#k.0.0.0#WanaGaGaGaGaGaGaGaGaa#W#W#W#W#W#W#U#U#WanaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaa#w.0.0.0#waaaGaGaGaGaGaGaGaGaGaGaGaGaGaa#W.0.0.0aaaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGan#W.0.0.0#k#WaGaGaGaGaGaGan#W#W#W#W#W#W#U#U#U#U#U#U#WaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#W#k.0.0.0#WanaGaGaGaGaGaGaGaGaGaG#W.0.0.0#kaaaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaa#w.0.0.0#waaaGaGaGaGaGaGaGaGaGaGaa#k.0.0#kaaaGaGaGaGaGaGaGaG", +"axax#5#5..aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaA#5#5.H........................aGaa.y.#.#.#.#.#.#.#.walaCaGaGaGaGaGan.0.#.#.#.#.#.#.walaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGan#k.#.#.#.#.#.#.#.h#TaCaGaGaGaGaGaGaG#w.y.#.#.#.##SazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#w.i.#.#.#.#.#.#.##iazaCaGaGaGaG#w.i.#.#.#.#.#.#.##iazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaa.y.#.#.#.#.#.#.#.walaCaGaGaGan.y.#.#.#.#.#.#.#.#.YalaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGan#k.#.#.#.#.#.#.#.h#TaCaGaGaGaGaGaGaGaGaG.y.#.#.#.#.#.YazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaG#w.i.#.#.#.#.#.#.##iazaCaGaGaGaGaG.0.#.#.#.#.#.#.#.#.##SazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaa.y.#.#.#.#.#.#.#.walaCaGaGaGaGaGaGaGaG#w.i.#.#.#.#.##SazaCaGaGaGaGaGaGaGaGaGaGaGaGaGan#k.#.#.#.#.#.#.#.h#TaCaGaGaG#W.#.#.#.#.#.#.#.#.#.#.#.#.#ayazaCaGaGaGaGaGaGaGaGaGaGaGaG#w.i.#.#.#.#.#.#.##iazaCaGaGaGaGaG#w.#.#.#.#.#.#.#.halaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaa.y.#.#.#.#.#.#.#.walaCaGaGaGaGaGaa.i.#.#.#.#.#.#.walaCaGaGaGaGaG", +"axax#5#5..aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaA#5#5.H........................an.#.#.#.#.#.#.#.#.#.#.gagazaGaGaGaG.y.#.#.#.#.#.#.#.#.gatazaGaGaGaGaGaGaGaGaGaGaGaGaGaG.y.#.#.#.#.#.#.#.#.#.##OayaCaGaGan#w.i.#.#.#.#.#.##BaqayaCaGaGaGaGaGaGaGaGaGaGaGaGaGaG#w.#.#.#.#.#.#.#.#.#.#.OatazaGaG#w.#.#.#.#.#.#.#.#.#.#.OatazaGaGaGaGaGaGaGaGaGaGaGaGaGan.#.#.#.#.#.#.#.#.#.#.gagazaGaGan.#.#.#.#.#.#.#.#.#.#.gatazaGaGaGaGaGaGaGaGaGaGaGaGaGaG.y.#.#.#.#.#.#.#.#.#.##OayaCaGaGaGaGaGaG#w.#.#.#.#.#.#.LaqayaCaGaGaGaGaGaGaGaGaGaGaGaG#w.#.#.#.#.#.#.#.#.#.#.OatazaGaGaGaG.#.#.#.#.#.#.#.#.#.##zaqayaCaGaGaGaGaGaGaGaGaGaGaGan.#.#.#.#.#.#.#.#.#.#.gagazaGaGaGaGaGan.i.#.#.#.#.#.#.##BarayaGaGaGaGaGaGaGaGaGaGaGaGaG.y.#.#.#.#.#.#.#.#.#.##OayaCaG#W.#.#.#.#.#.#.#.#.#.#.#.#.#anaqayaGaGaGaGaGaGaGaGaGaGaG#w.#.#.#.#.#.#.#.#.#.#.OatazaGaGaG#k.#.#.#.#.#.#.#.#.#.gagazaGaGaGaGaGaGaGaGaGaGaGaGaGan.#.#.#.#.#.#.#.#.#.#.gagazaGaGaG#W.#.#.#.#.#.#.#.#.#.gagazaGaGaGaG", +"axav#5#5..aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaA#5#5.z........................aG.h.#.#.f.F.D.#.#.#.#.###arazaGaG#k.#.#.#.#.q.p.#.#.#.##barazaGaGaGaGaGaGaGaGaGaGaGaGaG#k.#.#.#.F.D.e.#.#.#.#.faoawaCaGaa.#.#.#.#.#.#.#.##pagaqazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaa.#.#.#.s.F.p.#.#.#.#.##VasazaGaa.#.#.#.s.F.p.#.#.#.#.##VasazaGaGaGaGaGaGaGaGaGaGaGaGaG.h.#.#.f.F.D.#.#.#.#.###arazaGaG.h.#.#.F.D.p.#.#.#.#.##masazaGaGaGaGaGaGaGaGaGaGaGaGaG#k.#.#.#.F.D.e.#.#.#.#.faoawaCaGaGaGaGan.i.#.#.#.#.#.#.DagaqazaGaGaGaGaGaGaGaGaGaGaGaGaa.#.#.#.s.F.p.#.#.#.#.##VasazaGaGaG.#.#.#.#.#.#.#.#.#.##pagaqazaGaGaGaGaGaGaGaGaGaGaGaG.h.#.#.f.F.D.#.#.#.#.###arazaGaGaGaa.#.#.#.#.#.#.q.D.D#OajarazaGaGaGaGaGaGaGaGaGaGaGaG#k.#.#.#.F.D.e.#.#.#.#.faoawaC#U.#.#.#.#.#.#.#.#.#.#.#.#.eaaaharazaGaGaGaGaGaGaGaGaGaGaa.#.#.#.s.F.p.#.#.#.#.##VasazaGaa.#.#.#.#.E#p#i.#.#.#.#.LarazaGaGaGaGaGaGaGaGaGaGaGaGaG.h.#.#.f.F.D.#.#.#.#.###arazaGan.i.#.#.#.#.E.D.#.#.#.#.sarazaGaGaG", +"avav#5#5aAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaA#5#5.z........................aG#i.g#nac#8#8#W.e.#.#.#.#ajarazaG.#.#.#.##i#1#1#e.#.#.#.##8arazaGaGaGaGaGaGaGaGaGaGaGaGaa.##e#2#6#2#6.D.#.#.#.##uaoayaGaG.#.#.#.s.#.#.#.##k#9anayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.h.u#Taa#7#8#p.#.#.#.#.DakataCaG.h.u#Taa#7#8#p.#.#.#.#.DakataCaGaGaGaGaGaGaGaGaGaGaGaG#i.g#nac#8#8#W.e.#.#.#.#ajarazaG#i#raj#9#3#7#W.#.#.#.#.DakataCaGaGaGaGaGaGaGaGaGaGaGaGaa.##e#2#6#2#6.D.#.#.#.##uaoayaGaGaGaG#k.#.#.g.E.#.#.#.y#9anayaGaGaGaGaGaGaGaGaGaGaGaGaG.h.u#Taa#7#8#p.#.#.#.#.DakataCaGaa.#.#.#.W#k#k#k#k#k#l#QabanayaGaGaGaGaGaGaGaGaGaGaGaG#i.g#nac#8#8#W.e.#.#.#.#ajarazaGan.i.#.#.#.f#i#7#2#2#7abajarazaGaGaGaGaGaGaGaGaGaGaGaGaa.##e#2#6#2#6.D.#.#.#.##uaoayan#S#B#r#m#l#k#k#k.c.#.#.####1aeaqazaGaGaGaGaGaGaGaGaGaGaG.h.u#Taa#7#8#p.#.#.#.#.DakataC#k.#.#.#.e#1#1#6.0.#.#.#.#ajarazaGaGaGaGaGaGaGaGaGaGaGaG#i.g#nac#8#8#W.e.#.#.#.#ajaraz#k.#.#.#.e#T#1#2#n.#.#.#.##UarazaGaG", +"avav#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#5#5#5#5.z........................aGa.ajanagaeagaj#u.#.#.#.##8akat#u.#.#.#.e#0#0#8ae.e.#.#.##iakataCaGaGaGaGaGaGaGaGaGaGaGaG#Tapae#9abagaj.#.#.#.##nahataCaG.Z#e#7aa.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#Tarajadadagaj.F.#.#.#.AacapazaG#Tarajadadagaj.F.#.#.#.AacapazaGaGaGaGaGaGaGaGaGaGaGaGa.ajanagaeagaj#u.#.#.#.##8akataCaCawanafadagaj.F.#.#.#.AacapazaGaGaGaGaGaGaGaGaGaGaGaGaG#Tapae#9abagaj.#.#.#.##nahataCaGaGaa.#.#.##m.D.#.#.#.w#6alayaGaGaGaGaGaGaGaGaGaGaGaGaG#Tarajadadagaj.F.#.#.#.AacapazaG#U.#.#.##B#U#Z#3#6#6#7#9agaqazaGaGaGaGaGaGaGaGaGaGaGaGa.ajanagaeagaj#u.#.#.#.##8akataC#k.#.#.#.F#W#3#6#8abagalaqayaGaGaGaGaGaGaGaGaGaGaGaGaGaG#Tapae#9abagaj.#.#.#.##nahataCazaqag#9#7#6#6#z.#.#.#.##S#1agasaCaGaGaGaGaGaGaGaGaGaGaG#Tarajadadagaj.F.#.#.#.Aacapaz.Z.#.#.#.A#Y#7ae#x.#.#.#.##9alataCaGaGaGaGaGaGaGaGaGaGaGa.ajanagaeagaj#u.#.#.#.##8akat.h.#.#.#.Z#0#3aaae.F.#.#.#.DakataCaG", +"avav#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#5#5#5#5.z........................aGaGaCauaraqasat#O.#.#.#.##Oacap.Z.#.#.#.A#Y#8aiap.O.#.#.#.AacapazaGaGaGaGaGaGaGaGaGaGaGaGazaralalanarat.#.#.#.###abapazaGazarajac.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGayaranapasat.V.#.#.#.l#8amayaGaCayaranapasat.V.#.#.#.l#8amayaGaGaGaGaGaGaGaGaGaGaGaGaGaCauaraqasat#O.#.#.#.##OacapazaGazauaqaqasag.g.#.#.####8anayaGaGaGaGaGaGaGaGaGaGaGaGaGazaralalanarat.#.#.#.###abapazaGaG.i.#.#.fab.D.#.#.#.y#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGayaranapasat.V.#.#.#.l#8amayaG#U.#.#.##W#ZaaahalalalanaqayaCaGaGaGaGaGaGaGaGaGaGaGaGaGaCauaraqasat#O.#.#.#.##Oacapal.#.#.#.f#U#3#p#u#zanarawazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGazaralalanarat.#.#.#.###abapazaCayaqanalalal.s.#.#.#.O#U#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGayaranapasat.V.#.#.#.l#8amay.Z.#.#.#.c#1aeap#r.#.#.#.k#0adaqazaGaGaGaGaGaGaGaGaGaGaGaGaCauaraqasat#O.#.#.#.##Oacap.#.#.#.##m#1acalar#C.#.#.#.eacapazaG", +"a##h#h#h#h#h#g#g#g#a#a#a#.#.#.#.#.#..9.9.9.6.5.5.5.4.4.4.4.4.4.3.3.X.P.P.P.N.N.N.N.N.N.N.M.M.J.J.J.J.I.I.I.I.I.I.H.H.z.z.z.z.x........................aGaGaGaCazazaCaC#T.#.#.#.##U#8an.h.#.#.####1aearay#S.#.#.#.c#8amayaGaGaGaGaGaGaGaGaGaGaGaGaGayatauayaCaC.#.#.#.##j#7amayaGaCayaran.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGazazazaCaC.Z.#.#.#.y#6alayaGaGaGazazazaCaC.Z.#.#.#.y#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCazazaCaC#T.#.#.#.##U#8anayaGaG#T#T#T#i.h.#.#.#.o#W#8anayaGaGaGaGaGaGaGaGaGaGaGaGaGaGayatauayaCaC.#.#.#.##j#7amayaG#w.#.#.##k#8.E.#.#.#.y#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGazazazaCaC.Z.#.#.#.y#6alayaG.Z.#.#.#.#.#.#.O#qauayayazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCazazaCaC#T.#.#.#.##U#8an#t.#.#.#.D.Y.#.#.#.#.##iayaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGayatauayaCaC.#.#.#.##j#7amayaGaCazayayay#R.#.#.#.##C#YaaaoazaGaGaGaGaGaGaGaGaGaGaGaGaGaGazazazaCaC.Z.#.#.#.y#6alaya..#.#.#.#.o#T#3.#.#.#.##j#YacapazaGaGaGaGaGaGaGaGaGaGaGaGaGaCazazaCaC#T.#.#.#.##U#8am.#.#.#.####3ajataz#S.#.#.#.##7alayaG", +"......................................................................................................................................................aGaGaGaGaGaGaGaG.w.#.#.#.w#T#8am.#.#.#.##k#3ajawaG#T.#.#.#.##3akawaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCaCaGaG#v.#.#.#.##T#6alayaGaGaGazay.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGan.#.#.#.##k#6alayaGaGaGaGaGaGaGan.#.#.#.##k#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.w.#.#.#.w#T#8amayaGaG.#.#.#.#.#.#.#.7#2#1acapazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCaCaGaG#v.#.#.#.##T#6alayan.#.#.#.s#8#8.G.#.#.#.y#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGan.#.#.#.##k#6alayaG.Z.#.#.#.#.#.#.#.#.gajazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.w.#.#.#.w#T#8am.Y.#.#.#.#.#.#.#.#.#.#.#.OatazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCaCaGaG#v.#.#.#.##T#6alayaGaGaGaGaGaG.h.#.#.#.Y#W#3agataCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGan.#.#.#.##k#6alayaG.Y.#.#.#.#.#.#.#.#.#.W#W#3agataCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.w.#.#.#.w#T#8al.u.#.#.#.b#Talayan.w.#.#.#.##1agasaC", +"......................................................................................................................................................aGaGaGaGaGaGaG#k.#.#.#.##p#Waaao.#.#.#.##k#6alayaG#U.#.#.#.##1agasaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaa.#.#.#.#.L#T#7amayaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.i.#.#.#.e#W#8amayaGaGaGaGaGaGaG.i.#.#.#.e#W#8amayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#k.#.#.#.##p#WaaapazaGaG.#.#.#.#.#.#.r#e#3#9akataCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaa.#.#.#.#.L#T#7amay.Z.#.#.##C#3ab.L.#.#.#.y#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.i.#.#.#.e#W#8amayaG.h.#.#.#.#.#.#.#.#.#.gagazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#k.#.#.#.##p#Waaap.#.#.#.#.#.#.#.#.#.#.#.#.###arazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaa.#.#.#.#.L#T#7amayaGaGaGaGaG#w.#.#.#.##O#YaaanayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.i.#.#.#.e#W#8amayaGaz#p.#.#.#.#.#.#.#.o#D#YaaanayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#k.#.#.#.##p#Waaao#r.#.#.#.#.#.K.V.#.#.#.#.#.##Wabapaz", +"......................................................................................................................................................aGaGaGaGaGaG#W.#.#.#.#.A#W#2agar.#.#.#.##j#6alayaG#U.#.#.#.##WaaapazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGan.i.#.#.#.e#z#YabapazaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.0.#.#.#.##l#YabapazaGaGaGaGaGaG.0.#.#.#.##l#YabapazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#W.#.#.#.#.A#W#2agataCaGaG.#.#.#.#.#.#.#.#.e#4arazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGan.i.#.#.#.e#z#Yabap#8.#.#.#.2#2#6ah.V.#.#.#.y#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.0.#.#.#.##l#YabapazaG.Z#S#z#p##.w.#.#.#.#.###asazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#W.#.#.#.#.A#W#2agas.#.#.#.#.#.7#Y#2#v.c.#.#.#.#ajarazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGan.i.#.#.#.e#z#YabapazaGaGaGaGaG.i.#.#.#.Y#W#3agasaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.0.#.#.#.##l#YabapazaG#T.g.#.#.#.#.#.#.#.#.c#TaiataCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#W.#.#.#.#.A#W#2agasay.g.#.#.#.#.#.#.#.#.#.#.#.a#U#8anay", +"......................................................................................................................................................aGaGaGaGaG#W.#.#.#.#.e#Y#Zaaanay.#.#.#.##i#6alayaG#U.#.#.#.##T#7amayaGaGaGaGaGaGaGaGaGaGaGaGaGaGan.i.#.#.#.##t#W#8ajataCaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.0.#.#.#.#.Y#W#3agataCaGaGaGaGaG.0.#.#.#.#.Y#W#3agataCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#W.#.#.#.#.e#Y#ZaaanayaGaGaGazanab#R.O.#.#.#.#.sarazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGan.i.#.#.#.##t#W#8ajat.h.#.#.#.o.A.D.L.g.#.#.#.c.C.LayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.0.#.#.#.#.Y#W#3agataCaGaGazaqaf#9#6#T.e.#.#.#.eakataCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#W.#.#.#.#.e#Y#Zaaanay.#.#.#.#.G#R#X#3#6#e.#.#.#.##pakataCaGaGaGaGaGaGaGaGaGaGaGaGaGaGan.i.#.#.#.##t#W#8ajataCaGaGaGaG#w.#.#.#.##O#YaaanayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.0.#.#.#.#.Y#W#3agataC#W.#.#.#.#.W#i.k.#.#.#.#.eaaawaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#W.#.#.#.#.e#Y#ZaaanayaCaj.t.#.#.#.#.#.#.F.#.#.#.w#Waaapaz", +"......................................................................................................................................................aGaGaGaG#W.#.#.#.#.e#P#0#9akataz.w.#.#.#.L#6alayaG#k.#.#.#.k#T#7amayaGaGaGaGaGaGaGaGaGaGaGaGaGan.i.#.#.#.##n#W#2agarazaGaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.0.#.#.#.#.D#Y#0abanayaGaGaGaGaG.0.#.#.#.#.D#Y#0abanayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#W.#.#.#.#.e#P#0#9akataCaGaGaGazaqag#9#7#n.#.#.#.##UarazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGan.i.#.#.#.##n#W#2agaraz.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#asazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaG.0.#.#.#.#.D#Y#0abanayaGaGaGaCayaqanalak#k.#.#.#.#abanayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#W.#.#.#.#.e#P#0#9akataz.#.#.#.##e#U#6aeakal.#.#.#.##macapazaGaGaGaGaGaGaGaGaGaGaGaGaGan.i.#.#.#.##n#W#2agarazaGaGaGaGaG.i.#.#.#.Y#W#3agasaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.0.#.#.#.#.D#Y#0abanayaG.#.#.#.##i#1#Y#1#n.#.#.#.##marazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#W.#.#.#.#.e#P#0#9akataCaGaCat#V.0.A.A#c#T.o.#.#.#.7#1afasaC", +"......................................................................................................................................................aGaGaG#k.#.#.#.#.e#P#0#8ajarazaG.Z.#.#.#.w#6alayaG.Z.#.#.#.w#WaaapazaGaGaGaGaGaGaGaGaGaGaGaG#W.i.#.#.#.##p#Y#0aaanayaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGan.y.#.#.#.#.D#0#0#9akataCaGaGaGan.y.#.#.#.#.D#0#0#9akataCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#k.#.#.#.#.e#P#0#8ajarazaGaGaGaGaCayaqanalaj.#.#.#.##pakataCaGaGaGaGaGaGaGaGaGaGaGaGaG#W.i.#.#.#.##p#Y#0aaanayaG.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#akaqayaGaGaGaGaGaGaGaGaGaGaGaGan.y.#.#.#.#.D#0#0#9akataCaGaGaGaGaCazayayaw#O.#.#.#.##3agataCaGaGaGaGaGaGaGaGaGaGaGaGaG#k.#.#.#.#.e#P#0#8ajarazaG.w.#.#.#.7#0aeapauay.#.#.#.##j#8amayaGaGaGaGaGaGaGaGaGaGaGaG#W.i.#.#.#.##p#Y#0aaanayaGaGaGaGaG#w.#.#.#.##O#YaaanayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGan.y.#.#.#.#.D#0#0#9akataC#W.#.#.#.##2#1#7aeai.r.#.#.#.DakataCaGaGaGaGaGaGaGaGaGaGaGaGaG#k.#.#.#.#.e#P#0#8ajarazaGaGaGazasakac#8#8#p.#.#.#.##A#3akawaG", +"......................................................................................................................................................aGaG.0.#.#.#.#.D#0#0#8ajarazaGaG#T.#.#.#.##Takawan.#.#.#.##k#1agasaCaGaGaGaGaGaGaGaGaGaGaG#W.#.#.#.#.f#X#1#1#9akataCaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGan.i.#.#.#.##p#0#0#8ajarazaGaGaGan.i.#.#.#.##p#0#0#8ajarazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.0.#.#.#.#.D#0#0#8ajarazaGaGanaGaGaGaCazayay#4.#.#.#.##macapazaGaGaGaGaGaGaGaGaGaGaGaG#W.#.#.#.#.f#X#1#1#9akataCaG.Z.O.F.A.y.A.B.D.e.#.#.#.a.w.AaaajarazaGaGaGaGaGaGaGaGaGaGan.i.#.#.#.##p#0#0#8ajarazaGaGaGaGaGaGaGaGaGaG.Z.#.#.#.k#YacapazaGaGaGaGaGaGaGaGaGaGaGaG.0.#.#.#.#.D#0#0#8ajarazaGaG#i.#.#.#.b#3ajauaC#T.#.#.#.##z#6alayaGaGaGaGaGaGaGaGaGaGaG#W.#.#.#.#.f#X#1#1#9akataCaGaGaGaGan.i.#.#.#.Y#W#3agasaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGan.i.#.#.#.##p#0#0#8ajarazaG#W.#.#.#.##B#1aeapat.O.#.#.#.AacapazaGaGaGaGaGaGaGaGaGaGaGaG.0.#.#.#.#.D#0#0#8ajarazaGaGaGaGaGazatapan#z.#.#.#.#.V#W#8alayaG", +"..........aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG................................aG.0.#.#.#.#.#.A.A.D.K.V.Y#vaGaGaG.g.#.#.#.A#3ag.Z.#.#.#.e#W#7alayaGaGaGaGaGaGaGaGaGaGaG#W.#.#.#.#.#.p.A.B.E.K.V.ZaGaGaGaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaGan.i.#.#.#.#.e.A.A.D.K.V.Za.aGaGan.i.#.#.#.#.e.A.A.D.K.V.Za.aGaGaGaGaGaGaGaGaGaGaGaGaGaG.0.#.#.#.#.#.A.A.D.K.V.Y#vaGaG#W.i#k#WaGaGaG#v.h.#.#.#.##U#8anayaGaGaGaGaGaGaGaGaGaGaG#W.#.#.#.#.#.p.A.B.E.K.V.ZaGaGazarahaa#7#7#8aa.D.#.#.#.w#U#2aaajarazaGaGaGaGaGaGaGaGaGan.i.#.#.#.#.e.A.A.D.K.V.Za.aGaG#W.0#WanaGaGaa.Z.#.#.#.#.8#YacapazaGaGaGaGaGaGaGaGaGaGaG.0.#.#.#.#.#.A.A.D.K.V.Y#vaGaGal.#.#.#.#.B#8aua..h.#.#.#.k#T#7amayaGaGaGaGaGaGaGaGaGaG#W.#.#.#.#.#.p.A.B.E.K.V.ZaGaGaGaGaG#k.#.#.#.##O#YaaanayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGan.i.#.#.#.#.e.A.A.D.K.V.Za.aGaa.#.#.#.#.w#3ajau#T.#.#.#.####8anayaGaGaGaGaGaGaGaGaGaGaG.0.#.#.#.#.#.A.A.D.K.V.Y#vaGaGaGaGaGaGal#S.w.#.#.#.#.e#D#0acapazaG", +"..........aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.................................0.#.#.#.#.#.#.#.#.#.#.#.#.YazaCaG#T.#.#.#.#.#.#.#.#.#.##l#YaaaoazaGaGaGaGaGaGaGaGaGaG#W.#.#.#.#.#.#.#.#.#.#.#.#.#ayazaCaGaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.#.#.#.#.#.#.#.#.#.##SazaC.#.#.#.#.#.#.#.#.#.#.#.#.##SazaCaGaGaGaGaGaGaGaGaGaGaG.0.#.#.#.#.#.#.#.#.#.#.#.#.YazaC.0.#.#.#.#.#.#.#.#.#.#.#.7#T#8anayaGaGaGaGaGaGaGaGaGaG#W.#.#.#.#.#.#.#.#.#.#.#.#.#ayazazayaqanalalalal.L.#.#.#.w#ZabakaqayaGaGaGaGaGaGaGaGaGaG.#.#.#.#.#.#.#.#.#.#.#.#.##SazaC#k.#.#.#.#.#.#.#.#.#.#.o#W#3agataCaGaGaGaGaGaGaGaGaGaG.0.#.#.#.#.#.#.#.#.#.#.#.#.YazaCaG#s.#.#.#.#.#.#.#.#.#.#.##z#WaaapazaGaGaGaGaGaGaGaGaG#W.#.#.#.#.#.#.#.#.#.#.#.#.#ayazaCaGan.#.#.#.#.Y#W#3agasaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.#.#.#.#.#.#.#.#.#.##SazaC.w.#.#.#.#.e.K.u.#.#.#.#.e#W#8anayaGaGaGaGaGaGaGaGaGaG.0.#.#.#.#.#.#.#.#.#.#.#.#.YazaCaG#W.#.#.#.#.#.#.#.#.e#O#0#9akataCaG", +"..........aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.................................0.#.#.#.#.#.#.#.#.#.#.#.#.LaqayaCaC.V.#.#.#.#.#.#.#.#.A#W#3agataCaGaGaGaGaGaGaGaGaGaG#W.#.#.#.#.#.#.#.#.#.#.#.#.#anaqayaCaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.#.#.#.#.#.#.#.#.#.##zaqay.#.#.#.#.#.#.#.#.#.#.#.#.##zaqayaCaGaGaGaGaGaGaGaGaGaG.0.#.#.#.#.#.#.#.#.#.#.#.#.Laqay.h.#.#.#.#.#.#.#.#.#.#.W#T#YabapazaGaGaGaGaGaGaGaGaGaG#W.#.#.#.#.#.#.#.#.#.#.#.#.#anaqawazazayayayayay.Y.#.#.#.y#3aiasazaCaGaGaGaGaGaGaGaGaGaG.#.#.#.#.#.#.#.#.#.#.#.#.##zaqay.w.#.#.#.#.#.#.#.#.#.D#O#0abanayaGaGaGaGaGaGaGaGaGaGaG.0.#.#.#.#.#.#.#.#.#.#.#.#.LaqayaCaz.O.#.#.#.#.#.#.#.#.##m#W#3agataCaGaGaGaGaGaGaGaGaG#W.#.#.#.#.#.#.#.#.#.#.#.#.#anaqayaC#k.#.#.#.##D#YaaanayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.#.#.#.#.#.#.#.#.#.##zaqawaj.g.#.#.#.#.#.#.#.#.#.e#D#0acapazaGaGaGaGaGaGaGaGaGaG.0.#.#.#.#.#.#.#.#.#.#.#.#.LaqayaC#W.#.#.#.#.#.#.#.p#P#0#8ajarazaGaG", +"..........aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.................................0.#.#.#.#.#.#.#.#.#.#.#.#.DagaqazaGay#o.e.#.#.#.#.e#m#Y#1abanayaGaGaGaGaGaGaGaGaGaGaG#W.#.#.#.#.#.#.#.#.#.#.#.#.##9agaqazaGaGaGaG.#.#.#.##i#6alayaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.#.#.#.#.#.#.#.#.#.##pagaq.#.#.#.#.#.#.#.#.#.#.#.#.##pagaqazaGaGaGaGaGaGaGaGaGaG.0.#.#.#.#.#.#.#.#.#.#.#.#.Dagaq#8.Z.#.#.#.#.#.#.#.o#v#Y#Z#9akataCaGaGaGaGaGaGaGaGaGaG#W.#.#.#.#.#.#.#.#.#.#.#.#.##9agaqazaGaGaGaGaGaG.Z.#.#.#.A#6alayaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.#.#.#.#.#.#.#.#.#.##pagaq#i.h.#.#.#.#.#.#.o#c#Z#1#9akataCaGaGaGaGaGaGaGaGaGaGaG.0.#.#.#.#.#.#.#.#.#.#.#.#.DagaqazaCat#z.e.#.#.#.#.#.o#Q#Y#1abanayaGaGaGaGaGaGaGaGaGaG#W.#.#.#.#.#.#.#.#.#.#.#.#.##9agaqal.#.#.#.#.V#W#3agasaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.#.#.#.#.#.#.#.#.#.##pagaqayat##.e.#.#.#.#.#.#.0#P#0#9akataCaGaGaGaGaGaGaGaGaGaG.0.#.#.#.#.#.#.#.#.#.#.#.#.Dagaqaz#U.#.#.#.#.#.C#w#0#1#9ajarazaGaGaG", +"..........aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG................................aGayanaa#Y#T#S#S#T#W#W#W#Y#1abanayaGaCatal#O#n#m#t#Y#0#3abalataCaGaGaGaGaGaGaGaGaGaGaGaGayanaa#Y#T#S#S#T#W#W#W#W#Y#1abanayaGaGaGaGayan#8#X#X#8anayaGaGaGaGaGaGaGaGaGaGaGaGaGaGazanab#0#U#S#S#T#W#W#W#W#Y#1abanatanab#0#U#S#S#T#W#W#W#W#Y#1abanayaGaGaGaGaGaGaGaGaGaGaGayanaa#Y#T#S#S#T#W#W#W#Y#1abanayazar#R#n#m#k#t#X#Y#0#3abakarazaGaGaGaGaGaGaGaGaGaGaGaGayanaa#Y#T#S#S#T#W#W#W#W#Y#1abanayaGaGaGaGaGaGaGayan#9#1#9anayaGaGaGaGaGaGaGaGaGaGaGaGazanab#0#U#S#S#T#W#W#W#W#Y#1abanayazar#u#n#m#k#X#Y#0#3abakarazaGaGaGaGaGaGaGaGaGaGaGaGaGayanaa#Y#T#S#S#T#W#W#W#Y#1abanayaGazasak#Z#n#m#l#X#Y#0#3abalataCaGaGaGaGaGaGaGaGaGaGaGayanaa#Y#T#S#S#T#W#W#W#W#Y#1abanayaCauak#8#Y#1abanayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGazanab#0#U#S#S#T#W#W#W#W#Y#1abanayazarak#Z#o#n#p#A#6#1#1#9ajarazaGaGaGaGaGaGaGaGaGaGaGaGayanaa#Y#T#S#S#T#W#W#W#Y#1abanayan#S#B#r#R#Y#Y#0#3abakarazaGaGaGaG", +"..........aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG................................aGazaqag#9#6#6#6#6#6#6#6#7#9agaqazaGaGazatanagab#8#8abaganatazaGaGaGaGaGaGaGaGaGaGaGaGaGazaqag#9#6#6#6#6#6#6#6#6#7#9agaqazaGaGaGaGazaqaf#9#9afaqazaGaGaGaGaGaGaGaGaGaGaGaGaGaGazaqag#9#6#6#6#6#6#6#6#6#7#9agaqawaqag#9#6#6#6#6#6#6#6#6#7#9agaqazaGaGaGaGaGaGaGaGaGaGaGazaqag#9#6#6#6#6#6#6#6#7#9agaqazaCatalad#8#7#6#7#8abaganatazaGaGaGaGaGaGaGaGaGaGaGaGaGazaqag#9#6#6#6#6#6#6#6#6#7#9agaqazaGaGaGaGaGaGaGazaqagabagaqazaGaGaGaGaGaGaGaGaGaGaGaGazaqag#9#6#6#6#6#6#6#6#6#7#9agaqazaCatalad#8#7#7#8abaganatazaGaGaGaGaGaGaGaGaGaGaGaGaGaGazaqag#9#6#6#6#6#6#6#6#7#9agaqazaGaGazatanagab#8#7#8abaganatazaGaGaGaGaGaGaGaGaGaGaGaGazaqag#9#6#6#6#6#6#6#6#6#7#9agaqazaCatalac#9acalataCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGazaqag#9#6#6#6#6#6#6#6#6#7#9agaqazaGazatanahacaaaa#9#9acakarazaGaGaGaGaGaGaGaGaGaGaGaGaGazaqag#9#6#6#6#6#6#6#6#7#9agaqazaGazaqag#9#7#8abaganatazaGaGaGaGaG", +"..........aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG................................aGaCayaqanalalalalalalalalanaqayaCaGaGaGaCayatapananapatayaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCayaqanalalalalalalalalalanaqayaCaGaGaGaGaCayaqananaqayaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCayaqanalalalalalalalalalanaqayazayaqanalalalalalalalalalanaqayaCaGaGaGaGaGaGaGaGaGaGaGaCayaqanalalalalalalalalanaqayaCaGazatapanalalalamapatayaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCayaqanalalalalalalalalalanaqayaCaGaGaGaGaGaGaGaCayaqanaqayaCaGaGaGaGaGaGaGaGaGaGaGaGaCayaqanalalalalalalalalalanaqayaCaGazatapanalalamapatayaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCayaqanalalalalalalalalanaqayaCaGaGaGaCayatapamalamapatayaCaGaGaGaGaGaGaGaGaGaGaGaGaGaCayaqanalalalalalalalalalanaqayaCaGayarananapatazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCayaqanalalalalalalalalalanaqayaCaGaGaCayatapanalalanapatazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCayaqanalalalalalalalalanaqayaCaGaCayaqanalamapatayaCaGaGaGaGaGaG", +"..........aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG................................aGaGaCazayayayayayayayayayayazaCaGaGaGaGaGaGaCazayayazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCazayayayayayayayayayayayazaCaGaGaGaGaGaGaCazayayazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCazayayayayayayayayayayayazaCaGaCazayayayayayayayayayayayazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaCazayayayayayayayayayayazaCaGaGaGaCazayayayayayazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCazayayayayayayayayayayayazaCaGaGaGaGaGaGaGaGaGaCazayazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCazayayayayayayayayayayayazaCaGaGaGaCazayayayayazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCazayayayayayayayayayayazaCaGaGaGaGaGaGaCazayayayazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCazayayayayayayayayayayayazaCaGaGaGazayayazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCazayayayayayayayayayayayazaCaGaGaGaGaGaCazayayayayazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCazayayayayayayayayayayazaCaGaGaGaCazayayayazaCaGaGaGaGaGaGaGaG", +"..........aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", +"..........aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", +"..........aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG................................aGaGan#W#k.0.0.0#vaaaGaGaGaGaGaGaGaGaGaGaa#k.0.0#kaaaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#W#w.0.0.0#k#WaGaGaGaGaGaGaGaGaGaGaGaGaa#W#W#WanaGaGaG....aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGan#WanaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaa#WaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.............Q.Q...........d.d.........d.Q.Q.........Q.Q.Q.Q.Q.Q.d.............d.d.................m.m.............Q.Q.d.......Q.Q.Q.Q...d.Q.d.........m.Q.m...............d.Q.Q........................", +"..........aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG................................an.y.#.#.#.#.#.#.#.#.YalaCaGaGaGaGaGan.0.#.#.#.#.#.#.walaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#k.#.#.#.#.#.#.#.#.h#8aCaGaGaGaGaGaGaG#w.y.#.#.#.##SazaCaG....aGaG.#.0aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.0.#.#.#.ZaGaGaGaGaG#W.##TazaCaGaGaGaGaGaG.0.#.ZaG.w.#.ZaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.y.#.##TaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.##Tan.#.##TaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.0.#aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#W.##UaGaGaGaGaGaG.0.#azazaGaGaGaG#w.#.#.ZaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#W.i.#.#a.aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGan#k.#.#.ZanaGaGaGaGaGaGanaaaGaGaGaGaG#W.#.haG#T.##UaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.h#ianaGaGaGaGaGaGaGaGaGaGaGaGaG........#E#I#I#I#H.d......#F#F......#F#I#I#I#H.....Q#I#I#I#I#I#I.Q...........d#H#F......#F#H#I#I#I#I#E.........Q#H#I#I#I.R...Q#I#I#I#I#I#I#H.d.....d#G#I#I#I#G..........#E#I#I#I#H.m....................", +"..........aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG................................an.#.#.#.#.#.#.#.#.#.#.gatazaGaGaGaG.y.#.#.#.#.#.#.#.#.gatazaGaGaGaGaGaGaGaGaGaGaGaGaGaG.y.#.#.#.#.#.#.#.#.#.##3ayaCaGaGan#w.i.#.#.#.#.#.##BaqayaC....aGaG.#.ZatatazaGaGaGaGaGaGaGaGaGaGaGaGaG.0.##P#C#ZaqataCaGaG#W.##OapataCaGaGaGaGaG.0.#.gar.#.#.VaqatazaGaGaGaGaGaGaGaGaGaGaGaGaG.#.Z.#.OaqawaCaGaGaGaGaGaGaGaGaGaGaGaGaG.#.##e#O.#.##OarayaCaGaGaGaGaGaGaGaGaGaGaGaGaGaG.0.#atatazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#W.##RatayaCaGaGaG.0.#aqaoayaGaGaG.0.#.Y.#apatazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.i.h#R#paparayaGaGaGaGaGaGaGaGaGaGaGaGaGaG.y.##u#r.#.tasayaGaGaGaG.#.ZaCaCaGaGaG#W.#.##p#O.##RatayaCaGaGaGaGaGaGaGaGaGaGaGaGaG.#.w#O#c.#.tatazaGaGaGaGaGaGaGaGaGaGaG......#F#I.R...d#H#G....#F#I#F....#E#H.R...d#H.R...Q#I......#H#H.d..........#F#I#F......#I#F.Q.Q.d...........Q#I#F.d..#F#H...Q#I.Q.Q...d#I.R......#E#H.m...d#I.Q......#F#I.R...d#F#H.d..................", +"..........aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG................................aG.h.#.#.F.D.p.#.#.#.#.##masazaGaG#k.#.#.#.#.q.p.#.#.#.##barazaGaGaGaGaGaGaGaGaGaGaGaGaG#k.#.#.r.E.D.#.#.#.#.#.saoawaCaGaa.#.#.#.#.#.#.#.##pagaqaz....aGaG.#.Vag.f.#.##TaG.#.Z.h.##TaGaGaGaGaG.Z.##w#p#Xae.L.#.wan#T.#.L.#.fajaCaGaGaGaG.w.g.f#D.r.#.F#9#T.#.#.hal#T.##k.#aGaGaGaGaGaa.##e.#.eaa.L.v.h.##kaG.Z.w.w.ZaGaGaGaGan.#.u.r#i.s.##raa#c.#.#.ZaG.w.waG.w.haGaGaGaGaGaG.Z.#aj.#.VaC.Z.#aG.#.Z.h.##TaGaGaGaGaGaG#W.##B.F.#ay#T.##U.Z.#agaearaGaGaG.h.g.K.##B#u.##TaG.#.ZaG#U.#.h.h.ZaGaGaGaGaG.#.g#Wacabag.V.#.wan#T.#.Z.#.wanaGaGaGaGaa.##iaoag.7.##Rac.w.##k.Z.#.#.OarayaGaG#W.#.t.q#s.##zag#c.#.h#TaG.h.haG.w.haGaGaGaGaG.#.Vad#8#i.##Sac.h.##kaGaG#k.#.haGaGaG.....R#I.Q.......m#I.m#F#H#G#F...m#I.m......#F#F...Q#I....#F#H.d..........#E#H#G#F......#I.Q...............m#I#F.............m#I.m....#E#I.d......#I.Q.....Q#I.d.....d#I.R.......Q#I.Q..................", +"..........aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG................................aG#i#raj#9#3#7#W.#.#.#.#.DakataCaG.#.#.#.##i#1#1#e.#.#.#.##8arazaGaGaGaGaGaGaGaGaGaGaGaG#W#iacac#7#7#8.o.#.#.#.#aeaoayaGaG.#.#.#.s.#.#.#.##k#9anay....aGaG.#.O#9#0#C.g.#aq.#.var.u.#arawaCaGaG.Z.#.#.##p#k.##4.##e#O.####A.##carayaGaGaG.#.V.E.A.D.e.##Yaa#2#s.#.O#O.#.g.VaratazaGaG#w.##B.D.##O.E.#ag#e.##1.V.#.u#parauaCaG#W.##B.#.A.0.#.A#1#6#4.W.##C#r.#at.##iatatazaGaGaG.Z.#ac.#.Lar.V.#at.#.uar.u.#arawaCaGaGaG#W.##x.D.#ao#O.##R.V.#aa#9aoaCaGan.#.V#r.##b#p.##Oas.#.Yag.##iaj.#.OaratazaGaG#T.#.#.e#Y#m.##8.##e#O.##r#2.##easayaGaG#W.##Oad#9#s.##p.r.gajagar.#.LacadapazaG#U.##m.#.W.##s#i.##3#e.#af#i.#at.##iatatazaGaG.#.O#8#3#s.##p.r.t#s.##2#r.##Tagarataz....#G#G..........#I.Q.d.m#F#F...d#F........#H#E........#F#I#I#H.d.......Q#I.m#F#F.....Q#I.R#E#I#I#H.Q....#G#H...m#G#I#I#E...........d#I#E........#I.R#E#I#I#H.R.....Q#I........#F#I#F...d.m............", +"..........aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG................................aGaGawanafadagaj.F.#.#.#.Aacapaz#v.#.#.#.e#0#0#8ae.e.#.#.##iakataCaGaGaGaGaGaGaGaGaGaGaGaGazaraiaeagaj#u.#.#.#.##3ahataCaG.Z#e#7aa.#.#.#.##i#6alay....aGaG.#.O#W.e.g.f.#aa.#.Lae.E.#adakawaGaG.Z.#aa#1#8.F.#.#.#.E#u.##u#3.#.EaeanazaGaG.#.O.D.A.Y.D.##W#p.#.t.#.E#s.##xacabahataGaG.0.#.#.#.##m.D.#ag#s.##s.G.#agabadalayaG#W.##z.#.A#x.#.A#0.F.#.t.##r#2.#.K.#a.agajataGaGaG.Z.#ab.#.Fae.G.#ah.#.Kae.E.#adakawaGaGaG#U.##x.D.#ad#u.##z.F.##8#8aoaCaG#W.#.#.#.#.A#n.##xaf.#.O#u.##Baj.#.EabajataGaGaGae#i.#.E.L.#.#.#.E#u.##xad.#.FafaoazaGaa.##n#9ab#n.##O.#.Gakafag.#.F#2#3akayaG#U.##w.Y.e.##p.C.#al#w.##u#x.#.F.##VagajataGaG.#.O#8#9#c.##O.#.#.#.##r.G.#apahaealaw....#I.Q..........#I.Q....#F#F...........m#H#I.m......#F#I#G#F#H#H.....m#I.Q..#F#F.....Q#I#I#G.Q.Q#F#I.d.d#I.Q.Q#I#H.R#E#I.m........#E#I.d.........R#I#I#E.Q#E#I#F...m#I.R...Q#G#I#H#F..#H#I............", +"..........aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG................................aGaGazauaqaqasag.g.#.#.####8anay.Z.#.#.#.A#Y#8aiap.O.#.#.#.AacapazaGaGaGaGaGaGaGaGaGaGaGaGaCayaraqasat.V.#.#.#.k#YacapazaGazarajac.#.#.#.##i#6alay....#w#w.##c#p.##z.r.##0.#.F#7.D.##8aaaqaGaG.Z.#aa#0#7.7.##2#T#2#n.##i#y.##i#8agataGaa.##c#p.##n.D.##O.D.#ac.#.B#m.##r#3#7agataGaG.#.u#u#n.#.A.A.##X.Z.##D.D.##9#2aaalayaG#k.##U.C.##1.#.o#1.#.L#m.##n#6.r.e.pab#9agataG#W#W.h.gab.#.q#8.q.#ab.#.F#7.D.##8aaaqaGaa#W.Z.##T.D.##U#e.##w.D.##6#8aoaCaG.0.##z#n.l.##m.##i#X.#.K#B.#.8#Y.#.E#6acaraGaG#U#R#m.#.0.1.##2#T#2#n.##i#z.#.2#8agataGaG.h.##e#k.#.uaf.e.e#X#Xaj.#.s#T#8anazaG#U.##w#y.#.##m#c.##P.0.##Yaa.#.q.eaa#8afataGaG.#.t#p.2.#.Vaf.e.q#8#R#1.0.##u#Xafapay...Q#I.d.........m#I.m....#F#F.........R#I#H.m.........m.m.....d#I.Q.d#H.Q....#F#G.R#E.Q#I.Q........#I.Q.Q#I.m#I#H.d....#G#F........#H#F.........d#H#F.d.......R#I.....Q#I#I#I#G.m#F#F..#H#H............", +"..........aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG................................aGaGaG#T#T#T#i.h.#.#.#.o#W#8anay.h.#.#.####1aearay#S.#.#.#.c#8amayaGaGaGaGaGaGaGaGaGaGaGaGaGa.#T#T#u.w.#.#.#.##z#YacapazaGaCayaran.#.#.#.##i#6alay.....i.#.u#8#U.e.#.p.##Y.#.E#6.D.##9#8aoaCaG.Z.#ab#3agac.t.#.##w#p.#.E.#.qae#7aeataG#W.##B#p.##p#p.##n#o.#.f.e.A#m.##p#3adapazaGaa.##eaa#0.e.e.A.#.e.#.7ac.D.##7#6ajataCaG.Z.#ag.D.##2.C.##3.D.#.r.##m#2#k.##e#3#8alayaG#k.#.h#B#9#p.#.e.D.##9.#.E#6.D.##9#8aoaCaa.#.##eae#U.e.#.0.##u.D.##6#8aoaCaG.h.gag#1.W.##u.B.#.o.r.G#7.0.#.o.#.F#7abaraGaG.y.#.####8#S.p.#.##w#p.#.e.#.q#2#7adasaGaGak.t.#.##cacac#p.e.#.0an#r.#.0aaapaCaG#U.##x#7.p.##m#Z.0.#.e#uac#8.F.#.Y#2#7akayaGaG.#.#.#.e#canab#p.e.#.c#2#X.r.#.eajataC...Q#I..........#E#H......#F#F......#E#I#E......................#I.Q#H#I#I#I#I#I#I#F#F..............#I.Q.Q#I#H#H.d......#G#F.......R#I.m........#H#F..........#F#G.........Q.d...d#I.Q...d..............", +"..........aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG................................aGaGaG.#.#.#.#.#.#.#.7#2#1acapaz.#.#.#.##k#3ajawaG#T.#.#.#.##3akawaGaGaGaGaGaGaGaGaGaGaGaGaG.0.#.#.#.#.#.#.r#R#X#3ahataCaGaGaGazay.#.#.#.##i#6alay....aGayalac#7acae#7#2#0#3ac#8abajab#9apaCaGaGarac#9anayatag#6#8aeajae#7aaab#9aiawaGaGazal#8#9aa#8aa#8#8afad#3#3#1#7aa#8aiawaGaGaGaCao#9#6acaa.B.##1#2aaaa#8ad#9#9anaCaGaGaGataf#8ab#8#8ad#7#9ag#9#2#1#3.F.##X#1aaapaCaGaGayapaf#7aaagaa#8ad#8#7ad#8abajab#9apaCaGaCaraj#9#8aeab#7adab#7aa#8#9apaCaGaGasad#3aaac#6#3#9#7abad#7#Xad#p.##i#3abaraGaGaGayanaf#9#7abaa#3#8#u.##u#3#9ab#8agataGaGaCaqac#8acac#9acagaa#8aiaranaa#9anazaGaGayaj#9aeae#2#1acad#9abaaabalal#7#1#9apaCaGaGaCao#8#3acac#9aeai#9#3aaagalae#8aeapay...Q#I.........m#I#E......#F#F.....Q#I.Q..........#F#E.........Q#I.d#F#F#E.Q.Q#F#F.....d.Q.........R#I...d#I#I.d.......Q#I.Q......#H#G.........Q#I.d........#F#I.m..#E#F........#F#I.d..................", +"..........aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG................................aGaGaG.#.#.#.#.#.#.r#e#3#9akataC.#.#.#.##k#6alayaG#U.#.#.#.##1agasaCaGaGaGaGaGaGaGaGaGaGaGaG.0.#.#.#.#.#.e.0#R#3adaoayaGaGaGaGaGaG.#.#.#.##i#6alay....aGatajacaealamadaa#9adajaeahanahagaraGaGaGatajagaraCazaoaeadahanaladadadafaqazaGaGazanafaiajafaiagaeajaiabaaaaaeagafanayaGaGaGaCapafagapan.F.##2#0#8acagalagagaraGaGaGaGauajafakagafalagafalafaaaa#s.##Bac#3afataGaGaGayanaeacakapajadadacaeajaeahanahagaraGaGazaragabagaoalaeadaeadagaeafaraGaGaGatagaeanapagadagaeadaead.f.#.#.0#7#1acaraGaGaGawaladacaganalaead#w.##u#3#6aaaeaoazaGaGaGayanadaaacaganarakadaganaqajaeanayaGaGayanagalanaeabalanagadaealataragabaiataGaGaGaGarad#8aaacagaparaladaeakaranaeadalaw...d#I.R.....R#I#H........#F#F...d#H#F.......m#H..#F#E.......Q#I#E............#F#F....#F#I.d.....R#I.R....#F#H.d.....R#I#G.......R#I.Q.........m#I.Q.....Q#H#I.Q....#E#I.d.....R#I.R....#F#F............", +"..........aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG................................aGaGaG.#.#.#.#.#.#.#.#.e#4arazaG.#.#.#.##j#6alayaG#U.#.#.#.##WaaapazaGaGaGaGaGaGaGaGaGaGaGaG.0.#.#.#.#.#.#.#.##ualataCaGaGaGaGaGaG.#.#.#.##i#6alay....aGazasaqarayayarapaparataratayatatazaGaGaGazatatazaGaGayaraqarawauararaqasazaGaGaGaGayasatatasatatasatatarapaqaratasayaCaGaGaGaGayasatazayaral#9#6agapatayatatazaGaGaGaGazatasauatasawatasawataqaparataoacaaanazaGaGaGaCauararawazawaraqararataratayatatazaGaGaGayaraqatazayararararatarasazaGaGaGazatasayazatarataraqararataralad#8#7aiawaGaGaGazataqaqatazayaraqararah#8acamarayaGaGaGaGaGayarapaqatayazawararauayauarawaCaGaGaCayatawayasarawayatararawaCazatarataCaGaGaGaGazarapaparatazaCawaraqatayayaraqataz....#F#I#G#H#I#F.d........#G#F...R#I#I#I#I#I#I#I...m#I#G#F#H#I#F..............#G#G.....d#H#I#F#H#I.R........#H#I#F#H#I#E........#F#I............#F#I#H#I#I#G.d.......d#H#H#F#H#I#E......#I#I............", +"..........aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG................................aGaGaGazanab#R.O.#.#.#.#.sarazaC.#.#.#.##i#6alayaG#U.#.#.#.##T#7amayaGaGaGaGaGaGaGaGaGaGaGaGaGazanab#c.c.#.#.#.#a.arazaGaGaGaGaGaG.#.#.#.##i#6alay....aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCataiafarazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCazapagalataGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCaualaeadagarazaGaGaGaGaGaCaGaGaGaGaGaGaCayanagamayaCaGaGaGaGaGaGaGaGaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCaCaGaGaGaGaGaGaGaGaGaGaGaGaGaG.......Q#E.R.m.............m.m...d.Q.Q.Q.Q.Q.Q.Q.....m#F#F.R.m.................m.m.........Q#F.R.d.............R#F.R.d...........m.Q...............Q.R.Q.d.............d.R#F#E.d........#E.Q............", +"..........aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG................................aGaGaGazaqag#9#7#n.#.#.#.##Uaraz.w.#.#.#.L#6alayaG#k.#.#.#.k#T#7amayaGaGaGaGaGaGaGaGaGaGaGaGaGazaqag#9#U.e.#.#.#.7alataCaGaGaGaGaG.#.#.#.##i#6alay....aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGazatatazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGayatawaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGazataqaqatazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCayatayaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG........................................................................................................................................................................................................", +"..........aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG................................aGaGaGaCayaqanalaj.#.#.#.##pakat.Y.#.#.#.w#6alayaG.Z.#.#.#.w#WaaapazaGaGaGaGaGaGaGaGaGaGaGaGaGaCayaqanal.L.#.#.#.AacapazaGaGaGaGaG.#.#.#.##i#6alay....aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG........................................................................................................................................................................................................", +"..........aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG................................anaGaGaGaCazayay#4.#.#.#.##macap#R.#.#.#.##Takawan.#.#.#.##k#1agasaCaGaGaGaGaGaGaGaGaGaGanaGaGaGaCazayay.g.#.#.#.y#8amayaGaGaGaGaG.#.#.#.##i#6alay..............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", +"..........aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG................................#W.i#k#WaGaGaG#v.h.#.#.#.##U#8amay.g.#.#.#.A#3ag.Z.#.#.#.e#W#7alayaGaGaGaGaGaGaGaGaGaGaG.#.Z#TalaGaGa..w.#.#.#.##k#7alayaGaGaGaGaG.#.#.#.##i#6alay....aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#WaaaGaGaGaGaGaGaGaGaGaGaGaGaG#WaaaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaaanaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG...........j.T#N#N.T.j.j.j.j#J#N.j.j.j#J#N#N#J.j.j#J#N#N#J.j.j.j.j.n#N#K.j.j#N#N#N#N.T.j.T#M#N#K.j.T#N#N#N#N#N.j.j#K#N#N.T.j.j.U#N#N#J.j.j.j.j.........j.S.T.j.j.j.n.T.T.S.j....................................................................................................................................................................................................", +"..........aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.................................0.#.#.#.#.#.#.#.#.#.#.#.7#T#8anay#S.#.#.#.#.#.#.#.#.#.##l#YaaaoazaGaGaGaGaGaGaGaGaGaG#W.#.#.#.#.#.#.#.#.#.#.#.o#W#8amayaGaGaGaGaG.#.#.#.##i#6alay....aG.#.##Tan.#.##TaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#W.#.#.#.#.ZaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.0.#aG#T.##Uan.#.ZaGaGaGaGaGaGaGaGaG.#.ZazazaGaGaGaGaG.0.#.#.#.##T.#.ZazazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.#.#.##TaGaGaGaG.#.ZaCaCaGaGaGaGaGaG#k.#.#.haCaGaGaGaGaGaGaaanaGaGaGaGaGaGaGaG#W.i.#.#a.aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG...........n#N#M#M#N.n.j.j.T#N#N.j.j.U#N#L#L#N.U.S#N#L#L#N.U.j.j.j#J#N#K.j.S#N#L#K#K.S.n#M#M#L#N.U.S#K#K#K#N#M.j#J#N#L#M#N.S.S#N#M#L#N.U.j.j.j.........j#K#N.j.j.j.T#M#K#N.n....................................................................................................................................................................................................", +"..........aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG.................................i.#.#.#.#.#.#.#.#.#.#.W#T#Yabapazaz.V.#.#.#.#.#.#.#.#.A#W#3agataCaGaGaGaGaGaGaGaGaGaG#k.#.#.#.#.#.#.#.#.#.#.o#O#0acapazaGaGaGaGaG.#.#.#.##i#6alay....aG.#.##e#O.#.##OarayaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGan#T.w.##C#ZaqataCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG#W.##Q#e.g#i#O.##RasataCaGaGaGaGaGaG.#.YaoaqayaGaGaGaGaa#T.#.t#Cac.#.OanapayaGaGaGaGaGaGaGaGaGaGaGaGaGaG.#.w#O#CacarayaGaGaaajararazaGaGaGaGaa.#.Z#P#DapasazaGaGaG#W.##TaCaCaGaGaGaGaGaG.i.h#R#paparayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG...........U#N.S.S#N.U.j#J#N#N#N.j.j.U#N.n.j#N#K.U#L.j.j#N#K.j.j.S#N#N#K.j.T#N.T.j.j.j.T#N.S.j#K.S.j.j.j.T#N.S.j#K#N.j.T#N.T#K#N.n.j#L#K.j.S.T.........j#N#K.T.j.j.T#K.j#K.T....................................................................................................................................................................................................", +"..........aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG................................aa.Z.#.#.#.#.#.#.#.o#v#Y#Z#9akataCaGay#o.e.#.#.#.#.e#m#Y#1abanayaGaGaGaGaGaGaGaGaGaGaGan#i.g.#.#.#.#.#.#.e#c#Z#1#9akataCaGaGaGaGaG.#.#.#.##i#6alay....an.#.u.r#i.s.##raaaa.w.#.wanaG.#.0.h.##TaGaGaGaGaGaGaGaGaz.O.##8#7.E.#aw#T.##UaG.Z.#.wanaGaGaGaGaGaGaGaa.##z.F.L.L#u.##Waf.L.#.wanaG#k.#.h.#.OadagataGaGaGaGaGay.#.E#7#8.#.r.e.##OaC.#.ZaG.Z.#aGaGaGaGaGaGaGaG.#.u#u#paa.#.O.h#T.#.VakamayaGaGaGaG#W.#.V#6aaac##.#.#.ZaG.#.#.##CasazaGaGaGaGaG.#.g#Wacab.G.#az#T.##U.Z.w.w.#.ZaGaGaGaGaGaG..........#K#N.j.j#N#K.j#J.T#K#N.j.j.j.j.j.n#N#K.j.j.j.T#N#J.j.j#L#L#N#K.j.U#N#M#N#J.j#K#N.n.T.n.j.j.j.j#L#L.j.j.U#N.U#K#N.n#K#N.j.j#K#N.j#K#N.........T#L.U#J.j.j.T#M#K#N.n....................................................................................................................................................................................................", +"..........aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG................................aGazar#R#n#m#k#t#X#Y#0#3abakarazaGaGaCatal#O#n#m#t#Y#0#3abalataCaGaGaGaGaGaGaGaGaGaGaGaGazar#4#p#m#m#k#X#Y#0#3abakarazaGaGaGaGaGaGayan#8#X#X#8anay....#W.##B.#.A.0.#.A#1.s.gay.g.uas.#.war.u.#arawaCaGaGaGaGaGaC.V.##3#1.F.#aq#O.##R#r.##8.##easayaGaGaGaGaGaG.#.K.e.7.e.D.#ac#f.##2.##e#3.##iag.#.G#6abaraGaGaGaGaGaz.#.F#1#3.#.r#6.p.#aq.#.Yas.V.#atatazaGaGaGaGaG.#.#.#.#aa.#.#.O#1.#.OaialawaGaGaGaGaG.Z.#.#.Cadaa#4.W.##C#O.##xabahataCaGaGaGaG#T.#.#.e#Y.K.#ar#O.##R.V.#ag#p.##OatazaGaGaG..........#K#N.j.j#N#K.j.j.j#K#N.j.j.j.j.j#K#N.S.j.j#K#N#L.j.j.S#N.n#N#K.j#K#N#K#M#N.S#K#N#M#N#N.S.j.j.S#N.U.j.j.j#M#N#N#J.j.U#N#K.U#N#N.j.S.T........#J#N#N#M.j.j.T#L.T.n.j....................................................................................................................................................................................................", +"..........aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG................................aGaCatalad#8#7#6#7#8abaganatazaGaGaGaGazatanagab#8#8abaganatazaGaGaGaGaGaGaGaGaGaGaGaGaGaCayapaiab#8#7#7#8abaganatazaGaGaGaGaGaGaGazaqaf#9#9afaqaz....#W.##z.#.A#x.#.A#0.#.Oan.F.#af.#.Oae.E.#adakawaGaGaGaGaGaG.Z.##9#7.L.#ah#u.##z.F.#.#.#.EaeaoazaGaGaGaGaG.w.L.##8.#.C.o#8.D.#.#.#.E#u.##Cag.#.D#1aaaraGaGaGaGaGaG.#.L#7#9.#.L#6.B.#ac.#.Laf.G.#ahagaraGaGaGaGaG.#.O#6#0#9.#.Ladaa.#.FaaagataGaGaGaGaGay#X.D.##u.O.#.t.##r#u.##r#1aaapazaGaGaGaGaGae#i.#.E.L.#ag#u.##z.F.#af#u.##uagaraCaGaG..........#K#N.j.j#N#K.j.j.j#K#N.j.j.j.j.T#N#K.j.j.j.U#L#N.T.j#M#J.j#N#K.j.j.S.j.n#N#K#K#N#K.U#N#L.j.j#J#N.j.j.j#J#N.U#K#N.S.j#M#N#N#N#N.j.j.j........#L.S.j#M.n.j.T#K.j.j.j....................................................................................................................................................................................................", +"..........aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG................................aGaGazatapanalalalamapatayaCaGaGaGaGaGaGaCayatapananapatayaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCayatapamalalamapatayaCaGaGaGaGaGaGaGaGaCayaqananaqayaC....#k.##U.C.##1.#.o#1.q.fad.e.q#9.#.F#8.D.##8#i#eaCaGaGaGaGaG.Z.#ab#8.L.##1#i.##w.0.##1#T#2#6.F#QaGaGaGaGaG.Z.g.e#2.#.e.B#2.0.##3#T#2#y.#.8#X.#.E#3.E#OaCaGaGaGaGaG.#.O#8ab.#.L#7.C.##8.#.r#8.q.#ab#i#caCaGaGaGaG.#.O#3#Z#8.#.G#6#2.#.F#6.E#OaCaGaGaGaG#u#O.F.##z.#.L#m.##n#o.##i#S#k#eazaGaGaGaG#U#R#m.#.0.D.##X#f.##w.D.##8#p.##r#C.LajaGaG..........#K#N.j.j#N#K.j.j.j#K#N.j.j.j.T#N#M.n.j.j.j.j.j#L#N.T#N#L#K#N#M.U.j.j.j.j#N#K#K#N.j.j#K#N.j.j#M#L.j.j.j#N#K.j.j#N#K.j.j.T.S#K#N.j.U#K..................................................................................................................................................................................................................................", +"..........aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG................................aGaGaGaCazayayayayayazaCaGaGaGaGaGaGaGaGaGaGaCazayayazaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCazayayayayazaCaGaGaGaGaGaGaGaGaGaGaGaCazayayazaCaG.....Z.#ag.D.##2.C.##3#X.r.#.p#2#9.#.F#7.D.##9.e#cauayaCaGaGaG.Z.#ab#8ab.g.#.0.##u#U.p.#.##w#z.##2awayaGaGaG#T.#.E#1.B.##n#1#X.s.#.##w#7.7.#.e.q.F#z.##ZauayaGaGaGaG.#.O#8ab.#.L#8.D.##9#p.#.e.D.##9.e#cauayaCaGaG.#.O#7#7aj.#.L#7#8.#.K#A.##ZauayaGaGaa.h.#.g#u#6.D.#.p.##m#2.q.##z.e#eawayaCaGaG.y.#.####8#R.e.#.0.##u.D.##6#p.##u.0.farawaz...........U#N.S.S#N.U.j.j.j#K#N.j.j.n#N#M.n.j.j.U#L.j.j#L#N.T#N#N#N#N#N#K#L#L.j.S#N#J.T#N.n.j#L#N.j.j#N#K.j.j.j#N#L.j.n#N#K.n#J.S.j#M#K.j#K#N..................................................................................................................................................................................................................................", +"..........aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG......................................................................................................................................................................................aGataf#8ab#8#8ad#7#9aiad#9ac#9acag#8abaj#Z.##8alanayaGaGaGaGarac#9anaraf#8adab#7acab#3#8#k.tapalaqazaGaGaGasad#2#8ae#7#1acalaf#6#8aealaj#9aaab#e.pakalapazaGaGaGaCap#9acaqan#9abajab#8ae#9#8ad#W.##8alanayaGaGaCap#9abarayao#9acapan#i.pakalapazaGaGaGatalac#7#8ad#8#1#1#3aeaf#W.#a.alanayaGaGaGayanaf#9#6aa#9#7adab#7aa#8#8ajag.p#kakalat...........n#N#M#M#N.n.j.j.j#K#N.j.j#J#N#L#K#K.U.T#N#L#L#N#J.j.j.j.j#N#K.j#K#N#L#M#N.n.n#N#M#L#N#J.j.T#N.T.j.j.j#J#N#L#M#N.S.n#N#M#L#N.T.j.j.j..................................................................................................................................................................................................................................", +"..........aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaG......................................................................................................................................................................................aGauajafakagafalagagaoanafadafananafahan#7#QaiaeakawaGaGaGaGatajagarayanaeadaeadajalaead#TacalafanazaGaGaGayalacagalafacalaranaeadaiapaqahacac#O#3agaeanazaGaGaGaGaragajataragahanahafalajadad#1#PaiaeakawaGaGaGaragajataCaragajatar#S#2agaeanazaGaGaCaraiacadajamafaaaaacalan#3#RagaeajawaGaGaGawaladacaganalaeadaeadagaeafanal#uagaeagar...........j.T#N#N.T.j.j.j.j#K#N.j.j#N#N#N#N#N#K.j#J#N#N#J.j.j.j.j.j#N#K.j.n#L#N#M.T.j.j.T#M#N#K.n.j.T#N.T.j.j.j.n#J#N#N.U.j.j.T#N#N#J.j.j.j.j..................................................................................................................................................................................................................................", +"............................................................................................................................................................................................................................................................................................................aGazatasauatasawatatayayaraqarayayasatayataranaiaoazaGaGaGaGazatatazaCayararararauayaraqararamajaraCaGaGaGaCayaratayatarawazayaraqarayazataqaqaqapalajaraCaGaGaGaGazatatazayatatayatasayauaraqaraqanaiaoazaGaGaGazatatazaGazatatazayarapalajaraCaGaGaGayaraparawayataqaparawayasaqamaganazaGaGaGazataqaqatayayararararatarasayawaraoajalaw................................................................................................................................................................................................................................................................................................................................................................................", +"............................................................................................................................................................................................................................................................................................................aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGazauarayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCazatasazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCayatasazaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGazauarayaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGayatasazaGaGaGaGaGaGaCaGaGaGaGaGaGaGaGaGaGazauarayaGaGaGaGaGaGaCaGaGaGaGaGaGaGaGaGaGaGaGaGaCayarataC................................................................................................................................................................................................................................................................................................................................................................................", +"............................................................................................................................................................................................................................................................................................................aGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCaCaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaCaCaG................................................................................................................................................................................................................................................................................................................................................................................", +".......................................................................................................................................................j.j.j.j.j.T.T.j.j.j.j.j.j.j.j.j.n.n.j.j.j.j.j.j.j.j.n.T.T.j.j.j.j.j.j.j.j.T.T.T.T.T.T.n.j.j.j.j.j.j.j.j.j.j.n.n.j.j.j.j.j.j.j.j.j.j.j.j.S.S.j.j.j.j.j.j.j.j.j.j.T.T.n.j.j.j.j.j.j.j.T.T.T.T.j.n.T.n.j.j.j.j.j.j.j.S.T.S.j.j.j.j.j.j.j.j.j.j.j.n.T.T.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".......................................................................................................................................................j.j.j#J#N#N#N#M.n.j.j.j.j.j.j.j#K#K.j.j.j.j.j.j.j#K#N#N#N#M.j.j.j.j.j.j.T#N#N#N#N#N#N.T.j.j.j.j.j.j.j.j.j.n#M#K.j.j.j.j.j.j.j#K#M#N#N#N#N#J.j.j.j.j.j.j.j.j.T#M#N#N#N.U.j.j.j.j.j.T#N#N#N#N#N#N#M.n.j.j.j.j.j.n#L#N#N#N#L.j.j.j.j.j.j.j.j.j#J#N#N#N#M.S.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.n.j.j.j.j.j.j.j.j.j.j.j.j.n#J.j.j.j.j.j.j.T#K#K#J.j.j.j.j.j.j.T.T.n.n.n.S.S.j.j.j.j.j.j.j.j.j.j.j#J.j.j.j.j.j.j.j.j.j.j.j.T.S.j.j.j.j.j.j.n.T.T.T.T.j.j.j.j.n.U.j.j.j.j.j.n.j.j.j.j.j.j.U#K#K.U.j.j.j.j.j.j.j.j.U#K#J.T.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +"...........j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.................................j.j#K#N.U.j.n#M#L.j.j.j.j.j.j#K#N#K.j.j.j.j.j.j#J#M.U.j.n#M.U.j.j.j.j.j.T#N.j.j.j#M#M.n.j.j.j.j.j.j.j.j.j#K#N#K.j.j.j.j.j.j.j#N#K.T.T.n.j.j.j.j.j.j.j.j.j.T#N#K.n.j#K#M.j.j.j.j.j.T#N.T.T.j.n#N.U.j.j.j.j.j.j#J#M.S.j.n#N.T.j.j.j.j.j.j.j#K#N.U.j.n#K#M.n.j.j.j.j.j.n.S.j.j.j.j.j.j.j#J#N#N#N#M#J.j.j.j.j.j.j.n.T#J#N.U.j.j.j.j.j#L#N#N#N#N#M.j.j.j.j.j.U#N#N#N#N#N#K.j.j.j.j.j.j.j.j.j.j#L#N.j.j.j.j.j.j.j#L#L#L#M#N.T.j.j.j.j.j#K#N#N#N#N.U.j.j.j.j.j#N#M#M#M#M#N#M.j.j.j.j.j#M#N#N#N#N#M.j.j.j.j.j.T#N#N#N#N#N#K.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +"...........j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.................................j.U#N.T.j.j.j.S#N.S.j.j.j.j#K#M#L#K.j.j.j.j.j.S#N.S.j.j.j#K#K.j.j.j.j.j.T#N.j.j#K#M.n.j.j.j.j.j.j.j.j.j#J#M#L#K.j.j.j.j.j.j.j#N.T.j.j.j.j.j.j.j.j.j.j.j.S#N#K.j.j.j.j.j.j.j.j.j.j.S#N.S.j.j#J#N.n.j.j.j.j.j.j#N.T.j.j.T#N.n.j.j.j.j.j.j.n#N.U.j.j.j.T#N.T.j.j.j.j.j#M#N.j.j.j.j.j.j#M#N#N#N#N#N#N#K.j.j.j.j.S#L#N#N#N.j.j.j.j.S#M#N#N#N#N#N#N#J.j.j.j.j.T#N#N#N#N#N.S.j.j.j.j.j.j.j.j.j#K#N#N.j.j.j.j.j.j.j#N#N#N#N#N.S.j.j.j.j#L#N#N#N#N#N.j.j.j.j.j.n#N#N#N#N#N#N.U.j.j.j.j.U#N#N.U#J#N#N.T.j.j.j.j#M#N#N#N#N#N#N.U.j.j.n.S.j.j.j.j.j.j.j.j.j.j.S#K#K.U.j.j.j.j.j.j.j.j.j.j.n#K.S.j.j.j.j.j.j.j.j.j.j.j.U#K#J.S.j.j.j.j.j.j.j.j.j.S#K#K.U.j.j.j.j.j.j.j.j.j.j.j.n#J#J.j.j.j.j.j.j.j.j#J#K#K#K#K#K.T.j.j.j.j.j.j.j.j.j.n#J.T.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.n#J#K.U.j.j.j.j.j.j.j.j.j.j.T#K#K.U.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +"...........j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.................................j#L#L.j.j.j.j.j#N.T.j.j.j.j.n.S#K#K.j.j.j.j.j.n#K.j.j.j.j#M#J.j.j.j.j.j.j.j.j#K#N#N#M.n.j.j.j.j.j.j.j.T#N.S#K#K.j.j.j.j.j.j.T#N.U#J#N#N#M.T.j.j.j.j.j.j#L#M.j.S#L#N#N#J.j.j.j.j.j.j.j.j.j.n#N#J.j.j.j.j.j.j.j#N.U#J#N#N#M.U.j.j.j.j.j.j.T#N.j.j.j.j#K#N#K.j.j.j.j.j#M#M.j.j.j.j.j#K#N#N#N#N#N#N#N#N.U.j.j.j.j.S#N#N#N.j.j.j.j.j.T#M#M.n#L#N#N#K.j.j.j.j.U#J.T#M#N#L.j.j.j.j.j.j.j.j.j#J#N#N#N.j.j.j.j.j.j.S#N#N#J.T#J.U.j.j.j.U#N#N#K.j.j.U.j.j.j.j.j.U#N#L#M#N#N#L.j.j.j.j.j#J#N#N.j.T#N#N.T.j.j.j.T#N#N#J.j#L#N#N#L.j.j#M#N.j.j.j.j.j.j.j.j.j.T#N#N#N#N#K.j.j.j.j.j.j.j.j.T#M#N.T.j.j.j.j.j.j.j.j.j.n#M#N#N#N#N.S.j.j.j.j.j.j.j#J#N#N#N#N#M.j.j.j.j.j.j.j.j.j.j#K#N#N.j.j.j.j.j.j.j.j#L#N#N#N#N#N.U.j.j.j.j.j.j.j.j.n#M#N#J.j.j.j.j.j.j.j.j#M#N#N#N#N#N#N#J.j.j.j.j.j.j.n#M#N#N#N#J.j.j.j.j.j.j.j.j#L#N#N#N#N#K.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +"...........j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.................................j#N.T.j.j.j.j.j#N.T.j.j.j.j.j.j#K#K.j.j.j.j.j.j.j.j.j.S#M#N.S.j.j.j.j.j.j.j#K#N#L#K#M#M.j.j.j.j.j.j.S#N.T.j#K#K.j.j.j.j.j.j.T#N#N#L.T.T#K#N.n.j.j.j.j.n#N.T.T#N#M.U#J#N.S.j.j.j.j.j.j.j.j#J#N.n.j.j.j.j.j.j.j.U#N#N#J.T#J#N#K.j.j.j.j.j.S#N.U.j.T#L#N#M#K.j.j.j.j.j.n.j.j.j.j.j.n#N#N#N#J.n.n#L#N#N#L.j.j.j.j.n#N#N#N.j.j.j.j.j.j.n#J.j#J#N#N#J.j.j.j.j.n.j.j#N#N#K.j.j.j.j.j.j.j.j#J#N#N#N#N.j.j.j.j.j.j.U#N#N#L.T.j.j.j.j.j#L#N#M.S.U.U.S.j.j.j.j.j.U.n.j#K#N#N.T.j.j.j.j.j.S#N#N#N#N#N#L.j.j.j.j.T#N#N#K.S#L#N#N#N.j.j#M#M.j.j.j.j.j.j.j.j.n#N#M.n.j#K#N.S.j.j.j.j.j.j.j#N#N#N.T.j.j.j.j.j.j.j.j.j#K#N#J.j.S#N#K.j.j.j.j.j.j.j.T#J.n.j#J#N.T.j.j.j.j.j.j.j.j.U#N#N#N.j.j.j.j.j.j.j.j#K#K.j.j.j.j.j.j.j.j.j.j.j.j.j#M#N#J.j.j.j.j.j.j.j.j.j#J#K#K#K#L#N#N.S.j.j.j.j.j.j#J#N.T.j#L#N.j.j.j.j.j.j.j.U#N#J.j.n#K#N.U.j.j.n.T.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +"...........j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.................................T#N.n.j.j.j.j.S#N.S.j.j.j.j.j.j#K#K.j.j.j.j.j.j.j.j.U#N#M.S.j.j.j.j.j.j.j.j.S.S.j.j.n#N.T.j.j.j.j.n#M.T.j.j#K#L.U#J.j.j.j.j.T#N.T.j.j.j.j#N.T.j.j.j.j.T#N.S#N#M.n.j.j#L#K.j.j.j.j.j.j.j.j#M#K.j.j.j.j.j.j.j.n#M#K.n.j.j.j.U#N.j.j.j.j.j.j.T#N#N#N#L.S#K#K.j.j.j.j.j.j.j.j.j.j.j.T#N#N#M.j.j.j.S#N#N#N.j.j.j.j.j#N#N#N.j.j.j.j.j.j.j.j.j#M#N#N.T.j.j.j.j.j.j.U#N#N#N#L.j.j.j.j.j.j.U#N#L.T#N#N.j.U.j.j.j.j#K#N#N#N#N#J.j.j.j.j#N#N#N#N#N#N#N.T.j.j.j.j.j.j.S#N#N#M.j.j.j.j.j.j.n#M#N#N#N#N#L.j.j.j.j.n#N#N#N#N#N#N#N#N.j.j.n.j.j.j.j.j.j.j.j.j.U#N.T.j.j.S#N#J.j.j.j.j.j.j.j.S.U#N.T.j.j.j.j.j.j.j.j.j.n.S.j.j.S#N#K.j.j.j.j.j.j.j.j.j.j.j#J#N.T.j.j.j.j.j.j.j.n#N#M#L#N.j.j.j.j.j.j.j.j#K#M#M#N#N#J.j.j.j.j.j.j.j.j#J#N.U.j.j.j.j.j.j.j.j.j.j.j.j.j.j#M#N.T.j.j.j.j.j.j.j#K#N.n.j#L#N.j.j.j.j.j.j.j#K#N.j.j.j.n#N#K.j.j#K#N.T.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +"...........j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.................................T#N.j.j.j.j.j#J#M.j.j.j.j.j.j.j#K#K.j.j.j.j.j.j.j#J#N#J.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j#N.T.j.j.j.j#M#N#N#N#N#N#N#K#K.j.j.j.j.j.j.j.j.j.j.j#N.T.j.j.j.j.T#N#M#M.n.j.j.j#L#K.j.j.j.j.j.j.j.U#N.S.j.j.j.j.j.j.j#M#K.j.j.j.j.j#K#L.j.j.j.j.j.j.j.j.T.n.j.n#N.T.j.j.j.j.j#K#K.j.j.j.j.T#N#N#M.j.j.j.T#N#N#N.j.j.j.j.j#N#N#N.j.j.j.j.j.j.j.j.T#N#N#L.j.j.j.j.j.j.j.j.n#L#N#N.U.j.j.j.j.T#N#N#K#J#N#N#M#M.j.j.j.j.n.j.T#N#N#N.T.j.j.j#N#N#N#N#N#N#N#M.j.j.j.j.j.j#K#N#N.U.j.j.j.j.j.j#M#N#N#N#N#N#N#L.j.j.j.j.U#N#N#N#N#N#N#M.j.j.j.j.j.j.j.j.j.j.j.j#K#N.j.j.j.j#N#K.j.j.j.j.j.j.j.j.T#N.T.j.j.j.j.j.j.j.j.j.j.j.j.S#M#N.S.j.j.j.j.j.j.j.j.n#K#N#N#M.j.j.j.j.j.j.j.j#L#N.T#K#N.j.j.j.j.j.j.j.j#N#N#N#K#L#N.U.j.j.j.j.j.j.j#N#N#M#N#L.n.j.j.j.j.j.j.j.j.j.j#J#N#K.j.j.j.j.j.j.j.j.T#N#M#L#N#K.j.j.j.j.j.j.j#K#N.n.j.j.n#N#K.j.j.T#K.n.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +"...........j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.................................T#N.j.j.j.j.S#N#J.j.j.j.j.j.j.j#K#K.j.j.j.j.j.j.T#N.T.j.j.j.j.j.j.j.j.j#K#J.j.j.j.j.T#N.n.j.j.j.j#K#K#J.T.T#K#K.j.j.j.j.j.j.n.T.j.j.j.j.U#N.j.j.j.j.j.n#N#N.n.j.j.j.T#N.T.j.j.j.j.j.j.j#M#L.j.j.j.j.j.j.j.T#N.n.j.j.j.j#K#N.S.j.j.j.j.j#J#K.j.j.j.j#K#N.n.j.j.j.j.j#N#N.j.j.j.j.S#N#N#N#K.S.T#M#N#N#K.j.j.j.j.j#M#N#N.n.j.j.j.j.j.j.j#M#N#N#J#J.T.j.j.j.j.T.T.j.U#N#N#J.j.j.j.T#N#N#N#N#N#N#N#N#N.j.j.j.j.T.j.j#J#N#N.U.j.j.j#M#N#N.T.j#M#N#N.n.j.j.j.j.T#N#N#N.j.j.j.j.j.j.T#N#N#K.j.S#N#N#N.n.j.j.j.j.T.S.n#J#N#N#J.j.j#K#K.j.j.j.j.j.j.j.j#K#N.j.j.j.j#N#K.j.j.j.j.j.j.j.j.T#N.T.j.j.j.j.j.j.j.j.j.j.j#J#N#N.T.j.j.j.j.j.j.j.j.j.S#N#N#N#K.j.j.j.j.j.j.j#J#N#K.j#K#N.j.j.j.j.j.j.j.j#N#M.n.j.j#L#M.j.j.j.j.j.j.S#N#N#K#K#N#M.j.j.j.j.j.j.j.j.j.j#N#N.n.j.j.j.j.j.j.j.j.n#M#N#N#N#J.j.j.j.j.j.j.j.S#N#N#K#L#N#N.U.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +"...........j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.................................n#N.U.j.j.U#N#M.j.j.j.j.j.j.j.j#K#K.j.j.j.j.j.n#M#K.j.j.j.S#M.j.j.j.j.j#K#J.j.j.j.T#N#J.j.j.j.j.j.j.j.j.j.j#K#K.j.j.j.j.j.j#K#N.n.j.j.U#N.U.j.j.j.j.j.j#K#M.n.j.j.U#N#L.j.j.j.j.j.j.j.U#N.T.j.j.j.j.j.j.j.S#N.T.j.j.T#M#N.T.j.j.j.j.j.j#J#N.n.j.j.U#N.U.j.j.j.j.j.j#J.T.j.j.j.j.j#K#N#N#N#N#N#N#N#N.T.j.j.j.j.j#M#N#N.S.j.j.j.j.j.j#J#N#N#N#N#N.n.j.j.j.j#L#L.U#M#N#N.T.j.j.j#K#L#K#J.U#K#N#N#K#K.n.j.j.j#M#J#J#N#N#N.T.j.j.j#L#N#N#J.S#N#N#N.j.j.j.S#J#N#N#N#J.j.j.j.j.j.j.U#N#N#L.S.U#N#N#N.j.j.j.j.j#M#K#K#N#N#M.n.j.j#N#N.j.j.j.j.j.j.j.j#K#N.j.j.j.j#N#K.j.j.j.j.j.j.j.j.T#N.T.j.j.j.j.j.j.j.j.j.j#M#N#K.n.j.j.j.j.j.j.j.j.j.j.j.j.S#M#N.S.j.j.j.j.j.S#N#N#N#N#N#N#N.S.j.j.j.j.j.j.S.n.j.j.j#K#N.j.j.j.j.j.j.T#N.T.j.j.U#N.T.j.j.j.j.j.j.j.j.U#N#J.j.j.j.j.j.j.j.j.j#L#N.U.n#K#N.U.j.j.j.j.j.j.j.S#L#N#N#M#N.S.j.j.n.T.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +"...........j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.................................j#K#N#L#M#N#K.n.j.j.j.j.j.j.j.j#L#K.j.j.j.j.j.U#N#N#N#N#N#N#N.j.j.j.j.j.S#N#L#K#M#N#K.j.j.j.j.j.j.j.j.j.j.j#L#L.j.j.j.j.j.j.n#M#N#K#M#N.U.j.j.j.j.j.j.j.j#M#N#K#M#N#J.j.j.j.j.j.j.j.j#K#N.j.j.j.j.j.j.j.j.j#K#N#M#N#N#L.n.j.j.j.j.j.j.j.n#M#M#K#M#N#J.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j#K#N#N#N#N#N#N.T.j.j.j.j.j.j#M#N#N.T.j.j.j.j.j.T#N#N#N#N#N#N.j.j.j.j.U#N#N#N#N#N#L.j.j.j.j.j.j.j.j.j.U#N#N.U.j.j.j.j.n#N#N#N#N#N#M.j.j.j.j.T#N#N#N#N#N#N#J.j.j.j.j.U#M#N#N.T.j.j.j.j.j.j.j#N#N#N#N#N#N#N#J.j.j.j.j.T#N#N#N#N#N.T.j.j.j#J.T.j.j.j.j.j.j.j.j.U#N.S.j.j.T#N.T.j.j.j.j.j.j.j.j.T#N.T.j.j.j.j.j.j.j.j.j.U#N#K.j.j.j.j.j.j.j.j.j.j.j.S.n.j.j.T#N.T.j.j.j.j.j.n#J#K#K#K#M#N#K.n.j.j.j.j.j.j.j.j.j.j.j#L#N.j.j.j.j.j.j.T#N.T.j.j.T#N.T.j.j.j.j.j.j.j.j#L#N.S.j.j.j.j.j.j.j.j.j#N#K.j.j.j#N#K.j.j.j.j.j.j.j.j.j.j.T#N#L.j.j.j#K#N.S.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +"...........j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.................................j.j.T#J.U.S.j.j.j.j.j.j.j.j.j.j.S.S.j.j.j.j.j.n.T.T.T.T.T.T.T.j.j.j.j.j.j.S#K#K.U.S.j.j.j.j.j.j.j.j.j.j.j.j.S.S.j.j.j.j.j.j.j.j.T#K.U.n.j.j.j.j.j.j.j.j.j.j.U#K.U.n.j.j.j.j.j.j.j.j.j.S.T.j.j.j.j.j.j.j.j.j.j.T.U.T.n.j.j.j.j.j.j.j.j.j.j.n.U#K#J.n.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.U#K#L#L.U.j.j.j.j.j.j.j.U#N#N#N#K.j.j.j.j.j#J#K#J#J#J#J#M.S.j.j.S#K#N#N#N#N#L.n.j.j.j.j.j.j.j.j.S#M#N#N#M.T.j.j.j.U#N#N#N#N#L.n.j.j.j.j.j#J#N#N#N#N#L.j.j.j.j.j.j.j.U#N.S.j.j.j.j.j.j.j.S#L#N#N#N#N#K.j.j.j.j.j#J#N#M#M#K.S.j.j.j.j.j.j.j.j.j.j.j.j.j.j.n#N#L.n.n#M#N.n.j.j.j.j.j.j.j.S#J#N#J.S.j.j.j.j.j.j.j.j#K#N.T.T.T.T.j.j.j.j.j.j.j.j#N#M.n.j#K#N.S.j.j.j.j.j.j.j.j.j.j#K#N.j.j.j.j.j.j.j.j#M#K.j.j#K#N#J.j.j.j.j.j.j.n#N#L.n.n#L#N.n.j.j.j.j.j.j.j.S#N#L.j.j.j.j.j.j.j.j.j.j#N#M.n.j.T#N#J.j.j.j.j.j.j.j.j.S#J#N#M.n.j.j.j.U#N.S.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +"...........j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.................................j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.U.T.n.n.T.j.j.j.j.j.j.j.j.j.j.j.S.n.j.j.j.j.j.T.U.T.j.j.j.j.j.j.j.j.j.j.T.T.n.n.T.S.j.j.j.S.j.n.T.S.j.j.j.j.j.j.j.j.n.T.U.S.j.j.j.j.j.j.j.j.j.S.n.j.j.j.j.j.j.j.j.j.S.U.T.n.j.j.j.j.j.j.T.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j#J#N#N#N#N#J.j.j.j.j.j.j.j.j#N#N#N#N#N.j.j.j.j.j.j.j.j#K#N#N#N#N#N#J.j.j.j.j.j.j.j#J#N#N#N#N#K.j.j.j.j.j.j.j.j.j.j.j#K#N.j.j.j.j.j.j.j.j#K#N#N#N#N#M.n.j.j.j.j.j.j.j#J#N#N#N#N#J.j.j.j.j.j.j.j.j#J#N.U.j.j.j.j.j.j.j.j.j.j#J#N#N#N#N#M.n.j.j.j.j.j.j.j#M#N#N#L.n.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +"...........j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.................................j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.T#K#K.S.j.j.j.j.j.j.j.j.j.S.T.T.T.S.j.j.j.j.j.j.j.j.n.T.T.T.T.T.n.j.j.j.j.j.j.j.j.S#K#K.T.j.j.j.j.j.j.j.j.j.j.j.j.T#J.j.j.j.j.j.j.j.j.j.U#K#K.U.j.j.j.j.j.j.j.j.j.j.U#K#K.S.j.j.j.j.j.j.j.j.j.T#J.j.j.j.j.j.j.j.j.j.j.j.j.S#K#K#J.n.j.j.j.j.j.j.j.j#J#J.S.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +"...........j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.................................j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.S.j.j.j.j.j.j.S.S.j.j.j.j.j.j.j.j.T.j.j.j.j.j.S.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.n.j.j.j.j.j.j.j.n.T.j.j.j.S#K#J.j.j.j.j.T.n.n.S.j.j.j.j.j.j.j.U.j.j.j.j.j.j.j.T.j.j.j.j.S.T.T.j.j.j.T.j.j.j.j.j.j.j.S#K#K.n.j.j.j.j.U#K.T.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +"...........j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.................................j.j.T#M#M.S.j.j.j.j#J.U.j.j.j.j#K#N#L.j.j.j.j#K#N#M#N.U.j.j.j.j.j.j#K.S.j.j.j.T#L#M#N#L.j.j.j.j.j#J#N#N.T.j.j.j#J#M#N#N#M.j.j.j.j#M#N#M.j.j.j.j.j.j#L#N#L.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.n.n.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.n#L#N#N.T.j.j.j.j.U#M.T.j.j.n#N#N#N#K.j.j.j#L#N#N#N.n.j.j.j.j.j.T#M.j.j.j.j#J#M#N#K.j.j.j#J#N#N#L.j.j.j#K#N#M#N#L.j.j.j#N#N#N#L.j.j.j.U#N#N#N.T.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.n#K#K.S.j.j.j.j.j.j.j.j#K.n.j.j.j.j.j.j.j.j.U#J.n.j.j.j.j.j.j.j.T.U.S.j.j.j.j.j.j.j.j.j#J#J.j.j.j.j.j.j.U#J.U#J.U.j.j.j.j.j.j.j.n#K.n.j.j.j.j.j.j.T.T.T.S.T.n.j.j.j.j.j.j.U.U.j.j.j.j.j.j.j.j.T#J.T.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +"...........j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.................................j.j#N#L#M#L.j.j.j.j#N.U.j.j.j.U#N#K#N.U.j.j.j#M#L#K#N.U.j.j.j.j.j.U#N.S.j.j.j#K#N#L#L.U.j.j.j.j.T#N#J#K#L.j.j.j#M#M#K#N#K.j.j.j#J#N.T#M.U.j.j.j.j#K#N#J#N.U.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j#J.T.j.j.j.j.T#L#J#K#J.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j#L#N#N#N#N.S.j.j#J#N#N.j.j.j#L#N#N#N#N.j.j.j#L#N#N#L.j.j.j.j.j.j#L#N.j.j.j.j#K#N#N#L.j.j.S#N#N#N#J.j.j.j#L#N#N#N.U.j.j.T#N#J#L#N.j.j.j#N#N#N#N#L.j.j.S.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j#N#N#N#N.n.j.j.j.j.j.j#K#N.S.j.j.j.j.j.j.j#L#N#N#N.n.j.j.j.j.j#J#N#N#N.T.j.j.j.j.j.j.j.S#N#M.j.j.j.j.j.j#N#N#N#N#N.j.j.j.j.j.j.j#L#N.n.j.j.j.j.j#J#N#N#N#N#N#J.j.j.j.j.j#L#N#N#L.j.j.j.j.j.j#K#N#N#N.U.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j#J#L.j.j#N.S.j.j#K#N.U.j.j.j#L.U.j.U#K.j.j.j#N.j.S#L.j.j.j.j.j.j#L#N.j.j.j.j#K.U.j.j.j.j.j.j.j#L#K.j.j.T.j.j.j#N.S.j#L.T.j.j.j#L.U.n#K.U.j.j.j.j#N.S.j#J#L.j.j.j#J.T.j.j.j.j.j.j.j.j.j.n#J#K.j.j.j.j.T.T.j.U#J.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.T#N#N#N#N#N#J.j.j.j#N#N.j.j.j.U#M.T#N#N.j.j.j#J.U#N#J.j.j.j.j.j.U#N#M.j.j.j.j#L#N.T#J.j.j#J#N.U.n.T.j.j.j#M#M#N#N.n.j.j.T#N.T#K#N.j.j.S#N#K.T#N#N.j.j#N.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j#J#N.T.T#N#J.j.j.j.j.j.U#N#N.S.j.j.j.j.j.j#J#N.U.U#N.U.j.j.j.j.j#L#L.T#M#L.j.j.j.j.j.j.j#K#N#M.j.j.j.j.j.j#N#K.S.T.n.j.j.j.j.j.j.U#N#J.j.j.j.j.j.j.n#J#J#J#N#N.T.j.j.j.j.U#N.T.U#N.S.j.j.j.j.n#N#J.j#M#N.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j#M.U.j.j#L.T.j.j#J#N.U.j.j.j#N.S.j.U#K.j.j.j.U.j#L#K.j.j.j.j.j.T#L#M.j.j.j.j#K.U.U#K.S.j.j.j.S#N.j.j.S.j.j.j.j.U.j.j#N.S.j.j.j#L.S.j#M.S.j.j.j.T#L.j.j#J#M.j.j.j#N#J.j.j.j.j.j.j.j.j.j#J#J#L.S.j.j.j.T#L#M#J.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j#J#N#L.j#J#N#L.j.j.j#N#N.j.j.j.j.T.j#N#N.j.j.j.j.T#N#J.j.j.j.j.j#M#N#M.j.j.j.j#M#N.U.j.j.j#L#N.T.U.j.j.j.n.S.n#N#L.j.j.j.n#N#N#N#L.j.j.S#N#K.U#N#N.n.j#M.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j#M#K.j.j#L#M.j.j.j.j.j.S#K#N.S.j.j.j.j.j.j.S.U.j.j#N.U.j.j.j.j.j.j.j.j#K#L.j.j.j.j.j.j.T#N#N#M.j.j.j.j.j.j#N#L#K#K.n.j.j.j.j.j.j#N#K.j.j.j.j.j.j.j.j.j.j.n#N#J.j.j.j.j.j#J#N.j.j#N.T.j.j.j.j.T#N.j.j.T#N.S.j.j.j.j.j#J#J.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j#N.j.j.j#L.T.j.j.j#K.U.j.j.j.T.j.j#L#J.j.j.j.j.U#N#N#J.j.j.j.j#L.U#L.S.j.j.j#K#N#N#N#M.j.j.j.T#L.j#M#N#J.j.j.j.j.j.T#M.j.j.j.j#K#L#N#N#K.j.j.j.T#L.j.j#M#M.j.j.j#L.T.j.j.j.j.j.j.j.j.j#L.U.T#L.j.j.j.T.U.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j#K#N.U.j.n#N#M.j.j.j#N#N.j.j.j.j.j.S#N#L.j.j.j.j#J#N#N.S.j.j.j#J#M#K#M.S.n.j.n#N#N#N.T.j.j#M#N#N#N#L.j.j.j.j.U#N.U.j.j.j.j#N#N#N#L.j.j.n#N#N#N#N#N.n.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j#N.U.j.j#K#N.j.j.j.j.j.j.S#N.n.j.j.j.j.j.j.j.j.j#K#N.T.j.j.j.j.j.j.T#L#N#J.j.j.j.j.j.j#L#L#J#N.j.j.j.j.j.j#N#N#N#N#M.j.j.j.j.j.T#N#L#L.U.j.j.j.j.j.j.j.j#K#N.j.j.j.j.j.j.U#N#J#L#N.n.j.j.j.j.U#N.j.j.S#N.S.j.j.j.j.j#L#N.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.S#M.j.j.j#L.T.j.j.j#K.U.j.j.j.j.j#J#N.S.j.j.j.j#M#J.U#M.j.j.j.T#M.j#L.j.j.j.j#L#N.j.j#N.S.j.j#J#J#K#M#J#N.j.j.j.j.j#K#J.j.j.j.j#J#N#J.U#N.T.j.j.S#N.U#L#N#L.j.j.j.j.j.j.j.j.j.j.j.j.j.U.U.j.j#J.n.j.j.T.T.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j#K#N.U.j.n#N#M.j.j.j#M#N.j.j.j.j.j#J#N#J.j.j.j.j.j#J#N#J.j.j.n#N#L#K#N#M.S.j.j.j#J#N#K.j.j#M#N#N#N#N.n.j.j.j#M#N.S.j.j.j#J#N#N#N#N.T.j.j#K#N#N#N#N.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j#N.U.j.j#J#N.j.j.j.j.j.j.T#N.n.j.j.j.j.j.j.j.j#K#N#K.j.j.j.j.j.j.j#L#N#N.S.j.j.j.j.j.T#N.T.U#M.j.j.j.j.j.n#N#L.j.U#N.S.j.j.j.j#J#N#N#N#N.T.j.j.j.j.j.j.j#N#K.j.j.j.j.j.j.j#N#N#N#L.j.j.j.j.j.S#N#K.T#L#N.n.j.j.j.j.j.S.T.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.T#L.j.j.j#M.S.j.j.j#K.U.j.j.j.j.T#N.U.j.j.j.j.j.S.j.j#M.S.j.j#K.U.j#N#M.U.j.j#L.U.j.j#L.T.j.j#J#L#M.j.j#M.S.j.j.j.j#M.T.j.j.j.j#N.U.j.j#K.U.j.j.j#K#N#M.T#L.j.j.j.j.j.j.j.j.j.j.j.j.j.U.j.j.j.S.S.j.j.S.T.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j#J#N#M.S#K#N#L.j.j.j#M#N.j.j.j.j.j#M#N#J.T.j.j.n.n.n#N#K.j.j#L#N#N#N#N#N.S.j.n.j.j#N#M.j.j#M#N.n#K#N.S.j.j.S#N#M.j.j.j.j#M#N.j#J#N#J.j.j.j.T.T#N#M.j.j#K.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j#N.U.j.j#K#N.j.j.j.j.j.j.T#N.n.j.j.j.j.j.j.j#K#N#K.j.j.j.j.j.j.j.j.n.U#N#L.j.j.j.j.j#M#N#L#M#N#K.j.j.j.j.j#K.n.j.n#N.T.j.j.j.j#L#N.n.n#N#K.j.j.j.j.j.j.T#N.T.j.j.j.j.j.j.U#N#J#K#N.U.j.j.j.j.j#K#N#N#N#N.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.T#L.j.j.S#N.j.j.j.j#K.U.j.j.j.j#N#J.j.j.j.j.j.S.j.j.j#M.S.j.S#N#N#N#N#M.U.j.j.j.j.j.j#L.T.j.j#J#N.U.j.j#M.S.j.j.j.S#N.j.j.j.j.T#M.j.j.j#M.T.j.j.j.j.S.j.U#L.j.j.j#K.T.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.T#N#N#N#N#N.U.j.j.j#M#N.n.j.j.j.T#N#N#N.U.j.j.U#K#L#N#J.j.n#L#K.U#L#N#K.T.j.T#K#K#N#L.j.j#L#N.U#L#N.S.j.S#L#N#K.j.j.j.j#M#N.T#K#N.U.j.j.U#L#L#N.U.j.j#N.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j#N#J.j.j#L#L.j.j.j.j.j.j.T#N.n.j.j.j.j.j.j.S#N#J.j.j.j.j.j.j.j.j.j.j.j#J#N.j.j.j.j.j#M#N#N#N#N#L.j.j.j.j.j.j.j.j.n#N.T.j.j.j.j#L#L.j.j#L#L.j.j.j.j.j.j#K#N.j.j.j.j.j.j.j#L#M.j.j#N#K.j.j.j.j.j.j.T.U#N#K.j.j.j.j.j.j.T.U.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.T#L.j.j#J#L.j.j.j.j#K.U.j.j.j.U#N.j.j.j.j.j.S#M.j.j.S#M.j.j.S#L#J.T#M.j.j.j.j.U.j.j.j#M.S.j.j.U#N.j.j.S#N.j.j.j.j.U#L.j.j.j.j#J#J.j.j.U#N.j.j.j#J#K.j.j#L#J.j.j.j#N.U.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j#K#N#N#N#L.j.j.j.j#M#N.S.j.j.j#L#N#N#N.T.j.j#M#N#N#N.S.j.j.j.j.j#K#N.S.j.j.T#N#N#N#J.j.j#J#N#N#N#M.j.j.n#L#N.U.j.j.j.j#K#N#N#N#N.S.j.j#J#N#N#N.j.j.j.T.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j#L#M.j.j#N#J.j.j.j.j.j.j.T#N.n.j.j.j.j.j.j.U#N.n.j.n.j.j.j.j.j.j#M.T.j#K#N.j.j.j.j.j.j.j.j#K#M.j.j.j.j.j.n#J.j.j#J#N.n.j.j.j.j#K#N.j.j#N#K.j.j.j.j.j.j#N#K.j.j.j.j.j.j.j#L#L.j.j#N#K.j.j.j.j.j.j.j.U#N.T.j.j.j.j.j.j#K#N.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.T#M.j.j#N.U.j.j.j.j#K.U.j.j.j#L#J.j.S#J.j.j.S#N.j.j#K#K.j.j.j.j.j.j#M.S.j.j.j#N.T.j#J#M.j.j.j.T#N.j.j#L#K.j.j.j.j#L#J.j.j.j.j#J#K.j.T#N#J.j.j.j.U#L.j.S#N.S.j.j.j#K.T.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j#K#L#J.j.j.j.j.S#N#N.U.j.j.j#K#J#J#L.U.j.S#M#N#N#J.j.j.j.j.j.n#N#N#K.j.j#J#N#N#L.j.j.j.j#M#N#N.U.j.j.j.j#K.U.j.j.j.j.n#M#N#N#K.j.j.j#K#N#L.T.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.T#N#L#M#N.S.j.j.j.j.j.T#N#N#N.n.j.j.j.j.j#J#N#N#N#N.U.j.j.j.j.j#N#N#K#N#K.j.j.j.j.j.j.j.j#K#N.j.j.j.j.j.S#N#L#K#N#L.j.j.j.j.j.U#N#J#J#N.T.j.j.j.j.j.T#N.T.j.j.j.j.j.j.j#J#N#K#K#N.U.j.j.j.j.j.T#L#N#K.j.j.j.j.j.j.j.U#L.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j#N#L#N#L.j.j.j.j.j#L#J.j.j.j#N#N#N#N#M.j.j.j#N#K#L#N.S.j.j.j.j.j.j#N.S.j.j.j#K#N#L#N.T.j.j.j.j#L#L#M#N.S.j.j.j.j#N.T.j.j.j.j.T#N#L#N#K.j.j.j.j.S#N#K#N#K.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.T.T.S.S.j.j.j.j.j.j.j.n.j.j.j.T.T.j.j.j.j.j.j.S.T.S.T.j.j.n.n.T.j.j.j.j.j.j.U.T.j.j.j.j.j.j.S.j.j.j.j.j.j.U.T.j.j.j.j.n.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j#J#N#N.U.j.j.j.j.j.j.T#M#M#L.j.j.j.j.j.j.T#M#L#L#M.U.j.j.j.j.j.T#N#N#L.j.j.j.j.j.j.j.j.j.U#L.j.j.j.j.j.j#J#N#N#M.n.j.j.j.j.j.j#L#N#N#K.j.j.j.j.j.j.U#N.j.j.j.j.j.j.j.j.j#L#N#N#K.j.j.j.j.j.j#N#N#K.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.U#N#L.j.j.j.j.j.j#J.T.j.j.j#K#K#K#L#J.j.j.j.U#N#M.T.j.j.j.j.j.j.j#K.S.j.j.j.j#L#N.U.j.j.j.j.j.S#N#M.S.j.j.j.j.j#K.S.j.j.j.j.j#J#M#J.j.j.j.j.j.j#J#N#L.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.n.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.n.S.j.j.j.j.j.j.j.j.j.T.T.j.j.j.j.j.j.j.j.S.j.j.j.j.j.j.j.j.j.j.n.n.j.j.j.j.j.j.j.T.T.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.n.T.T.n.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.n.S.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.T.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j#J.n.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.n#M#N#N#N#J.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.T#N#N#K.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.n#M#N#M.n.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.T#K#K#J.n.j.j.j.j.j.j.j.j.j.j.j.j#L#N.T.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j#J#N#N#M#N#N#M.j.j.j.j.j.j.j.j.j.j.n#M#N.S.j.j.j.j.j.j.j.j.j.j.j.j.j.U.T.j.j.j.j.j.j.j.T#N#N#N#N.U.j.j.j.j.j.j.j#J.U.U#K#L.S.j.j.j.j.j.j.j#K#N#L#N#J.j.j.j.j.j.j.j.j.j#J#K#J.S.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.S#N#N#N#N#N.S.j.j.j.j.j.j.j.j.j.n#K#N#N.j.j.j.j.j.j.j.j.j.n#L#N#M.n.j.j.j.j.j.j.j.j.T#K#K.j.T#N#N#J.j.j.j.j.j.j.j.j.j#M#N#N.T.j.j.j.j.j.j.j.j.n#K#K#L#N#N#M.j.j.j.j.j.j.j#M#N#K.n#N#M.j.j.j.j.j.j.S#N#N#N#N#N.T.j.j.j.j.j.j.n#N#K.j#N#K.j.j.j.j.j.j.j.j#M#N#N#N#N.T.j.j.j.n.S.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j#K#N#N#J#K#N#M.n.j.j.j.j.j.j.j.j#M#N#N#N.j.j.j.j.j.j.j.j.j#L#N#N#N#M.j.j.j.j.j.j.j.j.j.j.T#J.U#N#N#J.j.j.j.j.j.j.j.j.S#N#N#N.T.j.j.j.j.j.j.j.j.T#N#N#N#N#N#L.j.j.j.j.j.j.T#N#N.U.T.U#J.j.j.j.j.j.j.T#N#N#L#M#N.n.j.j.j.j.j.j.T#N#N.U#N#K.j.j.j.j.j.j.j.U#N#N#J#K#N#M.j.j.j#M#N.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j#M#N#N.n.n#N#N#J.j.j.j.j.j.j.j.j#L#J#N#N.j.j.j.j.j.j.j.j.n#N#L.n#M#N.S.j.j.j.j.j.j.j.j.j#K#N#N#N#M.S.j.j.j.j.j.j.j.j#L#M.S#N#J.j.j.j.j.j.j.j.j.T#N#M.T.T#K.n.j.j.j.j.j.j#K#N#N#N#N#N.T.j.j.j.j.j.j.j#J.n.j#M#M.j.j.j.j.j.j.j.S#N#N#N#N.U.j.j.j.j.j.j.j#K#N#N.j.T#N#N.S.j.j#M#M.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j#N#N#N.j.j#L#N#N.n.j.j.j.j.j.j.j.j.T#N#N.j.j.j.j.j.j.j.j.j.T.S.j#M#N.T.j.j.j.j.j.j.j.j.j.T#M#K#N#N#M.S.j.j.j.j.j.j.S#N.U.j#N#K.j.j.j.j.j.j.j.j.T#N#K#J#K#J.j.j.j.j.j.j.j#K#N#N#L#L#N#M.n.j.j.j.j.j.j.j.j.U#N#K.j.j.j.j.j.j.j.T#M#N#N#N#N.S.j.j.j.j.j.j#K#N#N.T#K#N#N.T.j.j.n.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j#N#N#N.n.j#K#N#N.T.j.j.j.j.j.j.j.j.T#N#M.j.j.j.j.j.j.j.j.j.j.j.U#N#N.S.j.j.j.j.j.j.j.n.T.S.j.j#K#N#N#K.j.j.j.j.j.j#J#N.T.n#N#M.T.T.j.j.j.j.j.j#K#N#N#N#N#N#L.j.j.j.j.j.j#K#N#N.j.j#N#N#J.j.j.j.j.j.j.j.j#L#N#J.j.j.j.j.j.j.S#N#M.S#J#N#N#K.j.j.j.j.j.j#J#N#N#N#N#N#N.S.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j#M#N#N.T.j#K#N#N#J.j.j.j.j.j.j.j.j.T#N#K.j.j.j.j.j.j.j.j.j.j#K#N#N#K.j.j.j.j.j.j.j.j#M#N#N.U.S#M#N#N.S.j.j.j.j.j.j#L#N#L#N#N#N#N#N.j.j.j.j.j.j.T#M#J.T#K#N#N.S.j.j.j.j.j.S#N#N.T.j#N#N#L.j.j.j.j.j.j.j.n#N#N.T.j.j.j.j.j.j#K#N#L.j.j#N#N#K.j.j.j.j.j.j.j#J#M#J#L#N#N.j.j.j#K#K.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j#J#N#N#J.j#K#N#N#J.j.j.j.j.j.n#M#L#M#N#M#K#N.n.j.j.j.j.j.T#M#N#N#J.j.j.j.j.j.j.j.j.j#J#N#N#N#N#N#N.T.j.j.j.j.j.j.n#N#N#N#N#N#N#M#N.j.j.j.j.j.j#L#L.T.j.T#N#N.T.j.j.j.j.j.j#K#N#N#L#N#N#L.j.j.j.j.j.j.j.T#N#N.T.j.j.j.j.j.j#K#N#N#M#N#N#N.T.j.j.j.j.j.j.S.U.S.n#M#N#J.j.j.j#N#N.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.n#M#N#N#J#N#N#N.S.j.j.j.j.j.S#N#N#N#N#N#N#N.T.j.j.j.j.j#L#N#N#N#K#K#K.n.j.j.j.j.j.j.j#K#N#N#M#J.S.j.j.j.j.j.j.j.n#M#L.U.U#N#N.U.j.j.j.j.j.j.j#J#N#N#K#M#N#N.T.j.j.j.j.j.j.j.U#N#N#N#N.T.j.j.j.j.j.j.j#J#N#N.T.j.j.j.j.j.j.S#M#N#N#N#L.S.j.j.j.j.j.j.T#N#N#M#M#N#M.n.j.j.j#J.T.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.S#N#N#N#N#N#K.j.j.j.j.j.j.j.T.S.n.T.U#K#M.n.j.j.j.j.j#K#N#N#N#N#N#N#M.j.j.j.j.j.j.j.j.j.n.j.j.j.j.j.j.j.j.j.j.j.j.j.j.S#N#N#N.j.j.j.j.j.j.j.j#J#N#N#N#N#M.j.j.j.j.j.j.j.j.j.j.T.T.S.j.j.j.j.j.j.j.j#K#N#J.n.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.n#N#N#N#N#L.n.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.n.U#K#K.U.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.T.U#K#N#L.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.S#J.T.T.j.j.j.j.j.j.j.j.j.n#J#K#J.n.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.U.n.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.S#K#K.S.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.U#K.T.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.S.U.j.j.j.j.j.j.j.j.j.j.j.j.j.j.U.T.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.n.j.j.j.j.j.j.j.j.j#L.S.j.j.j.j.j.j.j.j.j.j.j.j.j#N#N#N.T.j.j.j.j.j.j.j.T.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j#N#N.U.j.j.j.j.j.j.j.j.j.j.j.j.T#N#N.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j#J#N#L.j.j.j.j.j.j.j.U#N.n.j.j.j.j.j.S.T.j.j.j.j.j.T#N#L#N#N.j.j.j.j.j.j#K#N.n.j.j.j.j.j.j.j#J#K.j.j.j.j#J#N#N#L.j.j.j.j#K#L#N#K.j.j.j.j#K#L#N.S.j.j.j.j.n#M#M.S.j.j.j#J.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j#N#N#N#K.j.j.j.j.j.S#N#N.j.j.j.j.j.j#N#N.T.j.j.j.j.j#J.j.U#N.T.j.j.j.j.j#N#N.n.j.j.j.j.j#M#N#N#M.j.j.j.j#M#L.n#N.j.j.j.j#N#N#N#J.j.j.j.j#M.T#M.T.j.j.j.j#K#N#N#L.j.j.j#N.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.T#N#K#J#N.n.j.j.j.j#K#N#M.j.j.j.j.j.U#N#N#K.j.j.j.j.j.j#L#M#N.n.j.j.j.j.S#N#N.S.j.j.j.j.S#N#N#N#K.j.j.j.j#N#L#J.T.j.j.j.j#N#J#M.U.j.j.j.j#N#M#N.n.j.j.j.j#N#K.U#N.n.j.j#L.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.U#N.U.S#N.U.j.j.j.j.T#K#N.j.j.j.j.j#K#J#J#M.j.j.j.j.j.n#N#N#M.j.j.j.j.j#J#J#L.T.j.j.j.j.n#N.T.T.j.j.j.j.S#N#N#N#K.j.j.j.j.S.j#N.T.j.j.j.j#L#N#N.S.j.j.j.n#N.U.S#N.S.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.U#N.U.j#N#K.j.j.j.j.j#K#N.j.j.j.j.j.n.j#K#N.j.j.j.j.j.j#J#J#N#L.j.j.j.j#M.S#K.U.j.j.j.j.S#N#L#N.T.j.j.j.S#N#K#J#N.n.j.j.j.j.T#N.n.j.j.j.n#N#N#N#K.j.j.j.n#N#M#L#N.S.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.U#N#J.j#N#M.j.j.j.j.j#K#M.j.j.j.j.j.j.n#N#L.j.j.j.j.S#L.n.j#N#M.j.j.j.j#N.U#M#M#J.j.j.j.T#N#N#N#L.j.j.j.j#N.U.j#N.U.j.j.j.j#J#N.j.j.j.j#K#M.j#N#L.j.j.j.j#M#N#N#N.S.j.j#K.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.T#N#K.j#N#M.j.j.j.j.S#K#L.n.j.j.j.j.n#M#N.T.j.j.j.j.U#N#L#K#N#J.j.j.j.n#N#N#N#N#M.j.j.j.n#K.j#K#N.j.j.j.j#M#M.T#N#J.j.j.j.j#K#N.j.j.j.j#M#M.n#N#L.j.j.j.j.S.U#K#N.j.j.j#N.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.n#N#M.n#N#M.j.j.j.U#N#N#N#N.U.j.j.j#L#N#J.j.j.j.j.j.n#N#N#N#M.j.j.j.j.U#N#N#N#N.U.j.j.j.U#N.j#K#N.j.j.j.j.T#N#N#N.U.j.j.j.j#M#N.j.j.j.j#L#N#N#N.U.j.j.j.S#L.T#M#L.j.j.j#K.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j#K#N#M#N#K.j.j.j.T#N#M#N#N.U.j.j.n#N#N#N#N#J.j.j.j.j.U#M#J.j.j.j.j.j.S#K.j#M#N.j.j.j.j.n#N#N#N#N.j.j.j.j.j.U#N#N.n.j.j.j.j#N#N.j.j.j.j.T#M#L.U.j.j.j.j.U#N#N#N.T.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.n#N#N#N.T.j.j.j.j.j.j.n#J.n.j.j.j#J#L#N#N#M.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j#N#N.S.j.j.j.j.T#N#N#K.j.j.j.j.j.j.j.j.j.j.j.j.j#M.T.j.j.j.j.j.j.j.j.j.j.j.j.S#N#N#J.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.n.T.S.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j#J#J.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.T.n.j.j.j.j.j.j.S.U.j.j.j.j.j.j.j.j.j.j.j.j.j.j.S.j.j.j.j.j.j.j.j.j.j.j.j.j.j.T.S.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j" +}; diff --git a/wmCalClock-1.25/Src/wmCalClock_master_LowColor.gif b/wmCalClock-1.25/Src/wmCalClock_master_LowColor.gif new file mode 100644 index 0000000..ea2ad00 Binary files /dev/null and b/wmCalClock-1.25/Src/wmCalClock_master_LowColor.gif differ diff --git a/wmCalClock-1.25/Src/wmCalClock_master_LowColor.xpm b/wmCalClock-1.25/Src/wmCalClock_master_LowColor.xpm new file mode 100644 index 0000000..50b1a69 --- /dev/null +++ b/wmCalClock-1.25/Src/wmCalClock_master_LowColor.xpm @@ -0,0 +1,193 @@ +/* XPM */ +static char *wmCalClock_master_LowColor[] = { +/* width height num_colors chars_per_pixel */ +" 499 165 21 1", +/* colors */ +". c #000000", +"# c #000001", +"a c #0e1114", +"b c #171717", +"c c #181818 s Back", +"d c #313115 s Color1", +"e c #2e3033", +"f c #3d3f44", +"g c #64640f s Color3", +"h c #585b60", +"i c #7c8186", +"j c #abab08 s Color7", +"k c #f4f401 s Color9", +"l c #8c9198", +"m c #9aa1a9", +"n c #a8aeb6", +"o c #b9c0ca", +"p c #c7cdd5", +"q c #ccd4dc", +"r c #ced6e4", +"s c #d2dae4", +/* pixels */ +"###################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################", +"###################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################", +"###################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################", +"###################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################", +"###################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################", +"#####ccccccccccccccccccccccccccccccccccccccccccccccccccccccs###############ssssnhffhnssssssssssnhffhnsssssssssssssssssssssphhfflssssssssssssnlllossssssssssssssssssssslffhhossssssssslhhfflosssssssssssssssssssssnhffhnssssssssolhffhhnsssssssssssssssssssssphhfflssssssssssssolllllnssssssssssssssssssslffhhossssssssnlllllllllossssssssssssssssssnhffhnsssssssssssssmmfffnssssssssssssssssssphhfflssssssolllllllllllllsssssssssssssssssslffhhosssssssssslhffhnsssssssssssssssssssssnhffhnssssssssssnhffhnssssssss", +"#####ccccccccccccccccccccccccccccccccccccccccccccccccccccccs###############ssof#a#a##eorsssssof#a#a##eorssssssssssssssssshaa##a#blrssssssshf####lqrsssssssssssssssssnb#a##a#hrrsssshe####a##hqrssssssssssssssssof#a#a##eorsssoe##a###a#forssssssssssssssssshaa##a#blrssssssssse#####frrsssssssssssssssnb#a##a#hrrsssssf#########lqrssssssssssssssof#a#a##eorsssssssshe###a#lqrssssssssssssssshaa##a#blrsssl#############qqrsssssssssssssnb#a##a#hrrsssssha###a##borssssssssssssssssof#a#a##eorsssssnb##a###eorsssss", +"#####ccccccccccccccccccccccccccccccccccccccccccccccccccccccs###############sse########apqsssse########apqsssssssssssssssha########mqrssphba#####ipqrssssssssssssssso#########hprssha#########fpqssssssssssssssse########apqsrp##########apqsssssssssssssssha########mqrssssssi######fpqrssssssssssssso#########hpqsssra###a#####ipqrssssssssssssse########apqsssssoba######ipqssssssssssssssha########mqrrm###a#########opqsssssssssssso#########hpqsssha########bnqssssssssssssssse########apqsssl#########bnqssss", +"#####ccccccccccccccccccccccccccccccccccccccccccccccccccccccs###############sh#a##eba###hpqssh#a##eba###hpqsssssssssssssna###bf####boqrsna#######hoorsssssssssssssssb####fb####lprso###efba####lpqsssssssssssssh#a##eba###hpqsrb##ffe####ahpqsssssssssssssna###bf####boqrssssob##a###fnpqsssssssssssssb####fb####lpqsss##########hoorssssssssssssh#a##eba###hpqsssn######eefiopqssssssssssssna###bf####boqrl######a#####bnnpqsssssssssssb####fb####lpqsn####fhha###fpqsssssssssssssh#a##eba###hpqsob###aff####epqsss", +"#####ccccccccccccccccccccccccccccccccccccccccccccccccccccccs###############s####hmmh####mprs####hmmh####mpqssssssssssssf###elml####hoqss###e#a#ahnoqssssssssssssssl####lmle###eopssbelnmnh####foprssssssssssss####hmmh####mprshhommml####foprssssssssssssf###elml####hoqssssh##bf#a#emoqssssssssssssl####lmle##aboprsn##afhhhhhhlnoqssssssssssss####hmmh####mpqsob###bhmmmmnnpqssssssssssssf###elml####hoqoliihhhhhaa##hmnpqssssssssssl####lmle###eopsh###bmmnf####opqssssssssssss####hmmh####mpsh###bllmh####lpqss", +"#####ccccccccccccccccccccccccccccccccccccccccccccccccccccccs###############hb##bmlmnb###hopha##bmlmnb###hoprssssssssssp#a##hmmnh###enprsfhnn####hmoqsssssssssssssse#a#fmlml####loqslpnnnoof###enorssssssssssshb##bmlmnb###hopssspnnnof###enorsssssssssssp#a##hmmnh###enprssn###hf###emoqrssssssssssse#a#fmlml####moqsl###llmnnnnmnpqssssssssssshb##bmlmnb###hoprh##aflmmmnnopqrsssssssssssp#a##hmmnh###enpqqpnnnnmi####llnprsssssssssse#a#fmlml####loqfa##elmni####moprsssssssssshb##bmlmnb###hopb#a#fmmnnf###foprs", +"#####ccccccccccccccccccccccccccccccccccccccccccccccccccccccs###############h###elmopf###enph###elmopf###enoqssssssssssl####mmnoi####noqsspnn####hmoqssssssssssssss###ahlmoo###ahnprrqpooppf##abmoqsssssssssssh###elmopf###enorsrpppqnb###hmoqsssssssssssl####mmnoi####noqssb##bnf###emoqssssssssssss###ahlmoo###ahnprl###llnnoooopqrsssssssssssh###elmopf###enooa##almihiopqqrssssssssssssl####mmnoi####noqrqpooooe###flmoqsssssssssss###ahlmoo###ahnqf###amnqh##abmnpqssssssssssh###elmopf###enp####hmnopl###anoqs", +"#####ccccccccccccccccccccccccccccccccccccccccccccccccccccccs###############b###hmnppl###bmoa###hmnppl###bmoqssssssssssh###elmoqq####inprrqpo#a##hmopsssssssssssssn####lmnpqf###fnpqsrqsqrrfa##enoqsssssssssssb###hmnppl###bmoqsslllhb###elmoqsssssssssssh###elmoqq####inpri###hne###emopsssssssssssn####lmnpqf###fnpqf######fhqpqrrrsssssssssssb###hmnppl###bmoha##ff##a##hqrrssssssssssssh###elmoqq####inprrqqppl####imnorssssssssssn####lmnpqf###fnpn####elma###hmnoqssssssssssb###hmnppl###bmo###ahmnpql####moqs", +"#####ccccccccccccccccccccccccccccccccccccccccccccccccccccccs###################hmoqrl####mo#a##hmoqrl####moqsssssssssrh###elnorr#a##hnorsrrr###ahmoqsssssssssssssla###lmoqsfa##emoqsssssrp####hmnqsssssssssss####hmoqrl####moqss#######hlmnpqssssssssssrh###elnorr#a##hnoo###enmf#a#emoqsssssssssssla###lmoprh###emoph##a###a#boqrsssssssssssss####hmoqrl####moh###########fpqsssssssssssrh###elnorr#a##hnorsrssrb##aflmnprssssssssssla###lmoprh###enoqfa########flmnprssssssssss####hmoqrl####moe####loqoe####mnpr", +"#####ccccccccccccccccccccccccccccccccccccccccccccccccccccccs#################a#hmopsl####mn####hmopsl##a#mnprsssssssssf###emnprr####hnoqsssr####hmoqrssssssssssssl####lmnqrf##aemoqrsssssb###bmmpqsssssssssss##a#hmopsl##a#mnprs#####aehmmnpssssssssssssf###emnprr####hnof###imnf###emoqrssssssssssl####lmnrrf##aemoqa#########bnssssssssssssss##a#hmopsl##a#mn##########a##hpqsssssssssssf###emnprr####hnoqrsssi####llnorrssssssssssl####lmnrrf###emoqqha#####aeimnoqsssssssssss##a#hmopsl####mnha####ff###a##lnpq", +"#####ccccccccccccccccccccccccccccccccccccccccccccccccccccccs###################hmoqsl#a##ln###ahmoqsl####lnpqsssssssssf#a#emoqss###ahmoqssss####hmoqsssssssssssssl####lmoqrh###emoqsssssf###ahlnoqsssssssssss####hmoqsl####lnors##a#####amprssssssssssssf#a#emoqss##a#hmm##afmmof###emoqsssssssssssl####lmorsf###emorfllhhe#####hpqssssssssssss####hmoqsl####ln#####hmmia####opqssssssssssf#a#emoqss###ahmoqssssb###flmnprsssssssssssl####lmorsf##aemoqlb########alnprsssssssssss####hmoqsl#a##lnpb##a########almoq", +"#####ccccccccccccccccccccccccccccccccccccccccccccccccccccccs###################hnnrrl####lm####hmopsl####lmopsssssssssh###emoprs####hmopssss#a##hnoprssssssssssssl##a#lmoqrf###emopssssfa###fmmnprsssssssssss#a##hnnrrl####lmoqsqonlf####epqssssssssssssh###emoprs####hma###eeefb###befqrssssssssssl##a#lmopsh###emopsroommlb###aoprsssssssssss#a##hnnrrl####lm##a#filmmh####hoprsssssssssh###emoprs####hmopsssi##a#llnorrsssssssssssl##a#lmopsh###emol####fhe####anqssssssssssss#a##hnnrrl####lmone####a#f###elnoq", +"#####ccccccccccccccccccccccccccccccccccccccccccccccccccccccs###############e#a#fmoqsh###elmea##fmorsh##ablmoqsssssssssh###amorsn#a##imoqssss####hmoqssssssssssssso####hmoqsb###hmoqssqh####fmlnoqsssssssssssse###fmorsh###elmoqsqpnmnh####lpqsssssssssssh###amorsn####im##########a####pqrssssssssso####hmoqrb###hmoqsrqpoooh####noqssssssssssse###fmorsh##abln####hlmnoo###ahnoqsssssssssh###amorsn#a##imoqsssb###flmnprsssssssssssso####hmoqrb###hmo###ahmmmh####hpqssssssssssse###fmoqsh##ablmoppmfeehle###hmnps", +"#####ccccccccccccccccccccccccccccccccccccccccccccccccccccccs###############f###emoqsfa##elnf###emoqsfa##elnorsssssssssm####moprl####lmopssss##a#hmopssssssssssssss###ahmops##a#hmopsoe####flmmoprssssssssssssf#a#emopsh###elnorsrqpooo####hopsssssssssssm####moprl#a##lm#a###########a#opqssssssssss###ahmops####hmopssrqqqql####mnprssssssssssf#a#emopsfa##elne###hlnppq####hnoqsssssssssm####moprl####lmopssi####llnorssssssssssssss###ahmops####hmi####mmmnoe##afoprssssssssssf#a#emoqsfa##elnorqponmmh####imops", +"#####ccccccccccccccccccccccccccccccccccccccccccccccccccccccs###############l####lopp####hmni####lopp####hmnprssssssssss#a##hnpre###elmoqssss####hmoqssssssssssssssfa##bmoqi####lmorob####ilmmopqsssssssssssssl####loqo####hlonrsrrqqqm###ahnoqsssssssssss#a##hnpre###elmfffeefefb###aeennpqsssssssssfa##bmopi##a#lmoqssrsrrsf###elnpqssssssssssl####lopp####hmnh###amoprl##a#imoqssssssssss#a##hnpre###elmorsob##aflmnprssssssssssssssfa##bmoqi##a#lmi####imnppf###enoqssssssssssl####lopp####hmnprrqpopi#a##flmors", +"####ssssssssssssssssssssssssssssssssssssssssssssssssssssssss###############sb###emnf###blmorb###emnf#a#blnoqrssssssssssh###aipha###ilnorssss##a#hmopssssssssssssssn###ahnmb###flnoob####beeefffnssssssssssssssb###emnf##aalnolbhlsrsib####lnoqsssssssssssh###aipi####ilnoonnmmmne#a#elmnopqsssssssssn###ahnmb###flnolflprsnfa###hlnoqsssssssssssb###emnf#a#blmon####emqmb###blnoqssssssssssh###aipi####ilnorsh####llnpqrssssssssssssssn###ahnmb###flnl##a#emnql####hmoqsssssssssssb###emnf##aalnoqrssole####bllnoqs", +"###########################################################################sl#a#####a#ahlnopl#a####a###hlnoqsssssssssssob#####a###elmnprsssra###hmoqssssssssssssssrf#########allno####a########lqrssssssssssssl#######a##hlnof########a##hlmoqsssssssssssob#########elmnpppooooof###elmooqrsssssssssrf####a####allnoh#########ablmnpssssssssssssl######a###hlnopia##########ilnoqssssssssssob#########elmnpro##a#flmnprsssssssssssssssrf#########allnoe####afe####almoqsssssssssssl#######a##hlnorl########bimmoprs", +"###########################################################################srf####a###emmnqrrf########flmnprsssssssssssrl########bimmorsssss###ahmoqrssssssssssssssob###a##a#hmmop#############ipprsssssssssssrfa###a###flmnqb#a########fllnpqsssssssssssrl########bimmorrqqqpqqf###emopqrrssssssssssob######a#hmmope#########fllnoqssssssssssssrfa#######flmoprpf###a##a##hmmnprssssssssssrl#######aaimmorsh####llnoqrssssssssssssssssob######a#hmmopoa########aallnpqsssssssssssrfa###a###flmnprl#######eimmopqss", +"###########################################################################ssshb####bhlmnoqrsrhaa###bhlmnorsssssssssssssqme#a##aflmmoprsssss####hmoqsssssssssssssssrnh#####blmmnpr##a###a##a##ahnpqssssssssssssrhb####bhlmnoqnf###a##abilmmoprssssssssssssqme#a##aflmmoprrrsrsssf#a#emoqrssssssssssssrnh#####blmmnprhba##a##ehlmmoprsssssssssssssrhb#a##bhlmnoqrrpib#####blmmnoqssssssssssssqme##a##flmmoprp##a#flmnprsssssssssssssssssrnha##a#blmmnpqqphb######fimmoprssssssssssssrhb####bhlmnorsl##a##filmnnpqsss", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssssq###############ssrrolhhimmmnoprrsrroihhimmmnoprsssssssssssssspomhhhmlmmopqssssssronlmmoqrsssssssssssssssrpohihimlmnpprqonmlllllllmlmnoqssssssssssssrrolhhilmmnoprsrplhhhillmmnnpqsssssssssssssspomhhhmlmmopqrssssssssronmmoqrsssssssssssssrpohihimlmnppssrpihhhmllmnopqssssssssssssssrqoihhimmmnoprrsrpolhihmmlmmoprssssssssssssspomhhhmlmmopqrrsqommmnorrssssssssssssssssssrpnhihimlmnpqrsqpomhihlmmmmopqsssssssssssssrqolhhilmmnoprrplihlmlmmmopqssss", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssssq###############ssrrpoonmmnnoprssssqpponmmnnopqsssssssssssssssrroonnmmnoprrsssssrrpnmnnorssssssssssssssssrqponnmmnooqrrrpnmmmmmmmmmmnnprsssssssssssssqpoonmnnnoprssrponnmmnmnnoprsssssssssssssssrroonnmmnopqssssssssssrpnnnprssssssssssssssrqponmnmnnpprssrponnnmmnnopqssssssssssssssssqpponmmnnopqrsssqpoonmmmnnoprssssssssssssssrqponnmmnopqsssrponmnoprsssssssssssssssssssrqponmmmnooprssrqpoonnnnmnopqsssssssssssssssrpoonnmnnopqssrqponmmnnopqsssss", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssssp###############ssssrqppooopqrrsssssrpppooppqrssssssssssssssssrrrppoooopqrsssssssrqpooprrssssssssssssssssssqpooooopqrrsrqpooooooooooopqrrsssssssssssssrqppoooqqrssssrppooooooqqsssssssssssssssssrrqppoooopqrssssssssssrqoopqrssssssssssssssssqpooooppqrrssrqppooooppqrrsssssssssssssssssrqppooppqrrsssssrrpoooopprrsssssssssssssssrrpppoooopqrsssrqpooopqssssssssssssssssssssssrpooooopqrrssssrppooonpopqrssssssssssssssssrqpoooppqrrsssrpoooooqqrssssss", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssssq###############sssssrrqqqrrsrssssssssrqrqqrsrsssssssssssssssssrrrrpqqrrsssssssssrrrqrqrsssssssssssssssssssrrrpqqrrrsssrrrprppqpqpqpqqrssssssssssssssssrrqqqrrsrsssssrqrpqpqrrssssssssssssssssssssrrrpqqrrssssssssssssrrrqrrrsssssssssssssssssrrrpqqrrssssssrqpqpqqrrsssssssssssssssssssrrrqqqqrrrsssssssrrrqqqqrsrsssssssssssssssssrrrqqqrrssssssrqpqrrssssssssssssssssssssssssrrrqqrrrssssssssrqqqqqqrsssssssssssssssssssrrrqqrrrssssssrrqqqrrrsssssss", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssssp#######################################################################################################################################################################################################################################################################################################################################################################################################################################################", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssssq#######################################################################################################################################################################################################################################################################################################################################################################################################################################################", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssssp###############sssssllllssssssssssnhffhnsssssssssssssssssssssssnlllosssssssssssnlllossssssssssssssssssssssolllnssssssssslhfhflosssssssssssssssssssssssllllssssssssolhffhhnsssssssssssssssssssssssnlllosssssssssssolllllnssssssssssssssssssssolllnssssssssnlllllllllossssssssssssssssssssllllsssssssssssssnlffhmssssssssssssssssssssnlllosssssolllllllllllllsssssssssssssssssssolllnsssssssssslffhhnrssssssssssssssssssssssllllssssssssssnhffhnssssssss#", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssssq###############ssohb####qqrssssrpf###a##eorsssssssssssssssssshe####lqrssssssshe####lqrssssssssssssssssssnf####fqrssssshb#a#####hrrssssssssssssssssrphb####qqrsssoe###a##a#forsssssssssssssssssshe####lqrssssssssse##a##fqrssssssssssssssssnf####fqrssssssf#########lqrssssssssssssssrphb####qqrsssssssshb##a##lqrsssssssssssssssrie####lqrsssl#############qqrssssssssssssssnf####fqrssssssh##a####borssssssssssssssssrphb####qqrssssrnb###a##eorsssss#", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssssp###############nh##a####porrsssse##a#####bpqssssssssssssssoiba#####ipqrsssoibaa####ipqrsssssssssssssssle##a###fpqrsssia######a##fprssssssssssssssnh#######porrsso##########bpqssssssssssssssoiba#####ipqrsssssssi#####afpprsssssssssssssle##a###fpqrsssss##a##a####ipqrssssssssssssnh####a##porrssssspba######ipqsssssssssssssohb######ipqrssl#a###########opqssssssssssssle##a###fpqrsssshb########bnrssssssssssssssnh#######porrsssl#########bnrssss#", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssssq###############h########nnpqsssh####be####hpqsssssssssssssn####a##ahnpqsssn#######ahnpqsssssssssssssssb#####a#fnpqsssn###efe#####lpqsssssssssssssh#####a##nnpqsssb##fee##a##hpqsssssssssssssn#####a#ahnpqssssssob#a####enpqsssssssssssssb#######fnpqsssss#########ahnpqssssssssssssh########nnpqssssn#####abffiopqssssssssssssnaa###a#ahnpqsrm####a##a####bnnpqsssssssssssb#######fnpqsssna###fhh####fpqsssssssssssssh#####a##nnpqssob####ff####epqsss#", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssssp###############la##e#a##lnoqsss##a#hmmh####mpqsssssssssssss###e####hnoqssss###e####hnoqsssssssssssssssfa#ba###enoqssssbelmmmha###foprssssssssssssl#a#e####lnoqssshiommml###afoprsssssssssssss##ae####hnoqssssssh##af###enoqsssssssssssssfa#bb#a#enoqssssn##afhhhhhhlnoqssssssssssssl#a#e####lnoqsssob###bhmmmmnnpqsssssssssssss###e####hnoqssolihhhhhhb#a#hlnpqsssssssssssfa#bb###enopsssh###bmmnfa###opqssssssssssssl#a#e####lnoqssha##blmmha###lpqss#", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssssq###############sbhoh####lmoqssi###ammmnb###hoprssssssssssssfhmn###ahmoqssssfhmn###ahmoqssssssssssssssslemnf###emoqsssslponnooea##enoqsssssssssssssbhoh####lmoqsssrqonnnof###enoqsssssssssssssfhmn###ahmoqsssssn###hf###emoqssssssssssssslemnf###emoqssssl###llmmnnnnnpqsssssssssssssbhoh####lmoqsssh###flmmmnnopqssssssssssssssfhmn###ahmoqssrrponnnni####lmnprssssssssssslemnf#a#emorsssf###emmni####moprssssssssssssbhoh####lmoqssb##aflmnnf###eoprs#", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssssq###############ssqoha###lmopssf###elmopf###enorssssssssssssspon####hnopssssspon####hnopssssssssssssssssrpof###emoprsssrppooppf###emoqssssssssssssssqoi####lmopssssrqpppnb###hmoqsssssssssssssspnn####hnopsssssb#abnf##aemopssssssssssssssrpoe###emoprsssl###llnnoooopprssssssssssssssqoi##a#lmopsso#a#blmhiioppqrssssssssssssssspon####hnopsssrqpooooe###flmoqsssssssssssssrpoe###emopsssh###bmnpha##elnpqsssssssssssssqoi####lmopss####hmnopi###bnoqs#", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssssq###############ssppl####lmoqssba##hmnppl###anoqsssssssssssssqpo##a#hmoqssssrqpo##a#hmoqsssssssssssssssssppf###emoqssssssqqrrsf###emoqssssssssssssssppi#a##lmoqssssrlllhb##ablmoqsssssssssssssrrpp####hmoqsssri###hmf###emoqsssssssssssssssppfa##emoqsssrh######fhpppqrsssssssssssssssppi####lmoqssi###ff#a###hqrssssssssssssssssppo#a##hmoqsssrrqrppl####ilnorssssssssssssssppf###emoqssrn#a##blma###hlnoqsssssssssssssppi#a##lmoqss####hmoprl####moqs#", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssssp###############ssrrl####lmopss####hmoprl####mopsssssssssssssrrq####hmopssssssrq####hmoprsssssssssssssssssrf#a#emoqrsssssssssoa###hmopssssssssssssssrql####lmopsssss#######hmmnorsssssssssssssssqq##a#hmoprsso###emne###emoprsssssssssssssssrf###emoqrssrf##a##a#aborrssssssssssssssssrrl####lmoprsf###########fprssssssssssssssssrq####hmopsssssrrsrb###fmmnprsssssssssssssssrfa##emoqrssrf#########fmmnqrsssssssssssssrql####lmopssea##alopoe####mnpr#", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssssq###############ssrrl#a##lmoqss####hmoqsl#a##mnprsssssssssssssss####hmoqssssssrs####hmorssssssssssssssssssqh###emoqssssssssssb###ammoqssssssssssssssrrl####lmoqsssss######ehmmopssssssssssssssssrs####hmorsssf###imnfa##emorssssssssssssssssqh###emoqssssb#########bnrssssssssssssssssrrl####lmorss#a###a###a###hpqsssssssssssssssrs###ahmoqsssssssri####llnoqsssssssssssssssssf###emoqsssssh#a####abllnoqssssssssssssssrrl####lmoqsri#####ff###a##lnpq#", +"#####sssssssssssssssssssssssssssssssssssssssssssssssssssssspa##############ssssl####lmoprs#a##hnnrrl####lnoqsssssssssssssss##a#hnoprsssssss#a##hnoprssssssssssssssssssf###emopsssssssssf##a#hmnorssssssssssssssssl####lmoprssss##a#####ampqssssssssssssssssss##a#hmopssna##hmmnf###emopsssssssssssssssssf##aemoprsssflihhe#####hpqsssssssssssssssssl##a#lmoprs#####hlmia####opqssssssssssssssss####hmoqrsssssssb##aflmnprsssssssssssssssssh###emopsssslba#######alnqrssssssssssssssssl####lmopsrra###########blmoq#", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssssp###############ssssl####lmorss###ahmoqsl####lmoqsssssssssssssss####hmoqssssssss###ahmoqsssssssssssssssssssf###emoqssssssssf#a##flmnprssssssssssssssssl#a##lmorsssssronlf####epqssssssssssssssssss####hmoqssb###beffb###befqsssssssssssssssssf###emorsssssrponmlb###aoprssssssssssssssssl####lmoqss###aellmmh####hoprsssssssssssssss##a#hmoqsssssssi####imnorssssssssssssssssssf###emoqsssl####fhe####bnpsssssssssssssssssl#a##lmoqssroe#a####f###elnoq#", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssssq###############ssssl##a#lmopsse###fmoqrh##ablmorsssssssssssssss#a##hmopssssssss####hmopsssssssssssssssssssh###emopsssssssfa###fmmnoqsssssssssssssssssl####lmopsssssqpnnmha###lpqsssssssssssssssss#a##hnopss####a#####a####prrsssssssssssssssh###emopsssssrqooooh####noqssssssssssssssssl####lmopss####hlmnoo##a#hnoqsssssssssssssss####hmopsssssssb###fmmnprssssssssssssssssssfa##emopsss####hmmlha###hprssssssssssssssssl####lmopsssrplfefhle###hmnps#", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssssq###############ssssl####lmoqssf###emoqrh###elnpqsssssssssssssss###ahmorssssssss#a##hmoqsssssssssssssssssssf##aemoqsssssof####emlmoprsssssssssssssssssl####lmoqsssssrqpooo###ahnprssssssssssssssss###ahmorss############a##ooqsssssssssssssssf###emoqssssssrqrppla###mnprsssssssssssssssl#a##lmoqsse##afmnopq####hnoqsssssssssssssss###ahmoqsssssri####llnoqsssssssssssssssssssf##aemorsrm##a#mmmnoe###foprsssssssssssssssl####lmoqssssrponmnh###ahmoqs#", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssssp###############ssssl####lmopssla###lopo####hmnprsssssssssssssss####hmopssssssss###ahmopsssssssssssssssssssfa##emoqrsssob####ilmmoorssssssssssssssssssl##a#lmopssosssrqqqm####hooqssssssssssssssss####hmopssfffeeeffa###aeenopqssssssssssssssfa##emopssssssssrsrf###elnoqsssssssssssssssl####lmopssha##amoprl###aimoqsssssssssssssssa###hmoqrssssob##aflmnprsssssssssssssssssssh###emopssl####imnppf###enoqsssssssssssssssl##a#lmopsssssqpooi#a##fmnnrr#", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssssq###############ssssl####lmorssrb###elof###ammoqssssssssssssssss###ahmoqssssssss####hmoqsssssssssssssssssssf###emoqsssob####aeeefffnssssssssssssssssssl####lmoqsslbhlrrrib###almoqssssssssssssssss#a##hmorssrponnmmmf###elmnnpqssssssssssssssf###emoqssrmflossnf####hlnprsssssssssssssssl####lmoqsso####empnb###blmoqsssssssssssssss###ahmoqsssssh####llnoqssssssssssssssssssssf###emoqsrn####emopl####hmoqsssssssssssssssl####lmoqrsssssole####allnpqs#", +"#####sssssssssssssssssssssssssssssssssssssssssssssssssssssspa##############ssssl##a#lmoprssl##a####a##hmnoqssssssssssssssssa###hmoqrsssssss#a##hmoqrssssssssssssssssssh###emopsss##a##a#######lqrssssssssssssssssl####lmopssfa##########hlmoqssssssssssssssss###ahmopsssqoooooof###elnoorrssssssssssssssh##aemoqrssh#a####a###elmnpqsssssssssssssssl####lmopssri########a##ilnorsssssssssssssss####hmoqrsssp##a#flmnprrsssssssssssssssssssfa##emopssse####afe####blmppsssssssssssssssl####lmopsssl########bllnopqs#", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssssp###############ssssl####lmoqsssrf########flmnprssssssssssssssss####hmoqssssssss###ahmoqsssssssssssssssssssf###emorsss#########a###ipqrsssssssssssssssl#a##lmorssb##a#######fllnprssssssssssssssss####hmoqsssrqrpqprf#a#emoprrsssssssssssssssf###emoqssse#########filnoqssssssssssssssssl#a##lmoqssrqf#a##a###ahlmnprsssssssssssssss###ahmoqssssh####llnorsssssssssssssssssssssf###emorsssoba########bimnoqsssssssssssssssl#a##lmoqssrm#######eimmnpqss#", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssssq###############ssssl####lmopssssrhb#a##bhmmnoqsssssssssssssssss##a#hmoqrsssssss####hmopsssssssssssssssssssfa##enopsss####a########hoorsssssssssssssssl####lmopssnf###a##aehmlnnprssssssssssssssss#a##hmoqrssssrssssfa##emoprssssssssssssssssfa##emopssshb#a####ehlmmoprssssssssssssssssl####lmopsssrpia#####eimmnorssssssssssssssss#a##hmoqrsso####flmnprsssssssssssssssssssssh###fmopssrrpha#####aflmmoprsssssssssssssssl####lmopssrl##a##filmmopqrss#", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssssq###############sssssronllmoqssssrqolhhilmmmoprsssssssssssssssssromlmmoqssssssssronlmmorsssssssssssssssssssrronmmoqsssronmllllmlmlmmnoqssssssssssssssssqonllmoqsssrqlhhhillmmnopqsssssssssssssssssqonlmmoqsssssssssssponmmoqsssssssssssssssssrronmnorssssrpihhhlllmnopqssssssssssssssssssqonllmorssssqpomhihlllmnoprssssssssssssssssromlmmoqsssssqonlmnorsssssssssssssssssssssrrqpmmmoqssssppolihiimmmmopqsssssssssssssssssqonllmoqsssollhlmllmnopqssss#", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssssp###############sssssqpnnnnorsssssrpoonmnnnopqssssssssssssssssssrpnnmnprrsssssssrpnnmnpqrsssssssssssssssssssrpnnnpqsssrpnnmmmmmmmmmmoorssssssssssssssssronnnnorsssrponnmmmnnnopqssssssssssssssssssronnmnprrssssssssssrpnnnpqssssssssssssssssssronnnpqssssrponnnnmnnopqsssssssssssssssssssronnnnorsssssrponnmnmnnopqsssssssssssssssssrpnnmnprrsssrponmnoprrssssssssssssssssssssssronnnprsssssqponnnmmmnooqssssssssssssssssssronnnnprrsssqpnnmmnnopqrssss#", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssssq###############sssssrqpooorrssssssrpppooopqrssssssssssssssssssrrqpoopqrsssssssrrroooprrssssssssssssssssssssrppoorrsssrqponooooooooopqrsssssssssssssssrrrpooorrsssrrppoooooopqsssssssssssssssssssrrrpoopqrssssssssssrrqpoorrssssssssssssssssssrrpooqrsssssrppooooppqrsssssssssssssssssssrrrpooorrsssssrrqppooopprrsssssssssssssssssrrqpoopqrssssrqpopoprssssssssssssssssssssssssrrpopqrsssssrrqqooooooprssssssssssssssssssrrrpoooqrsssrrqpoooppqrssssss#", +"#####sssssssssssssssssssssssssssssssssssssssssssssssssssssspa##############sssssrrqqrrrsssssssssrqqqrrsssssssssssssssssssssrrrqrrrrssssssssrrrrprrrsssssssssssssssssssssrrrrrrsssrrrqrppppqpqpqqrrsssssssssssssssssrqqrrrssssssrqqpqpqrsssssssssssssssssssssssrrprrrrssssssssssssrrqrrrsssssssssssssssssssrqrrrrssssssrqqpqprrrssssssssssssssssssssssrqrqrrsssrssssrrqqprqrrsssssssssssssssssssrrrprqrrsssssrrpqqrssssssssssssssssssssssssssrrqrrrsssssssrrrqqqqrrsssssssssssssssssssssrqrqrrrsssssrqqpqqrrsssssss#", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssssp#######################################################################################################################################################################################################################################################################################################################################################################################################################################################", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssssq#######################################################################################################################################################################################################################################################################################################################################################################################################################################################", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssssq###############ssrniffhhnssssssssssnhffhnssssssssssssssssssssolhffhlssssssssssssnlllosssssssssssssssssssslhhfflossssssssslhfhflosssssssssssssssssssrniffhhnssssssssolhffhhnssssssssssssssssssssolhffhlssssssssssssolllllnsssssssssssssssssslhhfflossssssssnlllllllllossssssssssssssssrniffhhnsssssssssssssmmfffnsssssssssssssssssolhffhlssssssolllllllllllllssssssssssssssssslhhfflosssssssssslhffhnsssssssssssssssssssrniffhhnssssssssssnhffhnssssssss", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssssp###############sne#####a#eorsssssof#a#a##eorsssssssssssssssoh####a##blrssssssshf####lqrsssssssssssssssshe####a##hrrsssshe#####a#hrrsssssssssssssssne#####a#eorsssoe##a###a#forsssssssssssssssoh####a##blrssssssssse#####frrsssssssssssssshe####a##hrrsssssf#########lqrsssssssssssssne#####a#eorsssssssshe###a#lqrsssssssssssssoh####a##blrsssl#############qqrsssssssssssshe####a##hrrsssssha###a##borsssssssssssssssne#####a#eorsssssnb#a#a##eorsssss", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssssq###############o##########bnqssssea#######apqsssssssssssssse##########lqrssoiba#####ipqrssssssssssssssia#########fpqssia##a######fpqssssssssssssso##########bnqsrp##########apqsssssssssssssse##########lqrssssssi###a##fpqrssssssssssssia#########fpqssss#a##a#####ipqrssssssssssso##########bnqsssssoba######ipqssssssssssssse##########lqrsla##a#########opqsssssssssssha#########fpqsssha########bnqssssssssssssso##########bnqsssl#########anqssss", +"#####sssssssssssssssssssssssssssssssssssssssssssssssssssssspa##############sb##bff#####hpqssh####eba###hpqsssssssssssssha##ffa####aoqrsn#####a##hoorssssssssssssssn###efba####lpqsn###efe#####lpqsssssssssssssb##bff#####hpqsrb##ffe####ahprsssssssssssssha##ffa####aoqrssssob######fnpqssssssssssssn###efba####lpqsss######a###hoorssssssssssssb##bff#####hpqsssn######eefiopqssssssssssssha##ffa####aoqrl######a#####bnnpqsssssssssso###efba####lpqsn####fhha###fpqsssssssssssssb##bff#####hpqsob####ff####epqsss", +"####ppqpqpqqpqqpqqqpqqqpqqqpqqpqqpqqpqqpqqpqqpqqqpqpqqpqqpqp###############shbhnnmlb####opqs####hmmh####mpqssssssssssssn#hmmmmf###ahoqss###e###ahnoqssssssssssssssrbelnmnh####foprrbelmmnh####foprsssssssssssshbhnnmlb####opsshhommml####foprssssssssssssn#hmmmmf###ahoqssssh##bf###emoqssssssssssssrbelnmnh####foprsn##afhhhhhhlnoqsssssssssssshbhnnmlb####opqsob###bhmmmmnnpqssssssssssssn#hmmmmfa###ioqoliihhhhhaa##hmnpqsssssssssssbelnmnh####foqsh###bmmnf####opqsssssssssssshbhnnmlb####opsh#a#almmh####lpqss", +"#######################a####a####a#####a##a##a##a#a#a#aa#aa################snopnnooha###mophb##bmlmnb###hoprsssssssssssslonnnno####hpprsfhnn####hmoqssssssssssssssslpnnnoof###enorslpnnnnof#a#enorssssssssssssnopnnooha###moprsspnnnof###enoqssssssssssssslonnnno####hpprssn##ahf##aemoqrsssssssssssslpnnnoof###enorsl###llmmnnnmnpqssssssssssssnopnnooha###moprh#a#flmmmnnopqrssssssssssssslonnmno####hoprqpnnnnmi####llnprssssssssssslpnnnoof###enoqfa##elmni####moprsssssssssssnopnnooha###mopb###fmmnnf###foprs", +"###########################################################################srrqpoppl####lnoh###elmopf###enoqssssssssssssqpooopp##a#hnoqsspnn#a##hmoqsssssssssssssssrqpooppf##abmoqsrqpoppqf###bmoqssssssssssssrrqpoppl####lnorsrpppqnb###hmoqsssssssssssssqpooopp##a#hnoqssb##anf###emoqsssssssssssssrqpooppf##abmoqsl###lmmonooopqrssssssssssssrrqpoppl####lnoo###alnhiiopqqrssssssssssssssqpooopp####hnoqrqpooooe###flmoqssssssssssssrqpooppf##abmoph###amnqh##abmnpqsssssssssssrrqpoppl####inp###ahlnopia##anoqs", +"###########################################################################ssrrrrrrl####lmob###hmnppl###bmoqsssssssssssssqppprr####hmorsrqpo###ahmopsssssssssssssssssrqrrrfa##enopssrrqqrrfa##fmoqsssssssssssssrrrrrrl####lmoqsslllhb###elmoqssssssssssssssqppprr####hmorsi###hne###emopsssssssssssssssrqrrrfa##enoqsf######fhrqprrrsssssssssssssrrrrrrl####lmoha##ff#####hqrrsssssssssssssssqppqrr##a#hmorrrqqppl####imnorssssssssssssssrqrrrfa##enoqm####elma###hmnoqssssssssssssrrrrrrl##a#lmo####hmopql####moqs", +"###########################################################################ssssrssse###elno####hmoqrl####moqsssssssssssssrrrsri####lmoqssrrr####hmoqssssssssssssssssssssrp####hmoqssssssrp####hmoqsssssssssssssssrssse###elmoqss#######hlmnpqssssssssssssssrrrsri####lmoqo###enmf###emoqssssssssssssssssssrp####hmoqsfa######aaorssssssssssssssssssrssse###elmoh###########fpqsssssssssssssssrrrsri####lmoqsssrsrb##aflmnprsssssssssssssssssrp####hmoqsfa########flmnprssssssssssssssrssse###elmoea##aloqoe####mnpr", +"###########################################################################sssssssh##a#hmmo#a##hmopsl#a##mnprssssssssssssssrsn###aflmoqrsssr####hmoqrssssssssssssssssssssb###blnopsssssssb###blnopssssssssssssssssssh##a#hmnoqss#####aehmmnpsssssssssssssssssrsn###aflmoqf###imnf#a#emoqrssssssssssssssssssb###blnopsb#########anrssssssssssssssssssssh##a#hmno#####a##a####hpqssssssssssssssssssn####flmoqrssssi####llnorrssssssssssssssssssb###blmoqsrha#####aeimnoqssssssssssssssssssh####hmnoh#####ff######lnpq", +"###########################################################################ssssssl####emmnp###ahmoqsl####lnpqsssssssssssssssob###ailnpqsssss##a#hmoqssssssssssssssssssssf###ahlnoqssssssf###ahlnoqsssssssssssssssssl####emmnpsss##a#####amprssssssssssssssssssob###ailnon###hmmof###emoqssssssssssssssssssf###ahlnorsfllhhea####hpqssssssssssssssssssl####emmnp##a##hlmiaa###opqssssssssssssssssob###bilnpqsssssb###flmnprssssssssssssssssssf###ahlnpqslb########alnprsssssssssssssssssl##a#emmnpsb#########a#almoq", +"###########################################################################sssssl#a##bllnor####hmopsl####lmopssssssssssssssob##a#ilmoprsssss####hnoprssssssssssssssssssfa###fmmnqrsssssfa###fmmnqrssssssssssssssssl#a##bllnorsssronlf####epqsssssssssssssssssob##a#ilmopb###beefb###befqrssssssssssssssssfa###fmmnqrssrpnnmla###aoprssssssssssssssssl#a##bllnor####fllmmh####hoprssssssssssssssob##a#ilmoprrsssi##a#llnorrsssssssssssssssssfa###fmmnprl###afhe####anqsssssssssssssssssl####bmlnoqroe######f###elnoq", +"###########################################################################ssssl####bimnopre###fmorsh##ablmoqsssssssssssssob####hlmnpqrssssra###hmoqsssssssssssssssssqh####fmlnoqssssrh####fmlnoqssssssssssssssssl####almmoprsssrpnmnh####lpqsssssssssssssssob####hlmnpr####a##########pqrsssssssssssssqh####fmlnoqsssrqpoooha###noqsssssssssssssssl####almmopr####hlmnno###ahnoqsssssssssssssob####hlmnpqssssrb###flmnprssssssssssssssssqh####flmnoqs####hmlmh####hpqsssssssssssssssl##a#aimmoprrrpmffehle###hmnps", +"###########################################################################sssha###bllnnpqsfa##emoqrfa##elnorsssssssssssslba##ahmmmpprssssss###ahmopssssssssssssssssoe####flmmoprsssoe####flmmoprsssssssssssssssha###bllmopqssssrqpooo####hopsssssssssssssslba##ahmmnoqr##a######a##a##opqrsssssssssssoe####flmmoprsssrrqqppl####mnprsssssssssssssha###bllmopqse###hlnpqq####hnoqsssssssssssslba###ilmnoqrssssi####llnorssssssssssssssssoe####fmlnoprl#a##mmmnoe##afoprsssssssssssssha###almmopqssrqponmmh####imops", +"###########################################################################ssf####flmmoprssl####lopp####hmnprsssssssssssl####blmmmoprsssssss####hmoqsssssssssssssssob###ahmmmopqsssob####ilmmopqsssssssssssssssf####flmmopqssossrrqqqm###ahnoqssssssssssssl####blmmmoprsfffeeeefb###aeennpqssssssssssob###ahmmmopqsssssrsrssf###elnpqssssssssssssf####flmmopqssha##amoprl##a#imoqsssssssssssl####amlmmoprssssob##aflmnprsssssssssssssssob###ahlmmoorsl####imnppf###enoqssssssssssssf####flmmnpqssssrqpopi#a##flmors", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssss################sfa####eeffffhsssb###emnf##aalnoqsssssssssssl#a###eeeffffssssssss#a##hmopssssssssssssssob####afeefffnssob####beeefffnssssssssssssssfa####eeefffhsslbhlssrib####mmoqsssssssssssl#a###eeeffffssspnnmnmne###elmnopqsssssssssob####afeefffnsslfmossnf#a##hlnoqsssssssssssfa####eeefffirso####emqmb###blnoqssssssssssl#a###eeeffffsssssh####llnpqrssssssssssssssob#a##bfeefffnsn####emopl####hmoqsssssssssssfa####eeffffirsssssole####bllnoqs", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssss################h####a#######hsssl#a#####a##hlnoqsssssssssrm#############qrrsssss###ahmoqssssssssssssss###a#########lqr####a########lqrssssssssssrh####a##a####hssf#a########aflnoqsssssssssrm#############rqrqpooooofa##emmooqssssssssss###a#########lqsh##########blmnpssssssssssrh####a##a####fqrri###########ilnoqssssssssrm#############rqrrp##a#flmnprsssssssssssssss#############lrre####afe####almoqsssssssssrh####a#######fqrsl########bimmoprs", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssss################f############fpqrrf####a###flmnprssssssssssl####a########porrssss####hmoqrsssssssssssss#############ipq##a######a###ipprssssssssssf############fprb########a#fllnosssssssssssl####a########opprqqppqpf###emopqrrsssssssss#############ipqe######a##fllnoqsssssssssssf############fpqrqf###a##a##hmmnprsssssssssl####a########opqrh####llnoqrsssssssssssssss#a#######a###ippob########aallnpqssssssssssf############fpqrl#######eimmopqss", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssss################f##a###a##a##fnorsrhb####bhlmnorsssssssssssl#a#####a##a##nnpqsssra###hmoqssssssssssssss###a##a##a##ahnp######a#####ahnpqsssssssssqh###a#####a##fnonf#a##a##ehmlnoprssssssssssl#a#####a##a##nnpqrsssssfa##emnqrsssssssssss###a##a##a##ahnphb##a###ehlmmoprssssssssssqh###a#####a##fnoqrpib#####blmmnoqssssssssssl#a####a###a##nnoo#a##flmnprssssssssssssssss###a##a#####ahnorphaa#####fimmoprssssssssssf##a###a##a##fnprl#a###filmnnpqsss", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssss################ssonllllllllmmnorsrrolhhilmmnoprssssssssssssronlllllllllmlnoqssssqonmlnoqrssssssssssssssonmlllllllmlmnoqonmlllllllmlmnoqssssssssssrqonllllllllmmnorrplhhhillmmnnpqssssssssssssronlllllllllmmnoqsssssssronmnorrssssssssssssonmlllllllmlmnorrpihhhmllmnopqssssssssssssrqonllllllllmmnorrrpolhihmlmmmoprsssssssssssronlllllllllmlnpprpommmnorrsssssssssssssssssonlllllllmllmnpprpolhihlmmmmopqsssssssssssssonllllllllmlnoqolihmllmmnopqssss", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssss################srpnnmmmmmmmmmnpqssrpoonmnnnopqssssssssssssrqpnnmmmmmmmmmnnprssssronnmnorssssssssssssssrpnmmmmmmmmmmmooqpnmmmmmmmmmmnnpqsssssssssssrpnnmmmmmmmmmnpqrponnnmmnnnoqqssssssssssssrqpnnmmmmmmmmmmnprssssssrqpnnnpqssssssssssssrpnmmmmmmmmmmnnpqrponnnmmnnopqssssssssssssssrpnnmmmmmmmmmnpqssrpoonmmmnnopqsssssssssssrqpnnmmmmmmmmmnnorrponmnoprsssssssssssssssssrpnnmmmmmmmmnmoorrqpoonnnnmnopqsssssssssssssrpnnmmmmmmmmnnorrqponmmnnopqsssss", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssss################srqooooooooooopqrrssrqppoooqqrssssssssssssssrqoooooooooooopprssssrroooprrrsssssssssssssrqpooooooooooopqrqpooooooooooopprsssssssssssrqpoooooooooopprrqppooooooqqsssssssssssssssrqoooooooooooopprrssssssrqoopprssssssssssssrqpooooooooooopqrrrpoooooppqrsssssssssssssssrqpoooooooooopqrsssrqpooooppqrsssssssssssssrqooooooooooooprrrqpooopqssssssssssssssssssrqpoooooooooooorrrsrqpooonpopqrsssssssssssssrqpooooooooooprrsrpooooopqrrsssss", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssss################srrrqrppqpqpqqqrsssssrrqqqrrssssssssssssssssrrrqqqpqpqqqpqqrssssssrrrrqrsssssssssssssssrrrprpppqpqpqqqrrrrprppqpqqpqprrssssssssssssrrrprpprpqqqqrrsssrqqpppqrrssssssssssssssssrrrrprppqqqpqqqrssssssssrrrqrrsssssssssssssrrrprpppqpqpqprrrssrrqqqqqrrssssssssssssssssrrqrpprpqqqprqrrssssrrrrqqrrrssssssssssssssrrrqrppqpqqqqqqrssrqqqrrsssssssssssssssssssrrrpqpqpqpqppqrrsssrrrrqqqqqrsssssssssssssssrrrprppppqqqqqrsssrrqqqrrsrssssss", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssss########################################################################################################################################################################################################################################################################################################################################################################################################################################################", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssss########################################################################################################################################################################################################################################################################################################################################################################################################################################################", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssss################ssolhfhfinrsssssssssnhffhnssssssssssssssssssssliffhhlssssssssssssnlllosss##ssssssssssssssssssssssssssssssolossssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssnlssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss####################################################################################################", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssss################oe########forssssrpf###a##eorsssssssssssssssh########bmrssssssshe####lqrs##ss#fssssssssssssssssf###fsssssl#lrrssssssf#fse#fsssssssssssssssse##lssssssssssssssss##lo##lsssssssssssssssssf#ssssssssssssssssssl#lssssssf#qqssssi##fsssssssssssssssssslb##msssssssssssssssrph##fossssssonsssssl#bsl#lssssssssssssssss###bhosssssssssssss####################################################################################################", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssss################o##a#######bpqsssse########bpqsssssssssssssse########a#mqrssoiba#####ipqr##ss#fqpqsssssssssssssh#limpprssl#loprsssssh#bp##fppqsssssssssssss#f#fpprsssssssssssss##hl##loqrssssssssssssssh#ppqsssssssssssssssl#lpqrsssfapoqsssf#faoprsssssssssssssssbblhqpqsssssssssssssse#ihaepqssss#fsrsssl##hl#lpqrsssssssssssss#elh#eprsssssssssss####################################################################################################", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssss################sb##fee#a###hpqssh####ee####hpqsssssssssssssh##effa####eoqrsn####a##ahnpq##ssafnb##ls#fb#lsssssf#ihlnf#epl#f#aorsssrebbie#fml##bol#h#sssssn#h#anfeb#hsfeefsssso#eehe#hnh##fseesebssssssf#o#fsf#s#fb#lssssssl#if#ql#lf#nnpsssbbf#lh#ls#fsl#bbfsssss#bmnnnf#eol#f#eosssrn#hpnh#lne#hf##fpqsrm#eeh#inh#blsbbsebsssss#fnmh#lnb#hssh#bsss####################################################################################################", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssss################shhpmmml##a#foprs#a##hmlh####mpqssssssssssssmhnnmmme####norss###e####hnoq##ss#fnmib#p#epe#pqrssf##ahham#hi#hi#hpqsss#ffeeb#lnmhafl#bfppqssi#le#le#nh#mf#ehrprsl#i#ef#fmmmf#lhap#hpprsssf#n#fpf#q#epe#pqrsssl#ie#ol#lf#nnorso#fhahhblp#fo#ho#fppqssl##blham#hl#hn#hpqssl#lnmhaheboop#fnnoqsl#hafahh#mh#nh#p#hppqss#fnmhaheehamhalnppq####################################################################################################", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssss################ssronnnof###enoqi###blmnnb###hoprssssssssssssrponnni####mnprsfhmn###ahmoq##ss#flaab#n#fnf#noqsrh#nmnf###fhahm#enorss#ffeff#mh#e#fh#innnpssf####hf#niahf#onnoqsl#i#ei#elf#eahm#f#nnopssrh#n#fnf#o#fnf#noqsssl#if#oh#if#nmorrm##a#fh#in#hh#io#fnopsssnh#ff###fh#in#fnoqsn#hmoh#l#eonn#fmmoqsl#ifbahf#ph#ii#f#lnopss#fmnh#l###ahf#oonoq####################################################################################################", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssss################sssqpppnb###hmoqf###emmnpf###enorssssssssssssrpppppf###elnpqsspon####hnop##hl#hhahe#m#fme#mnorsf#nmmh#mlmhahi#hnnpsn#hh#hf#lf#n#ehahmmopss#ehhaee#mf#lf#mmnopsh#lf#m#el#fh#hneabnnnpsllbbn#eme#n#fme#mnornlf#le#lh#hf#mmprrf#lhb#hahl#fl#hl#emnprsllh#fh#mlmhbhi#fnnpssb#hhaenballo#elmoqsl#hl##hh#lh#ln#eannnpss#ehh#fnbemlmh#hmnoq####################################################################################################", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssss################ssrlllhb##ablnorb###hmnpql###anoqsssssssssssssmllie####ilnoqsrqpo##a#hmoq#ab#enlbae#l#fmf#nmprsf#nmnme##lh#f#ennnpsl#ii#ihahh#bbfhahmnoqsn#hombbe#a#fnf#mmnpssf#oe#me#mf#eahmh#hmmoqsh#binh#be#m#emf#nmorna#hnlb#faif#mmorsbbnmf#ie#befmf#b#fmnpsse##hnlb##lh#b#emmnpssoe##hnnhaafph#fnosrlainbahmf#bhnmf#fmmorss###ahpnha#amleabopr####################################################################################################", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssss################sss#######hmmnoq##a#hmoprl#a##mnqsssssssssssssf#####aellmnqsssrrq####hmop##sqommnnmmmmnmnnnmorsspnmorpnmmoonmnnmoqrsrommnnnnnnnmmmnnnopsssrommnne#mmnnmnnmprsssqnmnmnnmmnmmmmf#lmnorssronmnomnnmnnmnonmprrrpomnnnnnnmnnmprsspnmnnmmnmnnmlnhahmnprssronmmnnmmi#hnmnmnqssrpnmnnnnonmoppnmorsrpomnommnnnnnnoommmorssspmmnnmoommmnonmnoq####################################################################################################", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssss################sss#####abhmmops####hmorsl####mnprsssssssssssrh#####aflmnpqssssss####hmoq##sponnoonnmnonnpnopsssponprqpnnnoonnnnoqssqonoononnonnnnnnnoqssssoonpof#mmmnnonnpsssspononnonnpnnnh#lnmnpsssqpnnooonnnnonnonnprrqpnnnoonnnnnnnpsssponopnnonnnnbaafmlnpsssqonnnoonni#immnnpqssrqonnnnooonnooonoqssqonoonnopnnnoppnmopsssrpnmnnnoponnoponnoq####################################################################################################", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssss################sss##a#####ampqs####hmoprl####lnpqssssssssssssf#a######hpprssssss##a#hnop##sqpppqqpooppppqppqsssrpprssqpppqppppprssssqppppppppqpopppprrssssqppqqpommnppqpqqssssrppqppqppqppppqonnoqsssrppppqpppppppqrpqqsssqppprqpppppppqsssqppqqppppppppponnmoprssqppppsqppppnmnopqsssssqpopprqqppqrppqrssrqqqppppppppprqqpprssssqpooppqrppppqqpppq####################################################################################################", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssss################sssronlf####eors###ahmorsl####lmoqsssssssssssssqonhb###ampqssssss####hmoq##ssrrrsrsssssrssssssssssssssssrrssrrrrssssssrrrrrrssrrrrssssssssssrssrrponpqsssssssssssssssssssrrsrqonopsssssssrsssrrrrssrssssssssrrsssrrrssssssssssssssssrrrrrponnnprssssrrrsssrrqqpnoqrssssssrsrssssrsrrrrrssssssssssrssssssssrsssssssssrsssssssrsrsrrss####################################################################################################", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssss################sssrpnmnha###lpqe###fmopsha##elmoqrssssssssssssrpnmlb###hnprsssss#a##hmop##sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssrqpprsssssssssssssssssssssssssqpqrsssssssssssssssssssssssssssssssssssssssssssssssssssssssqppppqrssssssssssssrrqprrssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss####################################################################################################", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssss################sssrqpooo###ahoqfa##emorsf###elnpqsssssssssssssrqpoof###enpqsssss###ahmoq##sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssrrrsssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss####################################################################################################", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssss################ossrrqqqm####hnpl####lopo####hmnprssssssssssossrrrqqb###emoqsssss####hmop###############################################################################################################################################################################################################################################################################################################################################################", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssss################lbhlsrrib###almopb###emof#a#blmoqrssssssssss#florrne###ahmoqsssss#a##hmoq##ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssslnssssssssssssslnssssssssssssssssssssssssssnosssssssssssssssssssssssssssssssssssssssssssssssssss#####cgkkgccccjkcccjkkjccjkkjccccdkjcckkkkgcgkkjcgkkkkkccjkkgccgkkjcccc....cdgcccdggdc##################################################################################################", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssss################fa##########hlmorl##########hmnoqssssssssssl###########elnoqrssss###ahmop##s##lo##lsssssssssssssssssssl####fssssssssssssssssssf#sl#lo#fsssssssss#frqsssssf####l#frqsssssssssssssss####lssss#fsrssssssh##brssssssnosssssssslb##nsssssssssssssssss#####dkkkkdccgkkccgkjjkgdkjjkgcccjkjcdkjjjddkkjkgdjjjkkcjkjkkddkkjkgccc....cjkcccgkjkd##################################################################################################", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssss################b########a#fllnpqrf#a######flmnprssssssssssha#########eilnoqsssss####hmoq##s##hl##ipqrssssssssssssssssole#impprsssssssssssssssm#lhahl#lpprssssss#fopqssssnl#ein#fopqssssssssssssss#elinpqsrnoppqsssrnafilopqsssl#lrrssssssbblhopqsssssssssssssss#####gkddkgcjkkkccgkdckjgjcckjccdkkjcgkgcccgkdcjdcccgkdcjkcgkgjkdcjjcdg....ckjgccgjcjg##################################################################################################", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssss################nfa##a###billnopqsqhb##a#bhmmnoqsssssssssssphb##a##aahlmnoprsssss#a##hmoq##o#ebhe#hnne#eos#fb#lssssssssrf#nme#ql#lsf#eosssssssn#hfffhalnf#eosh#b#fnnpsssssq#fmn#ea#lq#fsf#ssssssss#ehim#fbl#fooqssssl#fnmnh##fs###ipqsssss#bmnnf#ql#lfee#fssssss#####jkcckjcjgjkcccccdkjcccgkjccjjkjcgkkkjcjkdgdccccjjccgkgjkdjkccjkcjk....gjgjccgkjkd##################################################################################################", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssss################srplhhhimlmmnnpqssrqolhhilmmmoprsssssssssssrqpmihhhllmmnnpqssssssqonlmmoq##l#iaef#fmebqbep#epe#pqrssssssf#mmf#ol#lh#n#hpqsssssqafahbf#nh#m#hm#ho#fmnpssssss#emm#emb#oafqf#ppqsssss####n##fm#fnopsssssf##ennmf#il#innprssssl##blf#ol#lf#oh#lpqsss#####jkcckjcccjkcccccjkdccjkjccdkdkjcjkjkkdjkkkkdccdkgccckkkjcgkjgkkcdg....jkkkccgjgdc##################################################################################################", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssss################srponnmmmmnnppqssssrpoonmmnnoprsssssssssssssrqonnnnmmnnoprsssssssronnmnpq##l#i#ei#el#foe#n#fnf#nopssssssf#nmf#ohaif###fnoqsssssef#m#fbnf###fhain#fmnprsssss#fmm#fmf#n#fnf#onpsssss#fnmm#fnn#fnnqrssssrlf#hf#e#hi#hmnpqsssssnh#ff#nhaif#ni#hoprss#####jkcckjcccjkccccgkjcccgjkgckjckjccdcdkjjkjgkjccjkcccjkgjkdckkkkkccc....jdckdcgjccc##################################################################################################", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssss################ssqppoooooppprssssssrpppoopprrsssssssssssssssrrppoooooprrsssssssrrrpooprr##h#lf#m#embbnaen#fmf#mhhrssssrh#nmf#mh#if#mlmmflsssssfbam#bemf#mlmi#hm#emfirsssss#fnn#fme#m#eme#nhhrssss#fmln#fmm#fmelrsssshlf#lafhbhhahlhhqssssllh#ff#mhahf#nhbhifoss#####jkcckjcccjkcccgkkdcccccjkgkjjkkgcccckjjkccjkcckjccckjcckjccgdjkcgj...............##################################################################################################", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssss################sssrqqpqpqqrssssssssssrqqqqrrssssssssssssssssssrqqpqqrrsssssssssssrrprqrr##fane#me#mle#elm#fme#nahpqrssrf#nmnb#h#hme##hl#lqqsssl#fme#hmle##hnh#aefhalqqssss#fmn#fnf#nhaae#mbhpqrss#fmmo#fmm#fi#lprssnb#bhne#e#hne#ibhpqrsse#ahmla#f#if#mhaihaoqq#####gkddkgcccjkccdkkdccgjccjkgkkkkkjjjcdkjgkdcjkcckjccckjcdkjdjdckjcjk...............##################################################################################################", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssss###########################################################################################spnnnmnnmmonmnnnnnnol#mooqsssspnnopnmnnmnnmnhepopqssspnlmommnonnnnonnmnhboooqsssrpmnpommonnnmnnl#mooqsssonnpqonnpohbooossssqonmnnmmmmnnl#mooqsssqonmmmnnnnmnnnonbhoop#####dkkkkdcccjkccjkjjjggkjjkjcccckjcjkjkkddkkjkjcgkgcccjkjkkddkkjkgccc...............##################################################################################################", +"#####ssssssssssssssssssssssssssssssssssssssssssssssssssssss###########################################################################################sqononnonooonnnponnonlnnopssssponpqonnonnonnlnnnoqsssqonnonnoponnoopnnnlmnnpqsssspnoppononnoonnmlnnoqrsspnoprpnopplmonoqsssponnoonnnnoomlnnoqrssqonnooonnnnnnnpohonnp#####cgkkgccccjkcckkkkkjcjkkjccccckjcdjkkgccgkkjdcgkgcccdjkkgccgkkjcccc...............##################################################################################################", +"######################################################################################################################################################sqpppppqpppqppppqppqppooorssssqpprrqppppqqppppooprsssrqppqpppqqpopqqpppopooprssssqpprppprppqppoppooorsssrppqrqppqpppnopssssppoppqppopprppoooqsssrpoppqpppppqppprqpooq########################################################################################################################################################################################", +"######################################################################################################################################################ssrsssssssssrsrsssssrqppqrsssssrsrssrsrrsrsrqqppqssssssssssssssssssssrrrqpppsssssssssssssssssssrqppqrsssssrsssrrssrqppqrssssrrsrsrssrsrrqpppssssssrrsssrrsrsssssrpppq########################################################################################################################################################################################", +"........................................................................##############################################################################sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss########################################################################################################################################################################################", +".....######################################################................cccccggcccccccccddccccccccdggccccccccggggggdccccccccccddccccccccccccddccccccccccggdcccccccggggcdgdcccccccdgdcccccccccccdggcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", +".....######################################################................cccjkkkkdcccccccjjcccccccjkkkkccccccgkkkkkkgcccccccccdkjcccccccjkkkkkjccccccccgkkkkgcccccgkkkkkkkdcccccdjkkkjcccccccccjkkkkdcccccccccccccccccdccccccccccccdjccccccgjjjccccccggdddddcccccccccccjcccccccccccgdccccccdggggccccdgcccccdccccccgjjgccccccccgjjgccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", +".....cccccccccccccccccccccccccccccccccccccccccccccccccccccc................ccjkgcdkjccccccjkjccccccjkgcdkgcccccgkccckkdcccccccccjkjccccccckjggdcccccccccgkjdcjkcccccgkggcdkgccccccjkdcdkgcccccccjkgcdjkdcccccddcccccccjkkkkjccccccdgjkgcccccjkkkkkcccccgkkkkkjccccccccccjkcccccccjjjkkgcccccjkkkkgccccckkkkkkkccccckkkkkkcccccgkkkkkjcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", +".....cccccccccccccccccccccccccccccccccccccccccccccccccccccc................cgkgcccdkdccccjkjjcccccdkdcccjjcccccgkccjkdcccccccccjkjjccccccckgcccccccccccdkjccccccccccdkdccjkdcccccckgccgkdccccccdkgcccgkgccccckkcccccckkkkkkkjccccdjkkkccccdkkkkkkkjccccgkkkkkdcccccccccjkkccccccckkkkkdccccjkkkkkcccccdkkkkkkgccccgkkgjkkgcccckkkkkkkgccddccccccccccdjjgccccccccccdjdcccccccccccgjjdcccccccccdjjgcccccccccccdjjccccccccjjjjjjgcccccccccdjgcccccccccccccccccccccccdjjgccccccccccgjjgcccccccccccccccccccccccccccccccc", +".....cccccccccccccccccccccccccccccccccccccccccccccccccccccc................cjjccccckgccccddjjcccccdjcccckjccccccccjkkkdcccccccgkdjjccccccgkgjkkkgccccccjkcdjkkjcccccccccdkjccccccckgjkkkgccccccgkccccjkjccccckkcccccjkkkkkkkkgccccdkkkcccccgkkdjkkjccccgjgkkjcccccccccjkkkccccccdkkjgjgcccgkkjccgcccccgkjkkkjcccccjkkcgkkgcccgkkjcjkkjcckkcccccccccgkkkkjccccccccgkkgcccccccccdkkkkkdcccccccjkkkkkccccccccccjkkccccccccjkkkkkgccccccccdkkjcccccccckkkkkkkjccccccdkkkkjccccccccjkkkkjccccccccccccccccccccccccccccccc", +".....cccccccccccccccccccccccccccccccccccccccccccccccccccccc................ckgccccckgccccccjjcccccccccdkkdcccccccjkjjkkccccccdkgcjjccccccgkkjggjkdccccdkggkkgjkdccccccccjkdcccccccgkkjgjkjcccccdkgcgjkkjcccccdcccccdkkkjddjkkjccccdkkkccccccdjcjkkjccccdcckkjccccccccjkkkkccccccgkkjgcccccjkkdggdcccccgdcjkkgcccccdkkkkkjccccgkkjdjkkkcckkccccccccdkkdcjkdccccccckkkgcccccccccjkjcdkjcccccccgjdcjkgccccccccgkkkccccccccjjccccccccccccckkjcccccccccjjjjjkkdccccccjkgcjkcccccccgkjcdjkgccdgcccccccccccccccccccccccccc", +".....cccccccccccccccccccccccccccccccccccccccccccccccccccccc................gkdccccdkdccccccjjccccccccgkkdccccccccddccdkgccccdkgccjjgjccccgkgcccckgccccgkdkkdccjjcccccccckjcccccccdkjdcccgkccccccgkkkjdjjcccccccccccgkkkcccdkkkccccckkkccccccccckkkgccccccgkkkjccccccgkjgkkcgccccjkkkkjcccckkkkkkkgccccccdkkkccccccdkkkkkjccccdkkkkkkkkccdcccccccccgkgccdkjcccccccdgkgcccccccccddccdkjcccccccccccjkgcccccccdkkjkccccccccjkkkkjccccccccjkgcccccccccccccckkgcccccccjkdcjkcccccccjkcccdkjccjkgccccccccccccccccccccccccc", +".....cccccccccccccccccccccccccccccccccccccccccccccccccccccc................gkcccccjkcccccccjjcccccccjkjccccccccccccccckgcccckkkkkkkjjccccccccccckgccccgkkkdcccjjcccccccgkdccccccckjcccccjjccccccccgdcdkgcccccjjccccgkkkcccgkkkccccckkkccccccccgkkjccccccccdjkkgccccgkkjjkkkkccccdcgkkkgccckkkkkkkkccccccjkkgcccccckkkkkkkjccccgkkkkkkkccccccccccccjkcccckjccccccccgkgccccccccccccdkkdccccccccdjkkkccccccccjkgjkcccccccckkkjjkgccccccckkkkjdccccccccccjkjccccccccgkkjkjcccccccjkdccdkjccgjdccccccccccccccccccccccccc", +".....cccccccccccccccccccccccccccccccccccccccccccccccccccccc................gkccccdkjcccccccjjccccccgkgcccccccccjjccccgkdccccjjjggjjccccccdgccccgkcccccdkkdcccgkgccccccckjcccccccgkdccccjkdcccccjjccccjkdccccckkccccdkkkjdgkkkjccccckkkdccccccckkkjjgccccggcgkkjcccgkkkkkkkkkccccgccjkkgccckkkgckkkdccccgkkkccccccgkkjcdkkkdccccgddjkkjccjjccccccccjkcccckjccccccccgkgcccccccccccjkkgcccccccccdkkkjcccccccjkjcjkcccccccckkdccjkccccccdkkjjkkcccccccccckkdccccccccdkkkkjcccccccdkkjjkkgcccccccccccccccccccccccccccccc", +".....cccccccccccccccccccccccccccccccccccccccccccccccccccccc................dkgccgkkccccccccjjcccccdkjcccdkcccccjjcccgkjccccccccccjjccccccjkdccgkgccccccjkdccgkjcccccccgkgcccccccdkgccgkkgccccccjkdccgkgccccccjgcccccjkkkkkkkkgccccckkkdccccccjkkkkkdccccjjgkkkgcccjjjjgjkkjjdccckjjkkkgcccjkkjdkkkcccdjkkkjccccccgkkjdgkkkccccckjjkkkdcckkccccccccjkcccckjccccccccgkgcccccccccckkjdccccccccccccdkkdcccccdkkkkkkkdccccccddcccjkccccccgkgccgkgccccccccgkjcccccccccjkgdjkgcccccccdjkkkkdccdgcccccccccccccccccccccccccc", +".....cccccccccccccccccccccccccccccccccccccccccccccccccccccc................cjkjkkjdccccccccjjcccccgkkkkkkkcccccdkjjkkjcccccccccccjjccccccdkkjkkgcccccccckkjkkjccccccccjkcccccccccjkkkkjdcccccccdkkjkkjcccccccccccccccjkkkkkkgcccccckkkgcccccgkkkkkkccccgkkkkkjcccccccccgkkgccccdkkkkkkccccgkkkkkkjccccgkkkgccccccckkkkkkkjccccgkkkkkgcccjgccccccccgkdccgkgccccccccgkgcccccccccgkjcccccccccccddccgkgcccccdjjjjkkjdcccccccccccjkccccccgkgccgkgccccccccjkdccccccccckjccckjccccccccccgkjcccjkdccccccccccccccccccccccccc", +".....cccccccccccccccccccccccccccccccccccccccccccccccccccccc................ccgjgdccccccccccddcccccdgggggggccccccdjjgdccccccccccccddccccccccgjgdccccccccccgjgdcccccccccdgccccccccccgggdccccccccccdgjjdcccccccccccccccccgjjjgcccccccgkkkjcccccjjjjjjkdccdjkkkkjdccccccccdkkkkgcccgkkkkjdcccccjkkkkjcccccccgkdcccccccdjkkkkjcccccjkkkjdccccccccccccccdkjddkkdcccccccdjkjdccccccccjkggggcccccccckkdcjkdccccccccccjkcccccccckjccjkjccccccdkjddjkdcccccccdkjcccccccccckkdcgkjccccccccdjkkdcccgkdccccccccccccccccccccccccc", +".....cccccccccccccccccccccccccccccccccccccccccccccccccccccc................cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccggddgcccccccccccddcccccgggccccccccccggddgdcccdcdgdccccccccdggdcccccccccddcccccccccdggdccccccgccccccccccccccccccccjkkkkjcccccccckkkkkccccccccjkkkkkjcccccccjkkkkjcccccccccccjkccccccccjkkkkkdcccccccjkkkkjccccccccjkgccccccccccjkkkkkdccccccckkkjdcccccccccccccccccccccccccccccccc", +".....cccccccccccccccccccccccccccccccccccccccccccccccccccccc................cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccgjjdcccccccccdgggdccccccccdgggggdccccccccdjjgccccccccccccgjcccccccccgjjgccccccccccgjjdcccccccccgjccccccccccccdjjjdccccccccjjdcccccccccccccccccccccccccccccccccc", +".....cccccccccccccccccccccccccccccccccccccccccccccccccccccc................cccccccccccccccccccccccccccccccccccccccccccdccccccddccccccccgcccccdccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccdcccccccdgcccdjjccccgdddcccccccgcccccccgccccdggcccgcccccccdjjdccccgjgcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", +".....cccccccccccccccccccccccccccccccccccccccccccccccccccccc................ccgkkdccccjgccccjkjccccjkkkgccccccjdcccgjkkjcccccjkkgcccjkkkkcccckkkccccccjkjccccccccccccccccddccccccccccccccccccccccccccccccccccccccccccdjkkgccccgkgccdkkkjcccjkkkdcccccgkccccjkkjcccjkkjcccjkkkjccckkkjcccgkkkgcccccccccccccccccccccccccccccccccccccccccccccccccccccccdjjdccccccccjdccccccccgjdcccccccggdcccccccccjjccccccgjgjgcccccccdjdccccccgggdgdccccccggccccccccgjgcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc...cckjkjcccckgcccgkjkgccckjjkgcccccgkdcccjkjjgccccgkjjjccckkjkjcccjkgkgccccjkjkgcccccccccccccccjgccccgjjjjcccccccccccccccccccccccccccccccccjkkkkdccjkkcccjkkkkcccjkkjccccccjkccccjkkjccdkkkjcccjkkkgccgkjjkccckkkkjccdcccccccccccccccccccccccccccccccccccccccccccccccccccckkkkdccccccjkdcccccccjkkkdcccccjkkkgcccccccdkkcccccckkkkkcccccccjkdcccccjkkkkkjcccccjkkjccccccjkkkgccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccjjcckdccjkgcccjgcgjccckcdjccccccjkccccjgcccccccjjccgccckdcjgcccjgdjgcccckdcjjcccjgcccccccccdjjccccggcgjccccccccccccccccccccccccccccccccgkkkkkjccckkcccgkgkkcccjgkjcccccgkkccccjkgjccjkgdgccckkkkdccgkgjkccdkjgkkcckcccccccccccccccccccccccccccccccccccccccccccccccccccjkggkjcccccgkkdccccccjkggkgcccccjjgkjcccccccjkkcccccckjdgdccccccgkjccccccdjjjkkgccccgkggkdccccdkjckkccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccckgccjgccjkgccckdcgjcccgcjjcccccgjkccccjggjdcccdkccdccccgcckdcccjdckdcccgjccjkccckjcccccccccjjjdcccgjkjcccccccccccccccccccccccccccccccccjkjcjkjccckkccccgckkccccgkjccccckkkcccckkgcccjkggcccdddkjcccdkkkjccdkjgkkdckccccccccccccccccccccccccccccccccccccccccccccccccccckjccjkcccccdjkdccccccdgcckgccccccccjjccccccgkkkcccccckjjjdcccccckjccccccccccdkjcccccjkcckgccccgkccgkdcccccjjccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccckcccjgcccjgcccgccjjccccgkkjccccjgjdcccjkkkkcccgjckkjcccccgkccccjjkkjcccgjcckkcccjgcccccccccjggjcccggcccccccccccccccccccccccccccccccccccjkgcdkkccckkcccccdkjccccjkkdcccjkjkddcdkkkgcckkkkjccccgkgcccckkkjccdkkkkkdccccccccccccccccccccccccccccccccccccccccccccccccccccckgccjkccccccdkdcccccccccjkgccccccgjkjccccccjjjkcccccckkkkkcccccgkjjgccccccccjkccccccgkjjkdccccgkccdkdcccccjkccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccdkcccjgcccjgcccccjkdcccckjgkcccgkcjccccjkcckdccjjjkjkcccccjjccccjkjgkgccdkgjkjcccccccccccccggccjdccggcccccccccccccccccccccccccccccccccccjkgcdkkccckkcccccjkjcccccjkjccdkjjkkdcccjkjcckkkkkdccckkdcccjkkkkgccjkkkkcccccccccccccccccccccccccccccccccccccccccccccccccccccckgccjkccccccgkdccccccccjkjcccccccjkkdcccccgkggkcccccdkjcgkdccccjkkkkgccccccckjccccccckkkjcccccdkjgjkdcccccdgccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccgjccckdcccjgccccgkgcccccdcckdccjgckkgccjgccjgccjjkcckdcccckgcccckgccjgcccjkkgjcccccccccccccgcccddccdgcccccccccccccccccccccccccccccccccccjkkdjkjccckkccccckkjgccdddkjccjkkkkkdcdcckkcckkdjkdccdkkcccckkcjkjcccggkkccjccccccccccccccccccccccccccccccccccccccccccccccccccckgccjkccccccgkdcccccccjkjccccccccdgkjccccckkjkkjcccccjdcdkgccccjkddkjccccccgkgccccccgkjjkgcccccjkkkkccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccgjccdkccccjgcccckjcccccdccckdcdkkkkkgccccccjgccjkgcckdcccdkccccgkccckgccccdcgjcccjgcccccccccccccccccccccccccccccccccccccccccccccccccccccgkkkkkgccckkdcccgkkkgccgjjkjcdjjgjkjgcgjjkjccjkgjkdcdjkjcccckkgjkgccgjjkgcckccccccccccccccccccccccccccccccccccccccccccccccccccckjccjjccccccgkdccccccdkjcccccccccccjkccccckkkkkjccccccccdkgccccjjccjjccccccjkcccccccjkcckjccccccggkjccccccggccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccgjccjjccccjgcccgkcccccdkccdkccdjjgkccccgccckdccgkccdkccccgjccccjjccgkcccjjccjjccckgccccccccccccccccccccccccccccccccccccccccccccccccccccccjkkkjcccckkdcccjkkkgcckkkkdcccccjkdccgkkkjccjkkkkccdjkgccccjkkkkdccjkkkcccgcccccccccccccccccccccccccccccccccccccccccccccccccccjkcckjccccccgkdccccccgkdcdcccccckgcjkccccccccjkcccccdjccjkdccccjkcckjcccccckjcccccccjjcckjcccccccgkgccccccjkccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccgkcckgccccjgcccjjcdjccdkccjjcccccckdccckgcjkcccgkccjjccccjjccccjjcgkjcccgjcdkdcccjgcccccccccccccccccccccccccccccccccccccccccccccccccccccccjjjccccdkkgcccjjjjgcdkkkjcccccdkkjccjkkjcccckkkgccccjgccccdkkkjcccjkjgcccccccccccccccccccccccccccccccccccccccccccccccccccccccgkjkkdcccccgkkkdcccccjkkkkgccccckkjkjccccccccjkcccccdkjjkjcccccgkjjkgcccccgkgcccccccjkjjkgcccccgjkjcccccccgjccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccckjkjcccccjjccckkkkkccckjjkdcccccckdcccjkjkgccccjjkkdcccckgccccgkjkjccccdkjkjccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccggddcccccccdcccggccccccdgdgccddgccccccggccccccdccccccggccccdcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccjkkgccccccgkkjccccccgkjjkgcccccgkkjcccccccccgjccccccjkkkdccccccjkkjccccccgkcccccccccjkkjcccccckkjccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccgkjccccccjgcccjjjjjcccgkkgcccccccjdccccjkgcccccdkkdcccccjdcccccjkjccccccjkjcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccdcccccccccccccccccccddcccccccccggccccccccdccccccccccddcccccccggcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccdggdccccccccccccccccccccccccccccccccccccccccddccccccccccccccccccccccccgcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccjdcccccccccccccccccccccdkkkkjccccccccccccccccccccccccccccccccccccccgkkjcccccccccccccccccccccdkkkdcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccgjjjdccccccccccccjkgcccccccccccccccccccccjkkkkkkccccccccccdkkdcccccccccccccggcccccccgkkkkgcccccccjggjjdcccccccjkjkjcccccccccjjjdccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccdkkkkkdcccccccccdjkkcccccccccdjkkdccccccccgjjcgkkjccccccccckkkgccccccccdjjjkkkccccccckkjdkkccccccdkkkkkgccccccdkjckjcccccccckkkkkgcccddccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccjkkjjkkdcccccccckkkkcccccccccjkkkkccccccccccgjgkkjccccccccdkkkgccccccccgkkkkkjccccccgkkgggjccccccgkkjkkdccccccgkkgkjcccccccgkkjjkkccckkccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccckkkddkkjccccccccjjkkccccccccdkjdkkdcccccccccjkkkkdccccccccjkdkjccccccccgkkggjdccccccjkkkkkgcccccccjdckkcccccccdkkkkgcccccccjkkcgkkdcckkccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccckkkccjkkdccccccccgkkcccccccccgdckkgcccccccccgkjkkkdccccccdkgckjccccccccgkjjjjcccccccjkkjjkkdccccccccgkjcccccccgkkkkkdccccccjkkgjkkgccdcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccckkkdcjkkgccccccccgkkcccccccccccgkkdcccccccdgdccjkkjccccccjkgdkkggccccccjkkkkkjccccccjkkcckkjccccccccjkjccccccdkkdjkkjccccccjkkkkkkdccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccckkkgcjkkjccccccccgkjccccccccccjkkjcccccccckkkgdkkkdccccccjkjkkkkkccccccgkjgjkkdcccccdkkgckkjcccccccdkkgccccccjkjcckkjcccccccjkjjkkcccjjccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccjkkjcjkkjcccccdkjkkkjkdcccccgkkkjcccccccccjkkkkkkgccccccdkkkkkkkkccccccjjgcgkkgccccccjkkjkkjcccccccgkkgccccccjkkkkkkgccccccdgddkkjccckkccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccdkkkjkkkdcccccdkkkkkkkgcccccjkkkjjjdcccccccjkkkjdcccccccdkjggkkgcccccccjkkjkkkgcccccccgkkkkgcccccccjkkgccccccdkkkkjdccccccgkkkkkkdcccjgccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccdkkkkkjcccccccgddggjkdcccccjkkkkkkkcccccccccdccccccccccccccdkkkccccccccjkkkkkccccccccccggdccccccccjkjdcccccccccccccccccccdkkkkjdccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccdgjjgccccccccccccccccccccccccggjkjccccccccccccccccccccccccdjggcccccccccdjjjdcccccccccccccccccccccgdccccccccccccccccccccccdjjdccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccgjgccccccccccccccccccccccccdgccccccccccccccggcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccdcccccccccjdccccccccccccckkkgcccccccgccccccccccccccckkgccccccccccccgkkcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccjkjcccccccgkdcccccdgcccccgkjkkccccccjkdcccccccjjccccjkkjccccjjkjccccjjkdccccdkkdcccjccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccckkkjcccccdkkcccccckkgcccccjcgkgccccckkdccccckkkkcccckjdkcccckkkjcccckgkgccccjkkjccckccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccgkjjkdccccjkkcccccgkkjccccccjkkdccccdkkdccccdkkkjcccckjjgcccckjkgcccckkkdcccckjgkdccjccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccgkgdkgccccgjkcccccjjjkcccccdkkkcccccjjjgccccdkggccccdkkkjccccdckgccccjkkdcccdkgdkdcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccgkgckjcccccjkcccccdcjkccccccjjkjcccckdjgccccdkjkgcccdkjjkdccccgkdcccdkkkjcccdkkjkdcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccgkjckkcccccjkccccccdkjccccdjdckkcccckgkkjcccgkkkjcccckgckgccccjkccccjkckjcccckkkkdccjccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccgkjckkccccdjjdccccdkkgccccgkjjkjcccdkkkkkcccdjcjkcccckkgkjccccjkcccckkdkjccccdgjkccckccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccdkkdkkcccgkkkkgcccjkjcccccdkkkkccccgkkkkgcccgkcjkccccgkkkgcccckkccccjkkkgcccdjgkjcccjccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccjkkkjcccgkkkkgccdkkkkjccccgkjcccccdjckkccccdkkkkcccccgkkdcccckkccccgkjgccccgkkkgccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccdkkkgccccccdjdcccjjkkkccccccccccccccckkdccccgkkjccccccccccccckgccccccccccccdkkjcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccdgdccccccccccccccccjjcccccccccccccccgdccccccdgccccccccccccccdccccccccccccccgdccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", +"ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" +}; diff --git a/wmCalClock-1.25/Src/wmcalclock.patch b/wmCalClock-1.25/Src/wmcalclock.patch new file mode 100644 index 0000000..31db48e --- /dev/null +++ b/wmCalClock-1.25/Src/wmcalclock.patch @@ -0,0 +1,72 @@ +*** fastCalClock.c Thu Jul 1 10:08:07 1999 +--- wmCalClock.c Thu Jul 1 09:38:53 1999 +*************** +*** 272,278 **** + int GotFirstClick2, GotDoubleClick2; + int GotFirstClick3, GotDoubleClick3; + int DblClkDelay; +- int HasExecute = 0; /* controls perf optimization */ + char ExecuteCommand[1024]; + + +--- 272,277 ---- +*************** +*** 451,457 **** + * to catch expose events, etc... + * + */ +! if ( HasExecute == 0 || n>10){ + + n = 0; + +--- 450,456 ---- + * to catch expose events, etc... + * + */ +! if (n>10){ + + n = 0; + +*************** +*** 722,734 **** + * Redraw and wait for next update + */ + RedrawWindow(); +! if( HasExecute == 1) { +! usleep(DELAY); +! } else if( ShowSeconds == 1) { +! usleep( 200000L); +! } else { +! usleep( 500000L); +! } + + + } +--- 721,727 ---- + * Redraw and wait for next update + */ + RedrawWindow(); +! usleep(DELAY); + + + } +*************** +*** 817,823 **** + exit(-1); + } + strcpy(ExecuteCommand, argv[++i]); +- HasExecute = 1; + + } else if (!strcmp(argv[i], "-g")){ + +--- 810,815 ---- +*************** +*** 975,981 **** + char Command[512]; + + +- if( HasExecute == 0) return; /* no command specified. Ignore clicks. */ + DblClkDelay = 0; + if ((xev->button == Button1) && (xev->type == ButtonPress)){ + if (GotFirstClick1) GotDoubleClick1 = 1; +--- 967,972 ---- diff --git a/wmCalClock-1.25/Src/xutils.c b/wmCalClock-1.25/Src/xutils.c new file mode 100644 index 0000000..8759e15 --- /dev/null +++ b/wmCalClock-1.25/Src/xutils.c @@ -0,0 +1,354 @@ +/* + * xutils.c - A collection of X-windows utilties for creating WindowMAker + * DockApps. + * + * This file contains alot of the lower-level X windows routines. Origins with wmppp + * (by Martijn Pieterse (pieterse@xs4all.nl)), but its been hacked up quite a bit + * and passed on from one new DockApp to the next. + * + * + * + * + * 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 (see the file COPYING); if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA + * + * + * + * + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "xutils.h" + + + +/* + * X11 Variables + */ +int x_fd; +XSizeHints mysizehints; +XWMHints mywmhints; +Pixel back_pix, fore_pix; +char *Geometry = ""; +GC NormalGC; +XpmIcon wmgen; +Pixmap pixmask; + + +/* + * Colors for wmCalClock + */ +extern char TimeColor[30]; +extern char BackgroundColor[30]; + + + + + + +/* + * flush_expose + */ +static int flush_expose(Window w) { + + XEvent dummy; + int i=0; + + while (XCheckTypedWindowEvent(display, w, Expose, &dummy)) + i++; + + return i; + +} + + + + + + + + + +/* + * RedrawWindow + * RedrawWindowXY + */ +void RedrawWindow(void) { + + flush_expose(iconwin); + XCopyArea(display, wmgen.pixmap, iconwin, NormalGC, 0,0, wmgen.attributes.width, wmgen.attributes.height, 0, 0); + + flush_expose(win); + XCopyArea(display, wmgen.pixmap, win, NormalGC, 0,0, wmgen.attributes.width, wmgen.attributes.height, 0, 0); + +} + +void RedrawWindowXY(int x, int y) { + + flush_expose(iconwin); + XCopyArea(display, wmgen.pixmap, iconwin, NormalGC, x,y, wmgen.attributes.width, wmgen.attributes.height, 0, 0); + + flush_expose(win); + XCopyArea(display, wmgen.pixmap, win, NormalGC, x,y, wmgen.attributes.width, wmgen.attributes.height, 0, 0); + +} + + + + + + + +/* + * copyXPMArea + * copyXBMArea + */ +void copyXPMArea(int x, int y, int sx, int sy, int dx, int dy) { + XCopyArea(display, wmgen.pixmap, wmgen.pixmap, NormalGC, x, y, sx, sy, dx, dy); +} + +void copyXBMArea(int x, int y, int sx, int sy, int dx, int dy) { + + XCopyArea(display, wmgen.mask, wmgen.pixmap, NormalGC, x, y, sx, sy, dx, dy); +} + + + +/* + * initXwindow + */ +void initXwindow(int argc, char *argv[]){ + + int i; + char *display_name = NULL; + + for (i=1; argv[i]; ++i) { + if (!strcmp(argv[i], "-display")) display_name = argv[i+1]; + } + + + if (!(display = XOpenDisplay(display_name))) { + fprintf(stderr, "%s: can't open display %s\n", + argv[0], XDisplayName(display_name)); + exit(1); + } + + + screen = DefaultScreen(display); + Root = RootWindow(display, screen); + DisplayDepth = DefaultDepth(display, screen); + x_fd = XConnectionNumber(display); + +} + + + + + +/* + * openXwindow + */ +void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bits, + int pixmask_width, int pixmask_height) { + + unsigned int borderwidth = 1; + XClassHint classHint; + char *wname = argv[0]; + XTextProperty name; + XGCValues gcv; + unsigned long gcm; + int dummy=0, red, grn, blu; + XpmColorSymbol cols[10]={ {"Back", NULL, 0}, + {"Color1", NULL, 0}, + {"Color2", NULL, 0}, + {"Color3", NULL, 0}, + {"Color4", NULL, 0}, + {"Color5", NULL, 0}, + {"Color6", NULL, 0}, + {"Color7", NULL, 0}, + {"Color8", NULL, 0}, + {"Color9", NULL, 0}}; + + + + + /* + * Create Pixmap + */ + cols[0].pixel = getColor(BackgroundColor, 1.0000, &red, &grn, &blu); + cols[1].pixel = getBlendedColor(TimeColor, 0.1522, red, grn, blu); + cols[2].pixel = getBlendedColor(TimeColor, 0.2602, red, grn, blu); + cols[3].pixel = getBlendedColor(TimeColor, 0.3761, red, grn, blu); + cols[4].pixel = getBlendedColor(TimeColor, 0.4841, red, grn, blu); + cols[5].pixel = getBlendedColor(TimeColor, 0.5922, red, grn, blu); + cols[6].pixel = getBlendedColor(TimeColor, 0.6980, red, grn, blu); + cols[7].pixel = getBlendedColor(TimeColor, 0.7961, red, grn, blu); + cols[8].pixel = getBlendedColor(TimeColor, 0.8941, red, grn, blu); + cols[9].pixel = getBlendedColor(TimeColor, 1.0000, red, grn, blu); + + wmgen.attributes.numsymbols = 10; + wmgen.attributes.colorsymbols = cols; + wmgen.attributes.exactColors = False; + wmgen.attributes.closeness = 40000; + wmgen.attributes.valuemask = XpmReturnPixels | XpmReturnExtensions | XpmColorSymbols + | XpmExactColors | XpmCloseness | XpmSize; + if (XpmCreatePixmapFromData(display, Root, pixmap_bytes, + &(wmgen.pixmap), &(wmgen.mask), &(wmgen.attributes)) != XpmSuccess){ + fprintf(stderr, "Not enough free colorcells.\n"); + exit(1); + } + + + + + /* + * Create a window + */ + mysizehints.flags = USSize | USPosition; + mysizehints.x = 0; + mysizehints.y = 0; + + back_pix = getColor("white", 1.0, &red, &grn, &blu); + fore_pix = getColor("black", 1.0, &red, &grn, &blu); + + XWMGeometry(display, screen, Geometry, NULL, borderwidth, &mysizehints, + &mysizehints.x, &mysizehints.y,&mysizehints.width,&mysizehints.height, &dummy); + + mysizehints.width = 64; + mysizehints.height = 64; + + + + win = XCreateSimpleWindow(display, Root, mysizehints.x, mysizehints.y, + mysizehints.width, mysizehints.height, borderwidth, fore_pix, back_pix); + + iconwin = XCreateSimpleWindow(display, win, mysizehints.x, mysizehints.y, + mysizehints.width, mysizehints.height, borderwidth, fore_pix, back_pix); + + + + /* + * Activate hints + */ + XSetWMNormalHints(display, win, &mysizehints); + classHint.res_name = wname; + classHint.res_class = wname; + XSetClassHint(display, win, &classHint); + + + + /* + * Set up the xevents that you want the relevent windows to inherit + * Currently, its seems that setting KeyPress events here has no + * effect. I.e. for some you will need to Grab the focus and then return + * it after you are done... + */ + XSelectInput(display, win, ButtonPressMask | ExposureMask | ButtonReleaseMask + | PointerMotionMask | StructureNotifyMask | EnterWindowMask | LeaveWindowMask + | KeyPressMask | KeyReleaseMask); + XSelectInput(display, iconwin, ButtonPressMask | ExposureMask | ButtonReleaseMask + | PointerMotionMask | StructureNotifyMask | EnterWindowMask | LeaveWindowMask + | KeyPressMask | KeyReleaseMask); + + + if (XStringListToTextProperty(&wname, 1, &name) == 0) { + fprintf(stderr, "%s: can't allocate window name\n", wname); + exit(1); + } + + + XSetWMName(display, win, &name); + + /* + * Create Graphics Context (GC) for drawing + */ + gcm = GCForeground | GCBackground | GCGraphicsExposures; + gcv.foreground = fore_pix; + gcv.background = back_pix; + gcv.graphics_exposures = 0; + NormalGC = XCreateGC(display, Root, gcm, &gcv); + + + + pixmask = XCreateBitmapFromData(display, win, pixmask_bits, pixmask_width, pixmask_height); + XShapeCombineMask(display, win, ShapeBounding, 0, 0, pixmask, ShapeSet); + XShapeCombineMask(display, iconwin, ShapeBounding, 0, 0, pixmask, ShapeSet); + + + mywmhints.initial_state = WithdrawnState; + mywmhints.icon_window = iconwin; + mywmhints.icon_x = mysizehints.x; + mywmhints.icon_y = mysizehints.y; + mywmhints.window_group = win; + mywmhints.flags = StateHint | IconWindowHint | IconPositionHint | WindowGroupHint; + + + XSetWMHints(display, win, &mywmhints); + + + XSetCommand(display, win, argv, argc); + XMapWindow(display, win); + +} + +unsigned long getColor(char *ColorName, float fac, int *red, int *grn, int *blu) { + + XColor Color; + XWindowAttributes Attributes; + + XGetWindowAttributes(display, Root, &Attributes); + Color.pixel = 0; + + XParseColor(display, Attributes.colormap, ColorName, &Color); + Color.red = (unsigned short)(fac*(Color.red-24) + 24); + Color.blue = (unsigned short)(fac*(Color.blue-24) + 24); + Color.green = (unsigned short)(fac*(Color.green-24) + 24); + Color.flags = DoRed | DoGreen | DoBlue; + XAllocColor(display, Attributes.colormap, &Color); + + + *red = Color.red; + *grn = Color.green; + *blu = Color.blue; + return Color.pixel; + +} + +unsigned long getBlendedColor(char *ColorName, float fac, int red, int grn, int blu) { + + XColor Color; + XWindowAttributes Attributes; + + XGetWindowAttributes(display, Root, &Attributes); + Color.pixel = 0; + + XParseColor(display, Attributes.colormap, ColorName, &Color); + Color.red = (unsigned short)(fac*(Color.red-red) + red); + Color.blue = (unsigned short)(fac*(Color.blue-grn) + grn); + Color.green = (unsigned short)(fac*(Color.green-blu) + blu); + Color.flags = DoRed | DoGreen | DoBlue; + XAllocColor(display, Attributes.colormap, &Color); + + return Color.pixel; + +} + diff --git a/wmCalClock-1.25/Src/xutils.h b/wmCalClock-1.25/Src/xutils.h new file mode 100644 index 0000000..565a134 --- /dev/null +++ b/wmCalClock-1.25/Src/xutils.h @@ -0,0 +1,48 @@ +#ifndef WMGENERAL_H_INCLUDED +#define WMGENERAL_H_INCLUDED + + + +/* + * Typedefs + */ +typedef struct { + Pixmap pixmap; + Pixmap mask; + XpmAttributes attributes; +} XpmIcon; + + + + +/* + * Global variable + */ +Display *display; +Window Root; +Window iconwin, win; +int screen; +int DisplayDepth; + + + + + +/* + * Function Prototypes + */ +void AddMouseRegion(int, int, int, int, int); +int CheckMouseRegion(int, int); +void openXwindow(int, char **, char **, char *, int, int); +void initXwindow(int, char **); +void RedrawWindow(void); +void RedrawWindowXY(int, int); +void copyXPMArea(int, int, int, int, int, int); +void copyXBMArea(int, int, int, int, int, int); +void setMaskXY(int, int); +unsigned long getColor(char *, float, int *, int *, int *); +unsigned long getBlendedColor(char *, float, int, int, int); +void RedrawWindow(void); + + +#endif diff --git a/wmCalClock-1.25/TODO b/wmCalClock-1.25/TODO new file mode 100644 index 0000000..6adf8db --- /dev/null +++ b/wmCalClock-1.25/TODO @@ -0,0 +1,25 @@ +TODO List +--------- + + - Add in a few more fonts... Graphite would be nice! Or EagleFeather + (its a Frank Lloyd Wright inspired font)? + + - Allow fonts to be added externally via some sort of config file... + + - Add alarm clock mode? + + - graphical Moon-Phase Icon in Calendar section. + + - Day numbers in Calendar section. This is something that I would really like myself! + + - Allow Changing of fonts/colors for the main Calendar section. + + - Foreign language support... + + - Add indicators for Greenwich, sidereal, local sideareal time displays (right now + you dont really know what it is displaying just by looking at it)... + + + + + diff --git a/wmSMPmon-3.1/COPYING b/wmSMPmon-3.1/COPYING new file mode 100644 index 0000000..a43ea21 --- /dev/null +++ b/wmSMPmon-3.1/COPYING @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, 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., 675 Mass Ave, Cambridge, MA 02139, 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. diff --git a/wmSMPmon-3.1/Changelog b/wmSMPmon-3.1/Changelog new file mode 100644 index 0000000..bf1b1e5 --- /dev/null +++ b/wmSMPmon-3.1/Changelog @@ -0,0 +1,26 @@ +3.1 + +- Fixed bug where wmSMPmon would crash if no swap is enabled/present + on the system (thanks to John Schmerge for finding this!) +- Added INSTALL file (thanks to Paul Johnson for reminding me) + + +3.0 + +- Improved processing of command line options - unknown options and + missing parameters are now dealt with +- wmSMPmon now properly supports single CPU machines! On a single CPU + machine, the CPU load bar is drawn wider and only one graph style is + supported. +- man page improved and edited Makefile so man page will get installed as well + + +2.9.2 + +- Separated OS dependent code from rest of program to improve portability + + +2.9.1 + +- Adapted wmSMPmon to kernel 2.6, using code from top and + procps. kernels 2.2, 2.4 and 2.6 are now supported. diff --git a/wmSMPmon-3.1/GREETINGS b/wmSMPmon-3.1/GREETINGS new file mode 100644 index 0000000..356c3d5 --- /dev/null +++ b/wmSMPmon-3.1/GREETINGS @@ -0,0 +1,20 @@ +Un grand merci à Ben Jarvis[ankou] (wmlm) à qui j'ai +"emprunté" une grande partie du code et à +Martijn Pieterse , qui à permis de développer si +facilement tant de DockApps. + +Aussi merci à: + - Phir + - Izar Tarandach + - Alain Schroeder + + +Also, thanks to the authors/contributors of top/procps: + + - James C. Warner + - Michael K. Johnson + - Albert D. Cahalan, + - Fabian Frederick + +Without their code, sysinfo-linux.c would have been a lot more difficult. + Thomas Ribbrock , November 2004 diff --git a/wmSMPmon-3.1/INSTALL b/wmSMPmon-3.1/INSTALL new file mode 100644 index 0000000..3865495 --- /dev/null +++ b/wmSMPmon-3.1/INSTALL @@ -0,0 +1,11 @@ +Installation of wmSMPmon is very simple: + +- cd wmSMPmon +- The default location wmSMPmon gets installed in is /usr/local/bin + (executable) and /usr/local/share/man (man page). If you'd like to + change that, you need to edit "Makefile" - both paths are defined + right at the top. The should be no need to change anything else. +- Run "make" followed by "make install". This will build and install + wmSMPmon. + +That's all! :-) diff --git a/wmSMPmon-3.1/LISEZ-MOI b/wmSMPmon-3.1/LISEZ-MOI new file mode 100644 index 0000000..d1c7cee --- /dev/null +++ b/wmSMPmon-3.1/LISEZ-MOI @@ -0,0 +1,40 @@ +All further changes are documented in the file "Changelog"! + +Thomas Ribbrock , March 2005 + + wmSMPmon 2.2 + + Sert à monitorer les charges CPU d'un système bi-processeurs, ainsi que +la RAM et le SWAP utilisés. + + Nouveauté 1.3 : Prise en compte du taux de rafraichissement à la ligne +de commande. + + Nouveauté 1.4 : Divers bugfixes. Réécriture partielle du système de +lecture des données pour une petite économie de CPU. + + Nouveauté 1.5 : Nouvelles optimisations par PhiR. + + Nouveauté 2.0 : Nouvelle interface, apparition d'un graphique qui peut +avoir trois aspects différents. + + Nouveauté 2.1 : Correction de quelques bugs et mise en place d'un switch +"-smp-fake" qui permet de tester wmSMPmon sur un machine mono-processeur, ainsi +que d'un autre switch "-no-swap" qui permet de désactiver le monitoring du swap. + + Nouveauté 2.2 : Nettoyage permettant la compilation sur plus +d'architectures. + +Pour compiler : + # make + +Pour executer : + # ./wmSMPmon + +Pour installer (en tant que root) : + # make install + + +Par RedSeb , 1999-2000. + +http://goupil.linuxfr.org diff --git a/wmSMPmon-3.1/wmSMPmon/Makefile b/wmSMPmon-3.1/wmSMPmon/Makefile new file mode 100644 index 0000000..338c665 --- /dev/null +++ b/wmSMPmon-3.1/wmSMPmon/Makefile @@ -0,0 +1,33 @@ +#(c)1999-2003 redseb +# Adapted for wmSMPmon 2.9.x and higher: Thomas Ribbrock + +# Change the following two to determine installation location +BINDIR=/usr/local/bin/ +MANDIR=/usr/local/share/man/ + +SRC = general.c sysinfo-linux.c ../wmgeneral/wmgeneral.c wmSMPmon.c +EXE = wmSMPmon +MAN = wmSMPmon.1 +OBJ = $(SRC:.c=.o) +INSTALL = /usr/bin/install +INSTALLEXEFLAGS = -m 755 -s +INSTALLMANFLAGS = -m 644 +CC = gcc +CFLAGS = -Wall -O2 -g +LIB = -L/usr/X11R6/lib -lXpm -lXext -lX11 + +all: $(OBJ) + $(CC) -o $(EXE) $(OBJ) $(LIB) + +$(OBJ): %.o : %.c + $(CC) $(CFLAGS) -c -o $@ $< + +clean: + rm -rf $(EXE) + rm -rf *.o + rm -rf ../wmgeneral/*.o + +install: + $(INSTALL) $(INSTALLEXEFLAGS) $(EXE) $(BINDIR) + $(INSTALL) -d $(MANDIR)/man1 + $(INSTALL) $(INSTALLMANFLAGS) $(MAN) $(MANDIR)/man1 diff --git a/wmSMPmon-3.1/wmSMPmon/general.c b/wmSMPmon-3.1/wmSMPmon/general.c new file mode 100644 index 0000000..d4194bb --- /dev/null +++ b/wmSMPmon-3.1/wmSMPmon/general.c @@ -0,0 +1,78 @@ +/*###################################################################### + # # + # This file contains some general utility functions for wmSMPmon. # + # # + # All of them were taken from the program 'top' from the procps # + # suite. # + # With thanks to the author of top: # + # James C. Warner # + # # + # This file is placed under the conditions of the GNU Library # + # General Public License, version 2, or any later version. # + # See file COPYING for information on distribution conditions. # + # # + ######################################################################*/ + +# include "standards.h" +# include "general.h" + +/* + * The usual program end -- + * called only by functions in this section. */ +void bye_bye (int eno, const char *str) +{ + fflush(stdout); + if (str) { + if (eno) perror(str); + else { + fputs(str, stderr); + eno = 1; + } + } + exit(eno); +} + + /* + * This routine simply formats whatever the caller wants and + * returns a pointer to the resulting 'const char' string... */ +const char *fmtmk (const char *fmts, ...) +{ + static char buf[BIGBUFSIZ]; /* with help stuff, our buffer */ + va_list va; /* requirements exceed 1k */ + + va_start(va, fmts); + vsnprintf(buf, sizeof(buf), fmts, va); + va_end(va); + return (const char *)buf; +} + + + /* + * Standard error handler to normalize the look of all err o/p */ +void std_err (const char *str) +{ + static char buf[SMLBUFSIZ]; + + fflush(stdout); + /* we'll use our own buffer so callers can still use fmtmk() + * and, yes the leading tab is not the standard convention, + * but the standard is wrong -- OUR msg won't get lost in + * screen clutter, like so many others! */ + snprintf(buf, sizeof(buf), "\t%s: %s\n", Myname, str); + + /* not to worry, he'll change our exit code to 1 due to 'buf' */ + bye_bye(0, buf); +} + + /* + * Handle our own memory stuff without the risk of leaving the + * user's terminal in an ugly state should things go sour. */ +void *alloc_c (unsigned numb) +{ + void * p; + + if (!numb) ++numb; + if (!(p = calloc(1, numb))) + std_err("failed memory allocate"); + return p; +} diff --git a/wmSMPmon-3.1/wmSMPmon/general.h b/wmSMPmon-3.1/wmSMPmon/general.h new file mode 100644 index 0000000..49b29b1 --- /dev/null +++ b/wmSMPmon-3.1/wmSMPmon/general.h @@ -0,0 +1,14 @@ +#ifndef WMSMP_GENERAL_H +#define WMSMP_GENERAL_H + +/*###### Definitions for general utility functions #######################*/ + +void bye_bye (int eno, const char *str); + +const char *fmtmk (const char *fmts, ...); + +void std_err (const char *str); + +void *alloc_c (unsigned numb); + +#endif /* WMSMP_GENERAL_H */ diff --git a/wmSMPmon-3.1/wmSMPmon/standards.h b/wmSMPmon-3.1/wmSMPmon/standards.h new file mode 100644 index 0000000..c1609d6 --- /dev/null +++ b/wmSMPmon-3.1/wmSMPmon/standards.h @@ -0,0 +1,56 @@ +/*###################################################################### + # # + # This file contains the definitions of the functions that wmSMPmon # + # uses to determine CPU load, memory and swap information. # + # All functions should be implemented by any OS dependent module # + # that is added to wmSMPmon. See sysinfo-linux.c as an example. # + # # + # (c) 2004 Thomas Ribbrock # + # # + # This file is placed under the conditions of the GNU Library # + # General Public License, version 2, or any later version. # + # See file COPYING for information on distribution conditions. # + # # + ######################################################################*/ + +#ifndef WMSMP_STANDARDS_H +#define WMSMP_STANDARDS_H + +#include +#include +#include +#include +#include + +/*###### Valeurs de test ################################################*/ +#define VRAI 1 +#define FAUX 0 +#define OK 0 +#define ERREUR -1 + +/*###### Buffer Sizes ###################################################*/ +#define SMLBUFSIZ 256 +#define BIGBUFSIZ 2048 + +/*###### Image Size Definitions #########################################*/ +#define TAILLE_T 44 /* Width Graph */ +#define HAUTEUR 31 /* Max. height of CPU Load Bar+Graph */ + +/* Program name used in error messages */ +char *Myname; + +/* NumCPUs_DoInit returns the number of CPUs present in the system and + performs any initialization necessary for the sysinfo-XXX module */ +unsigned int NumCpus_DoInit(void); + +/* Get_CPU_Load returns an array of CPU loads, one for each CPU, scaled + to HAUTEUR. The array is defined and allocated by the main program + and passed to the function as '*load'. The number of CPUs present + is given in 'Cpu_tot' */ +unsigned int *Get_CPU_Load(unsigned int *load, unsigned int Cpu_tot); + +/* return current memory/swap usage on a scale from 0-100 */ +unsigned int Get_Memory(void); +unsigned int Get_Swap(void); + +#endif /* WMSMP_STANDARDS_H */ diff --git a/wmSMPmon-3.1/wmSMPmon/sysinfo-linux.c b/wmSMPmon-3.1/wmSMPmon/sysinfo-linux.c new file mode 100644 index 0000000..854008c --- /dev/null +++ b/wmSMPmon-3.1/wmSMPmon/sysinfo-linux.c @@ -0,0 +1,365 @@ +/*###################################################################### + # # + # This file contains all functions necessary to provide system # + # information on a Linux 2.2-2.6 system. # + # All routines were taken from/based on code from top and/or procps. # + # # + # With thanks to the original authors: # + # - James C. Warner # + # - Michael K. Johnson # + # - Albert D. Cahalan, # + # - Fabian Frederick # + # # + # This file is placed under the conditions of the GNU Library # + # General Public License, version 2, or any later version. # + # See file COPYING for information on distribution conditions. # + # # + ######################################################################*/ + +#include "sysinfo-linux.h" /* include self to verify prototypes */ +#include "general.h" +#include "standards.h" + +#define BAD_OPEN_MESSAGE \ +"Error: /proc must be mounted\n" \ +" To mount /proc at boot you need an /etc/fstab line like:\n" \ +" /proc /proc proc defaults\n" \ +" In the meantime, mount /proc /proc -t proc\n" + +#define MEMINFO_FILE "/proc/meminfo" +static int meminfo_fd = -1; + +static char buf[1024]; + + /* assume no IO-wait stats (default kernel 2.4.x), + overridden if linux 2.5.x or 2.6.x */ +static const char *States_fmts = STATES_line2x4; + + +/* This macro opens filename only if necessary and seeks to 0 so + * that successive calls to the functions are more efficient. + * It also reads the current contents of the file into the global buf. + */ +#define FILE_TO_BUF(filename, fd) do{ \ + static int local_n; \ + if (fd == -1 && (fd = open(filename, O_RDONLY)) == -1) { \ + fprintf(stderr, BAD_OPEN_MESSAGE); \ + fflush(NULL); \ + _exit(102); \ + } \ + lseek(fd, 0L, SEEK_SET); \ + if ((local_n = read(fd, buf, sizeof buf - 1)) < 0) { \ + perror(filename); \ + fflush(NULL); \ + _exit(103); \ + } \ + buf[local_n] = '\0'; \ +}while(0) + +#define LINUX_VERSION(x,y,z) (0x10000*(x) + 0x100*(y) + z) + + +/***********************************************/ +/* get number of CPUs - max. 255 are supported */ +/* also, perform some initialisation */ +/* code taken from top and procps */ +/***********************************************/ +unsigned int NumCpus_DoInit(void) +{ + long smp_num_cpus; + int linux_version_code; + + static struct utsname uts; + int x = 0, y = 0, z = 0; /* cleared in case sscanf() < 3 */ + + if (uname(&uts) == -1) /* failure implies impending death */ + exit(1); + if (sscanf(uts.release, "%d.%d.%d", &x, &y, &z) < 3) + fprintf(stderr, /* *very* unlikely to happen by accident */ + "Non-standard uts for running kernel:\n" + "release %s=%d.%d.%d gives version code %d\n", + uts.release, x, y, z, LINUX_VERSION(x,y,z)); + linux_version_code = LINUX_VERSION(x, y, z); + + if (linux_version_code > LINUX_VERSION(2, 5, 41)) + States_fmts = STATES_line2x5; + if (linux_version_code >= LINUX_VERSION(2, 6, 0)) // grrr... only + // some 2.6.0-testX :-( + States_fmts = STATES_line2x6; + + smp_num_cpus = sysconf(_SC_NPROCESSORS_CONF); // or _SC_NPROCESSORS_ONLN + if (smp_num_cpus < 1) + { + smp_num_cpus = 1; /* SPARC glibc is buggy */ + } + + if (smp_num_cpus > 255) + { + /* we don't support more than 255 CPUs (well, in fact no more + than two ate the moment... */ + smp_num_cpus = 255; + } + + return (int)smp_num_cpus; +} + +/***********************************************************************/ +/* + * Copyright 1999 by Albert Cahalan; all rights reserved. + * This file may be used subject to the terms and conditions of the + * GNU Library General Public License Version 2, or any later version + * at your option, as published by the Free Software Foundation. + * 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 Library General Public License for more details. + */ +typedef struct mem_table_struct { + const char *name; /* memory type name */ + unsigned long *slot; /* slot in return struct */ +} mem_table_struct; + +static int compare_mem_table_structs(const void *a, const void *b){ + return strcmp(((const mem_table_struct*)a)->name,((const mem_table_struct*)b)->name); +} + +/* example data, following junk, with comments added: + * + * MemTotal: 61768 kB old + * MemFree: 1436 kB old + * MemShared: 0 kB old (now always zero; not calculated) + * Buffers: 1312 kB old + * Cached: 20932 kB old + * Active: 12464 kB new + * Inact_dirty: 7772 kB new + * Inact_clean: 2008 kB new + * Inact_target: 0 kB new + * Inact_laundry: 0 kB new, and might be missing too + * HighTotal: 0 kB + * HighFree: 0 kB + * LowTotal: 61768 kB + * LowFree: 1436 kB + * SwapTotal: 122580 kB old + * SwapFree: 60352 kB old + * Inactive: 20420 kB 2.5.41+ + * Dirty: 0 kB 2.5.41+ + * Writeback: 0 kB 2.5.41+ + * Mapped: 9792 kB 2.5.41+ + * Slab: 4564 kB 2.5.41+ + * Committed_AS: 8440 kB 2.5.41+ + * PageTables: 304 kB 2.5.41+ + * ReverseMaps: 5738 2.5.41+ + * SwapCached: 0 kB 2.5.??+ + * HugePages_Total: 220 2.5.??+ + * HugePages_Free: 138 2.5.??+ + * Hugepagesize: 4096 kB 2.5.??+ + */ + +/* obsolete */ +unsigned long kb_main_shared; +/* old but still kicking -- the important stuff */ +unsigned long kb_main_buffers; +unsigned long kb_main_cached; +unsigned long kb_main_free; +unsigned long kb_main_total; +unsigned long kb_swap_free; +unsigned long kb_swap_total; +/* recently introduced */ +unsigned long kb_high_free; +unsigned long kb_high_total; +unsigned long kb_low_free; +unsigned long kb_low_total; +/* 2.4.xx era */ +unsigned long kb_active; +unsigned long kb_inact_laundry; +unsigned long kb_inact_dirty; +unsigned long kb_inact_clean; +unsigned long kb_inact_target; +unsigned long kb_swap_cached; /* late 2.4 only */ +/* derived values */ +unsigned long kb_swap_used; +unsigned long kb_main_used; +/* 2.5.41+ */ +unsigned long kb_writeback; +unsigned long kb_slab; +unsigned long nr_reversemaps; +unsigned long kb_committed_as; +unsigned long kb_dirty; +unsigned long kb_inactive; +unsigned long kb_mapped; +unsigned long kb_pagetables; + +static void meminfo(void){ + char namebuf[16]; /* big enough to hold any row name */ + mem_table_struct findme = { namebuf, NULL}; + mem_table_struct *found; + char *head; + char *tail; + static const mem_table_struct mem_table[] = { + {"Active", &kb_active}, // important + {"Buffers", &kb_main_buffers}, // important + {"Cached", &kb_main_cached}, // important + {"Committed_AS", &kb_committed_as}, + {"Dirty", &kb_dirty}, // kB version of vmstat nr_dirty + {"HighFree", &kb_high_free}, + {"HighTotal", &kb_high_total}, + {"Inact_clean", &kb_inact_clean}, + {"Inact_dirty", &kb_inact_dirty}, + {"Inact_laundry",&kb_inact_laundry}, + {"Inact_target", &kb_inact_target}, + {"Inactive", &kb_inactive}, // important + {"LowFree", &kb_low_free}, + {"LowTotal", &kb_low_total}, + {"Mapped", &kb_mapped}, // kB version of vmstat nr_mapped + {"MemFree", &kb_main_free}, // important + {"MemShared", &kb_main_shared}, // important + {"MemTotal", &kb_main_total}, // important + {"PageTables", &kb_pagetables}, // kB version of vmstat + // nr_page_table_pages + {"ReverseMaps", &nr_reversemaps}, // same as vmstat + // nr_page_table_pages + {"Slab", &kb_slab}, // kB version of vmstat nr_slab + {"SwapCached", &kb_swap_cached}, + {"SwapFree", &kb_swap_free}, // important + {"SwapTotal", &kb_swap_total}, // important + {"Writeback", &kb_writeback}, // kB version of vmstat + // nr_writeback + }; + const int mem_table_count = sizeof(mem_table)/sizeof(mem_table_struct); + + FILE_TO_BUF(MEMINFO_FILE,meminfo_fd); + + kb_inactive = ~0UL; + + head = buf; + for(;;){ + tail = strchr(head, ':'); + if(!tail) break; + *tail = '\0'; + if(strlen(head) >= sizeof(namebuf)){ + head = tail+1; + goto nextline; + } + strcpy(namebuf,head); + found = bsearch(&findme, mem_table, mem_table_count, + sizeof(mem_table_struct), compare_mem_table_structs + ); + head = tail+1; + if(!found) goto nextline; + *(found->slot) = strtoul(head,&tail,10); + nextline: + tail = strchr(head, '\n'); + if(!tail) break; + head = tail+1; + } + if(!kb_low_total){ /* low==main except with large-memory support */ + kb_low_total = kb_main_total; + kb_low_free = kb_main_free; + } + if(kb_inactive==~0UL){ + kb_inactive = kb_inact_dirty + kb_inact_clean + kb_inact_laundry; + } + kb_swap_used = kb_swap_total - kb_swap_free; + kb_main_used = kb_main_total - kb_main_free; +} + + +/*************************************************************************/ +/* + * This guy's modeled on libproc's 'five_cpu_numbers' function except + * we preserve all cpu data in our CPU_t array which is organized + * as follows: + * cpus[0] thru cpus[n] == tics for each separate cpu + * cpus[Cpu_tot] == tics from the 1st /proc/stat line */ +static CPU_t *cpus_refresh (CPU_t *cpus, unsigned int Cpu_tot) +{ + static FILE *fp = NULL; + int i; + // enough for a /proc/stat CPU line (not the intr line) + char buf[SMLBUFSIZ]; + + /* by opening this file once, we'll avoid the hit on minor page faults + (sorry Linux, but you'll have to close it for us) */ + if (!fp) { + if (!(fp = fopen("/proc/stat", "r"))) + std_err(fmtmk("Failed /proc/stat open: %s", strerror(errno))); + /* note: we allocate one more CPU_t than Cpu_tot so that the + last slot can hold tics representing the /proc/stat cpu + summary (the first line read) -- that slot supports our + View_CPUSUM toggle */ + cpus = alloc_c((1 + Cpu_tot) * sizeof(CPU_t)); + } + rewind(fp); + fflush(fp); + + // first value the last slot with the cpu summary line + if (!fgets(buf, sizeof(buf), fp)) std_err("failed /proc/stat read"); + + cpus[Cpu_tot].x = 0; // FIXME: can't tell by kernel version number + cpus[Cpu_tot].y = 0; // FIXME: can't tell by kernel version number + if (4 > sscanf(buf, CPU_FMTS_JUST1, &cpus[Cpu_tot].u, &cpus[Cpu_tot].n, &cpus[Cpu_tot].s, &cpus[Cpu_tot].i, &cpus[Cpu_tot].w, &cpus[Cpu_tot].x, &cpus[Cpu_tot].y)) + std_err("failed /proc/stat read"); + // and just in case we're 2.2.xx compiled without SMP support... + if (1 == Cpu_tot) + { + /* do it "manually", otherwise we overwrite charge and total */ + cpus[0].u = cpus[1].u; + cpus[0].n = cpus[1].n; + cpus[0].s = cpus[1].s; + cpus[0].i = cpus[1].i; + cpus[0].w = cpus[1].w; + cpus[0].x = cpus[1].x; + cpus[0].y = cpus[1].y; + } + + + // now value each separate cpu's tics + for (i = 0; 1 < Cpu_tot && i < Cpu_tot; i++) { + + if (!fgets(buf, sizeof(buf), fp)) std_err("failed /proc/stat read"); + cpus[i].x = 0; // FIXME: can't tell by kernel version number + cpus[i].y = 0; // FIXME: can't tell by kernel version number + if (4 > sscanf(buf, CPU_FMTS_MULTI, &cpus[i].u, &cpus[i].n, &cpus[i].s, &cpus[i].i, &cpus[i].w, &cpus[i].x, &cpus[i].y)) + std_err("failed /proc/stat read"); + } + return cpus; +} + +unsigned int *Get_CPU_Load(unsigned int *load, unsigned int Cpu_tot) +{ + static CPU_t *smpcpu = NULL; + unsigned int j; + register unsigned long charge, total = 0 ; + + smpcpu = cpus_refresh(smpcpu, Cpu_tot); + + for(j = 0 ; j < Cpu_tot ; j ++) + { + charge = smpcpu[j].u+smpcpu[j].s+smpcpu[j].n; + total = charge + smpcpu[j].i; + + /* scale cpu to a maximum of HAUTEUR */ + load[j] = ((HAUTEUR * (charge - smpcpu[j].charge)) / (total - smpcpu[j].total + 0.001)) + 1 ; + smpcpu[j].total = total ; + smpcpu[j].charge = charge ; + } + + return load; +} + +unsigned int Get_Memory(void) +{ + meminfo(); + + return (kb_main_used - kb_main_cached) / (kb_main_total / 100) ; + /* should be between 0 and 100 now */ +} + +unsigned int Get_Swap(void) +{ + /* returns swap usage as value between 0 and 100 OR 999 if no swap + * present */ + meminfo(); + + return ( kb_swap_total == 0 ? 999 : kb_swap_used / (kb_swap_total / 100) ); +} diff --git a/wmSMPmon-3.1/wmSMPmon/sysinfo-linux.h b/wmSMPmon-3.1/wmSMPmon/sysinfo-linux.h new file mode 100644 index 0000000..73850d7 --- /dev/null +++ b/wmSMPmon-3.1/wmSMPmon/sysinfo-linux.h @@ -0,0 +1,33 @@ +#ifndef LINUX_SYSINFO_H +#define LINUX_SYSINFO_H +#include +#include +#include + + + /* These are the possible fscanf formats used in /proc/stat + reads during history processing. + ( 5th number only for Linux 2.5.41 and above ) */ +#define CPU_FMTS_JUST1 "cpu %Lu %Lu %Lu %Lu %Lu %Lu %Lu" +#define CPU_FMTS_MULTI "cpu%*d %Lu %Lu %Lu %Lu %Lu %Lu %Lu" + +/* Summary Lines specially formatted string(s) -- see 'show_special' for syntax details + other cautions. */ +#define STATES_line2x4 "%s\03" \ + " %#5.1f%% \02user,\03 %#5.1f%% \02system,\03 %#5.1f%% \02nice,\03 %#5.1f%% \02idle\03\n" +#define STATES_line2x5 "%s\03" \ + " %#5.1f%% \02user,\03 %#5.1f%% \02system,\03 %#5.1f%% \02nice,\03 %#5.1f%% \02idle,\03 %#5.1f%% \02IO-wait\03\n" +#define STATES_line2x6 "%s\03" \ + " %#4.1f%% \02us,\03 %#4.1f%% \02sy,\03 %#4.1f%% \02ni,\03 %#4.1f%% \02id,\03 %#4.1f%% \02wa,\03 %#4.1f%% \02hi,\03 %#4.1f%% \02si\03\n" + + /* These typedefs attempt to ensure consistent 'ticks' handling */ +typedef unsigned long long TIC_t; + + /* This structure stores a frame's cpu tics used in history + calculations. It exists primarily for SMP support but serves + all environments. */ +typedef struct CPU_t { + TIC_t u, n, s, i, w, x, y; // as represented in /proc/stat + TIC_t charge, total; +} CPU_t; + +#endif /* SYSINFO_H */ diff --git a/wmSMPmon-3.1/wmSMPmon/wmSMPmon.1 b/wmSMPmon-3.1/wmSMPmon/wmSMPmon.1 new file mode 100644 index 0000000..d231128 --- /dev/null +++ b/wmSMPmon-3.1/wmSMPmon/wmSMPmon.1 @@ -0,0 +1,51 @@ +.TH WMSMPMON 1 +.\" NAME should be all caps, SECTION should be 1-8, maybe w/ subsection +.\" other parms are allowed: see man(7), man(1) +.SH NAME +wmSMPmon \- Window Maker System Monitor +.SH SYNOPSIS +.B wmSMPmon +.I "[options]" +.SH "DESCRIPTION" +.B wmSMPmon +is a Window Maker dock application that displays the following +information about the system: +.TP +- Current CPU utilization of up to two CPUs +.TP +- Up to two minutes history of CPU utilization +.TP +- Current memory usage +.TP +- Current swap usage +.PP +On dual CPU systems, +.B wmSMPmon +has three different styles for the utilization graph. To toggle between them +just click into the graph. +.SH OPTIONS +All options start with one dash. +.TP +.B \-h +Show summary of options. +.TP +.B \-r REFRESH_RATE +Set the refresh rate of the graph in microseconds. The default is 250000 +(a quarter of a second). +.TP +.B \-g GRAPH_STYLE +Start using graph style #[1-3] (only on dual CPU systems). Style 1 +shows the utiliziation in one graph, while 2 and 3 are split in two +little graphs. Style 2 shows the two graphs on top of each +other. Style 3 uses a mirror like type. The default style is 1, which +is also the style used on single CPU systems. +.TP +.B \-no-swap +Do not monitor swap. +.SH "SEE ALSO" +wmaker(1x) +.SH AUTHOR +This manual page was originally written by Alain Schroeder + and adapted for wmSMPmon 3 by Thomas Ribbrock + + diff --git a/wmSMPmon-3.1/wmSMPmon/wmSMPmon.c b/wmSMPmon-3.1/wmSMPmon/wmSMPmon.c new file mode 100644 index 0000000..47cdc55 --- /dev/null +++ b/wmSMPmon-3.1/wmSMPmon/wmSMPmon.c @@ -0,0 +1,353 @@ +/*************************************************************************** + wmSMPmon III - Window Maker system monitor +VERSION : 3.1 +DATE : 2005-11-06 +ORIGINAL AUTHORS : redseb and + PhiR +CONTRIBUTORS : Alain Schröder +CURRENT MAINTAINER: Thomas Ribbrock +**************************************************************************** + This file is placed under the conditions of the GNU Library + General Public License, version 2, or any later version. + See file COPYING for information on distribution conditions. +***************************************************************************/ + +#include +#include +#include +#include +#include "../wmgeneral/wmgeneral.h" +#include "wmSMPmon_master.xpm" +#include "wmSMPmon_mask.xbm" +#include "general.h" +#include "standards.h" +#include "sysinfo-linux.h" + +#define VERSION "3.1" + +/*###### Dividers for redraw-loops ######################################*/ +#define DIV1 6 +#define DIV2 10 + +/*###### Messages #######################################################*/ +#define MSG_NO_SWAP "No swap mode : Swap is not monitored.\n" + +/*###### Funcition definitions ##########################################*/ +void usage(int cpus, const char *str); + + +/*###### MAIN PROGRAM ###################################################*/ +int main(int argc, char **argv) +{ + XEvent Event ; + + unsigned int t0[TAILLE_T], /* history for CPU 0 -> Graph */ + t1[TAILLE_T], /* history for CPU 1 -> Graph */ + tm[TAILLE_T], /* history for CPU 0+1 -> Graph */ + c1 = 6, + c2 = 9, + etat = 1, + lecture = 1, + delay = 250000, + delta = 0, + load = 0, + load0o = 0, + load1o = 0, + no_swap = FAUX, + draw_graph = FAUX, + NumCPUs, /* number of CPUs */ + i = 0, /* counter */ + mem = 0, /* current memory/swap scaled to 0-100 */ + prec_mem = 0, /* memory from previous round */ + prec_swap = 0, /* swap from previous round */ + load_width = 3; /* width of load bar: 3 for SMP, 8 for UP */ + + unsigned long load0t=0, load1t=0 ; + + unsigned int *CPU_Load; /* CPU load per CPU array */ + + + /********** Initialisation **********/ + NumCPUs = NumCpus_DoInit(); + CPU_Load = alloc_c((NumCPUs) * sizeof(int)); + + if(NumCPUs == 1) + { + load_width = 8; + } + else + { + load_width = 3; + } + + Myname = strrchr(argv[0], '/'); + if (Myname) ++Myname; else Myname = argv[0]; + + + /* process command line args */ + i = 1; /* skip program name (i=0) */ + while(argc > i) + { + if(!strncmp(argv[i], "-r", 2)) + { + i ++ ; + if(i == argc) + { + /* parameter missing! */ + usage(NumCPUs, "no refresh rate given when using -r!"); + } + else + { + delay = atol(argv[i]) ; + } + i ++ ; + continue; + } + if(!strncmp(argv[i], "-h", 2)) + { + usage(NumCPUs, NULL) ; + } + if(!strncmp(argv[i], "-g", 2) && NumCPUs > 1) + { + /* we only support this on SMP systems */ + i ++ ; + if(i == argc) + { + /* parameter missing! */ + usage(NumCPUs, "no graph style given when using -g!"); + } + else + { + etat = atoi(argv[i]) ; + } + + if(1 > etat || etat > 3) + usage(NumCPUs, "Unknown graph style") ; + i ++ ; + continue; + } + if(!strncmp(argv[i], "-no-swap", 8)) + { + puts(MSG_NO_SWAP) ; + no_swap = VRAI ; + i ++ ; + continue; + } + + /* if we get here, we found an illegal option */ + usage(NumCPUs, "Illegal option!"); + } + + /* open initial window */ + if(NumCPUs == 1) + { + /* we only have a single CPU - change the mask accordingly + NOTE: The for loop was derived from the differences between + wmSMPmon_mask.xbm and wmSMPmon_mask-single.xbm. + wmSMPmon_mask-single.xbm as such is NOT used in this + program! */ + for (i = 33; i <= 289; i = i+8) + { + wmSMPmon_mask_bits[i] = 0xDF; + } + } + + openXwindow(argc,argv,wmSMPmon_master_xpm,wmSMPmon_mask_bits,wmSMPmon_mask_width,wmSMPmon_mask_height) ; + + if(NumCPUs >= 2) + { + /* we have two CPUs -> draw separator between CPU load bars */ + copyXPMArea(12, 4, 2, HAUTEUR + 2, 7, 4) ; + } + + delay = delay / 2 ; + + for(i = 0 ; i < TAILLE_T ; i ++) + t0[i] = 0 ; + for(i = 0 ; i < TAILLE_T ; i ++) + t1[i] = 0 ; + for(i = 0 ; i < TAILLE_T ; i ++) + tm[i] = 0 ; + + /* -no-swap option was given */ + if(no_swap) + copyXPMArea(60, 63, 60, 10, 6, 50) ; + + /* MAIN LOOP */ + while(VRAI) + { + if(lecture) + { + CPU_Load = Get_CPU_Load(CPU_Load, NumCPUs); + + load = CPU_Load[0]; + load0t = load0t + load ; + if(load != load0o) + { + /* redraw only if cpu load changed */ + delta = HAUTEUR - load ; + copyXPMArea(108, 0, load_width, HAUTEUR, 4, 5) ; + copyXPMArea(108, delta + 32, load_width, load, 4, 5 + delta) ; + load0o = load; + } + + if(NumCPUs >= 2) + { + /* we have two CPUs -> do CPU 1 */ + /* FIXME: What about more CPUs? */ + load = CPU_Load[1]; + + if(load != load1o) + { + /* redraw only if cpu load changed */ + delta = HAUTEUR - load ; + copyXPMArea(108, 0, 3, HAUTEUR, 9, 5) ; + copyXPMArea(108, delta + 32, 3, load, 9, 5 + delta) ; + load1o = load; + } + } + + /* we have to set load1t in any case to get the correct + graph below. With only one CPU, 'load' will still be + CPU_Load[0], on a SMP system, it will be CPU_Load[1]. */ + load1t = load1t + load ; + + + if(c1 > DIV1) + { + mem = Get_Memory(); + + if(mem != prec_mem) + { + /* redraw only if mem changed */ + copyXPMArea(30, 63, 30, 8, 29, 39) ; + copyXPMArea(0, 63, (mem * 30 / 100), 8, 29, 39) ; + prec_mem = mem ; + } + + if(!no_swap) + { + mem = Get_Swap(); + + if(mem != prec_swap) + { + /* redraw if there was a change */ + if(mem == 999) + { + /* swap is disabled => show "none" */ + copyXPMArea(60, 63, 60, 10, 6, 50); + } + else + { + /* draw swap usage */ + copyXPMArea(30, 63, 30, 8, 29, 50) ; + copyXPMArea(0, 63, (mem * 30 / 100), 8, 29, 50) ; + } + prec_swap = mem ; + } + } + c1 = 0; + } + + if(c2 > DIV2) + draw_graph = VRAI ; + if(draw_graph) + { + for(i = 1 ; i < TAILLE_T ; i ++) + { + t0[i - 1] = t0[i] ; + t1[i - 1] = t1[i] ; + tm[i - 1] = tm[i] ; + } + if((t0[TAILLE_T - 1] = load0t / c2) > HAUTEUR) + t0[TAILLE_T - 1] = HAUTEUR ; + if((t1[TAILLE_T - 1] = load1t / c2) > HAUTEUR) + t1[TAILLE_T - 1] = HAUTEUR ; + if((tm[TAILLE_T - 1] = (load0t + load1t) / (2 * c2)) > HAUTEUR) + tm[TAILLE_T - 1] = HAUTEUR ; + load0t = 0 ; + load1t = 0 ; + + /* draw graph */ + switch(etat) + { + case 1 : + copyXPMArea(64, 32, TAILLE_T, HAUTEUR, 15, 5) ; + for(i = 0 ; i < TAILLE_T ; i ++) + copyXPMArea(116, 0, 1, tm[i], 15 + i, HAUTEUR + 5 - tm[i]) ; + break ; + case 2 : + copyXPMArea(64, 0, TAILLE_T, HAUTEUR, 15, 5) ; + for(i = 0 ; i < TAILLE_T ; i ++) + copyXPMArea(116, 0, 1, t0[i]/2, 15 + i, HAUTEUR/2 + 5 - t0[i]/2) ; + for(i = 0 ; i < TAILLE_T ; i ++) + copyXPMArea(116, 0, 1, t1[i]/2, 15 + i, HAUTEUR/2 + 21 - t1[i]/2) ; + break ; + case 3 : + copyXPMArea(64, 0, TAILLE_T, HAUTEUR, 15, 5) ; + for(i = 0 ; i < TAILLE_T ; i ++) + copyXPMArea(116, 0, 1, t0[i]/2, 15 + i, HAUTEUR/2 + 5 - t0[i]/2) ; + for(i = 0 ; i < TAILLE_T ; i ++) + copyXPMArea(117, (HAUTEUR - t1[i])/2, 1, t1[i]/2, 15 + i, HAUTEUR/2 + 6) ; + break ; + } + c2 = 0 ; + draw_graph = FAUX ; + } + c1 ++ ; + c2 ++ ; + } + lecture = 1 - lecture ; + RedrawWindow() ; + if(NumCPUs >= 2 && XCheckMaskEvent(display, ButtonPressMask, &Event)) + { + /* changing graph style not supported on single CPU systems */ + if(Event.type == ButtonPress) + { + if((etat ++) >= 3) + etat = 1 ; + draw_graph = VRAI ; + lecture = VRAI ; + } + } + usleep(delay); + } +} + + +/*###### Usage Message ##################################################*/ +void usage(int cpus, const char *str) +{ + fflush(stdout); + + if (str) + { + fprintf(stderr, "\nERROR: %s\n", str); + } + + fputs("\nwmSMPmon "VERSION" - display system load (", stderr); + if(cpus == 1) + { + fputs("uniprocessor system)\n\n", stderr); + } + else + { + fputs("(multiprocessor system)\n\n", stderr); + } + fputs("Options : -h this help screen.\n" + " -r RATE refresh rate (in microseconds, default 250000).\n", stderr); + + if(cpus > 1) + { + fputs(" -g STYLE graph style (try 2 or 3, default is 1).\n", stderr); + } + + fputs(" -no-swap don't monitore swap size.\n\n" + " http://goupilfr.org\n" + " http://gcu-squad.org\n" + " http://www.ribbrock.org\n", + stderr) ; + exit(OK) ; +} + + diff --git a/wmSMPmon-3.1/wmSMPmon/wmSMPmon_mask-single.xbm b/wmSMPmon-3.1/wmSMPmon/wmSMPmon_mask-single.xbm new file mode 100644 index 0000000..dcd3d3d --- /dev/null +++ b/wmSMPmon-3.1/wmSMPmon/wmSMPmon_mask-single.xbm @@ -0,0 +1,46 @@ +#define wmSMPmon_mask_width 64 +#define wmSMPmon_mask_height 63 +static unsigned char wmSMPmon_mask_single_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xdf, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, + 0xf0, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xdf, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, + 0xf0, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xdf, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, + 0xf0, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xdf, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, + 0xf0, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xdf, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, + 0xf0, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xdf, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, + 0xf0, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xdf, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, + 0xf0, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xdf, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, + 0xf0, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xdf, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, + 0xf0, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xdf, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, + 0xf0, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xdf, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, + 0xf0, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0x0f, + 0xf0, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xf3, + 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0x0f, + 0xf0, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xf3, + 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0x0f, + 0xf0, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xf3, + 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0x0f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xf3, + 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0x0f, + 0xf0, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xf3, + 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0x0f, + 0xf0, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xf3, + 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0x0f, + 0xf0, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xf3, + 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }; diff --git a/wmSMPmon-3.1/wmSMPmon/wmSMPmon_mask.xbm b/wmSMPmon-3.1/wmSMPmon/wmSMPmon_mask.xbm new file mode 100644 index 0000000..6f96284 --- /dev/null +++ b/wmSMPmon-3.1/wmSMPmon/wmSMPmon_mask.xbm @@ -0,0 +1,46 @@ +#define wmSMPmon_mask_width 64 +#define wmSMPmon_mask_height 63 +static char wmSMPmon_mask_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xde, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, + 0xf0, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xde, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, + 0xf0, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xde, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, + 0xf0, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xde, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, + 0xf0, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xde, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, + 0xf0, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xde, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, + 0xf0, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xde, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, + 0xf0, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xde, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, + 0xf0, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xde, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, + 0xf0, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xde, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, + 0xf0, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xde, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, + 0xf0, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0x0f, + 0xf0, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xf3, + 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0x0f, + 0xf0, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xf3, + 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0x0f, + 0xf0, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xf3, + 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0x0f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xf3, + 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0x0f, + 0xf0, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xf3, + 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0x0f, + 0xf0, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xf3, + 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0x0f, + 0xf0, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xf3, + 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }; diff --git a/wmSMPmon-3.1/wmSMPmon/wmSMPmon_master.xpm b/wmSMPmon-3.1/wmSMPmon/wmSMPmon_master.xpm new file mode 100644 index 0000000..d47c276 --- /dev/null +++ b/wmSMPmon-3.1/wmSMPmon/wmSMPmon_master.xpm @@ -0,0 +1,143 @@ +/* XPM */ +static char * wmSMPmon_master_xpm[] = { +"118 71 69 1", +" c #00000000FFFF", +". c #202020202020", +"X c #60601B1B0000", +"o c #000049494141", +"O c #2020B6B6AEAE", +"+ c #5F5F1D1D0000", +"@ c #00007D7D7171", +"# c #5D5D1E1E0000", +"$ c #5B5B1F1F0000", +"% c #000000000000", +"& c #595920200000", +"* c #C7C7C7C7C7C7", +"= c #575721210000", +"- c #555522220000", +"; c #535323230000", +": c #515124240000", +"> c #4F4F25250000", +", c #4D4D26260000", +"< c #4C4C27270000", +"1 c #4A4A28280000", +"2 c #484829290000", +"3 c #46462A2A0000", +"4 c #44442B2B0000", +"5 c #42422D2D0000", +"6 c #40402E2E0000", +"7 c #3E3E2F2F0000", +"8 c #3C3C30300000", +"9 c #3B3B31310000", +"0 c #393932320000", +"q c #373733330000", +"w c #353534340000", +"e c #333335350000", +"r c #313136360000", +"t c #2F2F37370000", +"y c #2D2D38380000", +"u c #2B2B39390000", +"i c #29293A3A0000", +"p c #C7C72F2F0000", +"a c #C2C234340000", +"s c #BDBD39390000", +"d c #B8B83E3E0000", +"f c #B3B342420000", +"g c #AFAF47470000", +"h c #AAAA4C4C0000", +"j c #27273B3B0000", +"k c #A5A551510000", +"l c #A0A055550000", +"z c #9C9C5A5A0000", +"x c #97975F5F0000", +"c c #929264640000", +"v c #8D8D68680000", +"b c #89896D6D0000", +"n c #848472720000", +"m c #7F7F77770000", +"M c #7A7A7B7B0000", +"N c #757580800000", +"B c #717185850000", +"V c #6C6C89890000", +"C c #67678E8E0000", +"Z c #626293930000", +"A c #5E5E98980000", +"S c #59599C9C0000", +"D c #5454A1A10000", +"F c #4F4FA6A60000", +"G c #4B4BABAB0000", +"H c #4646AFAF0000", +"J c #4141B4B40000", +"K c #3737BEBE0000", +"L c #3C3CB9B90000", +" ............................................XXXXXXXXoO", +" ............................................++++++++@O", +" ............................................########OO", +" ............................................$$$$$$$$OO", +" %%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ............................................&&&&&&&&OO", +" XXXXXXXX* %............................................* ............................................========OO", +" ++++++++* %............................................* ............................................--------OO", +" ########* %............................................* ............................................;;;;;;;;OO", +" $$$$$$$$* %............................................* ............................................::::::::OO", +" &&&&&&&&* %............................................* ............................................>>>>>>>>OO", +" ========* %............................................* ............................................,,,,,,,,OO", +" --------* %............................................* ............................................<<<<<<<>>>>>>>* %............................................* ............................................33333333Oo", +" ,,,,,,,,* %............................................* @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@44444444O ", +" <<<<<<<<* %............................................* ............................................55555555O ", +" 11111111* %............................................* ............................................66666666O ", +" 22222222* %............................................* ............................................77777777O ", +" 33333333* %............................................* ............................................88888888O ", +" 44444444* %............................................* ............................................99999999O ", +" 55555555* %............................................* ............................................00000000O ", +" 66666666* %............................................* ............................................qqqqqqqqO ", +" 77777777* %............................................* ............................................wwwwwwwwO ", +" 88888888* %............................................* ............................................eeeeeeeeO ", +" 99999999* %............................................* ............................................rrrrrrrrO ", +" 00000000* %............................................* ............................................ttttttttO ", +" qqqqqqqq* %............................................* ............................................yyyyyyyyO ", +" wwwwwwww* %............................................* ............................................uuuuuuuuO ", +" eeeeeeee* %............................................* ............................................iiiiiiiiO ", +" rrrrrrrr* %............................................* ............................................iiiiiiiiO ", +" tttttttt* %............................................* ", +" yyyyyyyy* %............................................* ............................................pppppppp ", +" uuuuuuuu* %............................................* ............................................aaaaaaaa ", +" uuuuuuuu* %............................................* ............................................ssssssss ", +" iiiiiiii* %............................................* ............................................dddddddd ", +" ********* ********************************************** ............................................ffffffff ", +" ............................................gggggggg ", +" %%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ............................................hhhhhhhh ", +" %.OoooO.@OOO@.OoooO..* %jiuytrewq0987654321<,>:;-=&$#+* ............................................kkkkkkkk ", +" %.OO.OO.O...o.OO.OO..* %jiuytrewq0987654321<,>:;-=&$#+* ............................................llllllll ", +" %.O.O.O.O...o.O.O.O..* %jiuytrewq0987654321<,>:;-=&$#+* ............................................zzzzzzzz ", +" %.@ooo@.@OOO@.@ooo@..* %jiuytrewq0987654321<,>:;-=&$#+* ............................................xxxxxxxx ", +" %.O...O.O...o.O...O..* %jiuytrewq0987654321<,>:;-=&$#+* ............................................cccccccc ", +" %.O...O.O...o.O...O..* %jiuytrewq0987654321<,>:;-=&$#+* ............................................vvvvvvvv ", +" %.@ooo@.@OOO@.@ooo@..* %jiuytrewq0987654321<,>:;-=&$#+* ............................................bbbbbbbb ", +" %....................* %jiuytrewq0987654321<,>:;-=&$#+* ............................................nnnnnnnn ", +" ********************** ******************************** ............................................mmmmmmmm ", +" ............................................MMMMMMMM ", +" %%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ............................................NNNNNNNN ", +" %.@OOO@.@ooo@.@OOO@..* %jiuytrewq0987654321<,>:;-=&$#+* ............................................BBBBBBBB ", +" %.O...o.O...O.O...O..* %jiuytrewq0987654321<,>:;-=&$#+* ............................................VVVVVVVV ", +" %.O...o.O...O.O...O..* %jiuytrewq0987654321<,>:;-=&$#+* ............................................CCCCCCCC ", +" %.@OOO@.@ooo@.@OOO@..* %jiuytrewq0987654321<,>:;-=&$#+* ............................................ZZZZZZZZ ", +" %.o...O.O.O.O.O...o..* %jiuytrewq0987654321<,>:;-=&$#+* ............................................AAAAAAAA ", +" %.o...O.OO.OO.O...o..* %jiuytrewq0987654321<,>:;-=&$#+* ............................................SSSSSSSS ", +" %.@OOO@.OoooO.@ooo...* %jiuytrewq0987654321<,>:;-=&$#+* ............................................DDDDDDDD ", +" %....................* %jiuytrewq0987654321<,>:;-=&$#+* ............................................FFFFFFFF ", +" ********************** ******************************** ............................................GGGGGGGG ", +" ............................................HHHHHHHH ", +" ............................................JJJJJJJJ ", +" ............................................KKKKKKKK ", +" ............................................KKKKKKKK ", +"KLJHGFDSAZCVBNMmnbvcxzlkhgfdsajiuytrewq0987654321<,>:;-=&$#+@OOO@.@ooo@.@OOO@..* %jiuOooo@q@OOO@5Oooo@,@OOOO&$#+* ", +"KLJHGFDSAZCVBNMmnbvcxzlkhgfdsajiuytrewq0987654321<,>:;-=&$#+O...o.O...O.O...O..* %jiuOOreOqO987O5OO21O,O:;-o&$#+* ", +"KLJHGFDSAZCVBNMmnbvcxzlkhgfdsajiuytrewq0987654321<,>:;-=&$#+O...o.O...O.O...O..* %jiuOtOeOqO987O5O3O1O,O:;-o&$#+* ", +"KLJHGFDSAZCVBNMmnbvcxzlkhgfdsajiuytrewq0987654321<,>:;-=&$#+@OOO@.@ooo@.@OOO@..* %jiuOooOOqOoooO5OooOO,OOOOo&$#+* ", +"KLJHGFDSAZCVBNMmnbvcxzlkhgfdsajiuytrewq0987654321<,>:;-=&$#+o...O.O.O.O.O...o..* %jiuOtreOqO987O5O321O,O:;-o&$#+* ", +"KLJHGFDSAZCVBNMmnbvcxzlkhgfdsajiuytrewq0987654321<,>:;-=&$#+o...O.OO.OO.O...o..* %jiuOtreOqO987O5O321O,O:;-o&$#+* ", +"KLJHGFDSAZCVBNMmnbvcxzlkhgfdsajiuytrewq0987654321<,>:;-=&$#+@OOO@.OoooO.@ooo...* %jiu@oooOq@OOO@5@oooO,@OOOO&$#+* ", +"KLJHGFDSAZCVBNMmnbvcxzlkhgfdsajiuytrewq0987654321<,>:;-=&$#+...................* %jiuytrewq0987654321<,>:;-=&$#+* "}; diff --git a/wmSMPmon-3.1/wmgeneral/wmgeneral.c b/wmSMPmon-3.1/wmgeneral/wmgeneral.c new file mode 100644 index 0000000..a49d686 --- /dev/null +++ b/wmSMPmon-3.1/wmgeneral/wmgeneral.c @@ -0,0 +1,493 @@ +/* + Best viewed with vim5, using ts=4 + + wmgeneral was taken from wmppp. + + It has a lot of routines which most of the wm* programs use. + + ------------------------------------------------------------ + + Author: Martijn Pieterse (pieterse@xs4all.nl) + + --- + CHANGES: + --- + 14/09/1998 (Dave Clark, clarkd@skyia.com) + * Updated createXBMfromXPM routine + * Now supports >256 colors + 11/09/1998 (Martijn Pieterse, pieterse@xs4all.nl) + * Removed a bug from parse_rcfile. You could + not use "start" in a command if a label was + also start. + * Changed the needed geometry string. + We don't use window size, and don't support + negative positions. + 03/09/1998 (Martijn Pieterse, pieterse@xs4all.nl) + * Added parse_rcfile2 + 02/09/1998 (Martijn Pieterse, pieterse@xs4all.nl) + * Added -geometry support (untested) + 28/08/1998 (Martijn Pieterse, pieterse@xs4all.nl) + * Added createXBMfromXPM routine + * Saves a lot of work with changing xpm's. + 02/05/1998 (Martijn Pieterse, pieterse@xs4all.nl) + * changed the read_rc_file to parse_rcfile, as suggested by Marcelo E. Magallon + * debugged the parse_rc file. + 30/04/1998 (Martijn Pieterse, pieterse@xs4all.nl) + * Ripped similar code from all the wm* programs, + and put them in a single file. + +*/ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "wmgeneral.h" + + /*****************/ + /* X11 Variables */ +/*****************/ + +Window Root; +int screen; +int x_fd; +int d_depth; +XSizeHints mysizehints; +XWMHints mywmhints; +Pixel back_pix, fore_pix; +char *Geometry = ""; +Window iconwin, win; +GC NormalGC; +XpmIcon wmgen; +Pixmap pixmask; + + /*****************/ + /* Mouse Regions */ +/*****************/ + +typedef struct { + int enable; + int top; + int bottom; + int left; + int right; +} MOUSE_REGION; + +MOUSE_REGION mouse_region[MAX_MOUSE_REGION]; + + /***********************/ + /* Function Prototypes */ +/***********************/ + +static void GetXPM(XpmIcon *, char **); +static Pixel GetColor(char *); +void RedrawWindow(void); +void AddMouseRegion(int, int, int, int, int); +int CheckMouseRegion(int, int); + +/*****************************************************************************\ +|* parse_rcfile *| +\*****************************************************************************/ + +void parse_rcfile(const char *filename, rckeys *keys) { + + char *p,*q; + char temp[128]; + char *tokens = " :\t\n"; + FILE *fp; + int i,key; + + fp = fopen(filename, "r"); + if (fp) { + while (fgets(temp, 128, fp)) { + key = 0; + q = strdup(temp); + q = strtok(q, tokens); + while (key >= 0 && keys[key].label) { + if ((!strcmp(q, keys[key].label))) { + p = strstr(temp, keys[key].label); + p += strlen(keys[key].label); + p += strspn(p, tokens); + if ((i = strcspn(p, "#\n"))) p[i] = 0; + free(*keys[key].var); + *keys[key].var = strdup(p); + key = -1; + } else key++; + } + free(q); + } + fclose(fp); + } +} + +/***************************************************************************\ +|* parse_rcfile2 *| +\***************************************************************************/ + +void parse_rcfile2(const char *filename, rckeys2 *keys) { + + char *p; + char temp[128]; + char *tokens = " :\t\n"; + FILE *fp; + int i,key; + char *family = NULL; + + fp = fopen(filename, "r"); + if (fp) { + while (fgets(temp, 128, fp)) { + key = 0; + while (key >= 0 && keys[key].label) { + if ((p = strstr(temp, keys[key].label))) { + p += strlen(keys[key].label); + p += strspn(p, tokens); + if ((i = strcspn(p, "#\n"))) p[i] = 0; + free(*keys[key].var); + *keys[key].var = strdup(p); + key = -1; + } else key++; + } + } + fclose(fp); + } + free(family); +} + + +/***************************************************************************\ +|* GetXPM *| +\***************************************************************************/ + +static void GetXPM(XpmIcon *wmgen, char *pixmap_bytes[]) { + + XWindowAttributes attributes; + int err; + + /* For the colormap */ + XGetWindowAttributes(display, Root, &attributes); + + wmgen->attributes.valuemask |= (XpmReturnPixels | XpmReturnExtensions); + + err = XpmCreatePixmapFromData(display, Root, pixmap_bytes, &(wmgen->pixmap), + &(wmgen->mask), &(wmgen->attributes)); + + if (err != XpmSuccess) { + fprintf(stderr, "Not enough free colorcells.\n"); + exit(1); + } +} + +/***************************************************************************\ +|* GetColor *| +\***************************************************************************/ + +static Pixel GetColor(char *name) { + + XColor color; + XWindowAttributes attributes; + + XGetWindowAttributes(display, Root, &attributes); + + color.pixel = 0; + if (!XParseColor(display, attributes.colormap, name, &color)) { + fprintf(stderr, "wm.app: can't parse %s.\n", name); + } else if (!XAllocColor(display, attributes.colormap, &color)) { + fprintf(stderr, "wm.app: can't allocate %s.\n", name); + } + return color.pixel; +} + +/***************************************************************************\ +|* flush_expose *| +\***************************************************************************/ + +static int flush_expose(Window w) { + + XEvent dummy; + int i=0; + + while (XCheckTypedWindowEvent(display, w, Expose, &dummy)) + i++; + + return i; +} + +/***************************************************************************\ +|* RedrawWindow *| +\***************************************************************************/ + +void RedrawWindow(void) { + + flush_expose(iconwin); + XCopyArea(display, wmgen.pixmap, iconwin, NormalGC, + 0,0, wmgen.attributes.width, wmgen.attributes.height, 0,0); + flush_expose(win); + XCopyArea(display, wmgen.pixmap, win, NormalGC, + 0,0, wmgen.attributes.width, wmgen.attributes.height, 0,0); +} + +/***************************************************************************\ +|* RedrawWindowXY *| +\***************************************************************************/ + +void RedrawWindowXY(int x, int y) { + + flush_expose(iconwin); + XCopyArea(display, wmgen.pixmap, iconwin, NormalGC, + x,y, wmgen.attributes.width, wmgen.attributes.height, 0,0); + flush_expose(win); + XCopyArea(display, wmgen.pixmap, win, NormalGC, + x,y, wmgen.attributes.width, wmgen.attributes.height, 0,0); +} + +/***************************************************************************\ +|* AddMouseRegion *| +\***************************************************************************/ + +void AddMouseRegion(int index, int left, int top, int right, int bottom) { + + if (index < MAX_MOUSE_REGION) { + mouse_region[index].enable = 1; + mouse_region[index].top = top; + mouse_region[index].left = left; + mouse_region[index].bottom = bottom; + mouse_region[index].right = right; + } +} + +/***************************************************************************\ +|* CheckMouseRegion *| +\***************************************************************************/ + +int CheckMouseRegion(int x, int y) { + + int i; + int found; + + found = 0; + + for (i=0; i= mouse_region[i].left && + y <= mouse_region[i].bottom && + y >= mouse_region[i].top) + found = 1; + } + if (!found) return -1; + return (i-1); +} + +/***************************************************************************\ +|* createXBMfromXPM *| +\***************************************************************************/ +void createXBMfromXPM(char *xbm, char **xpm, int sx, int sy) { + + int i,j,k; + int width, height, numcol, depth; + int zero=0; + unsigned char bwrite; + int bcount; + int curpixel; + + sscanf(*xpm, "%d %d %d %d", &width, &height, &numcol, &depth); + + + for (k=0; k!=depth; k++) + { + zero <<=8; + zero |= xpm[1][k]; + } + + for (i=numcol+1; i < numcol+sy+1; i++) { + bcount = 0; + bwrite = 0; + for (j=0; j>= 1; + + curpixel=0; + for (k=0; k!=depth; k++) + { + curpixel <<=8; + curpixel |= xpm[i][j+k]; + } + + if ( curpixel != zero ) { + bwrite += 128; + } + bcount++; + if (bcount == 8) { + *xbm = bwrite; + xbm++; + bcount = 0; + bwrite = 0; + } + } + } +} + +/***************************************************************************\ +|* copyXPMArea *| +|* *| +|* copies pixel area from master XPM to application window *| +|* *| +|* x,y: first corner of area to be copied from master XPM *| +|* sx,sy: second corner of area to be copied from master XPM *| +|* dx,dy: first corner of target area *| +\***************************************************************************/ + +void copyXPMArea(int x, int y, int sx, int sy, int dx, int dy) { + + XCopyArea(display, wmgen.pixmap, wmgen.pixmap, NormalGC, x, y, sx, sy, dx, dy); + +} + +/***************************************************************************\ +|* copyXBMArea *| +|* *| +|* copies pixel area from XBM to master XPM?!?!? *| +|* *| +|* x,y: first corner of area to be copied from XBM *| +|* sx,sy: width and height of area to be copied from XBM *| +|* dx,dy: first corner of target area *| +\***************************************************************************/ + +void copyXBMArea(int x, int y, int sx, int sy, int dx, int dy) { + + XCopyArea(display, wmgen.mask, wmgen.pixmap, NormalGC, x, y, sx, sy, dx, dy); +} + + +/***************************************************************************\ +|* setMaskXY *| +\***************************************************************************/ + +void setMaskXY(int x, int y) { + + XShapeCombineMask(display, win, ShapeBounding, x, y, pixmask, ShapeSet); + XShapeCombineMask(display, iconwin, ShapeBounding, x, y, pixmask, ShapeSet); +} + +/***************************************************************************\ +|* openXwindow *| +\***************************************************************************/ +void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bits, int pixmask_width, int pixmask_height) { + + unsigned int borderwidth = 1; + XClassHint classHint; + char *display_name = NULL; + char *wname = argv[0]; + XTextProperty name; + + XGCValues gcv; + unsigned long gcm; + + char *geometry = NULL; + + int dummy=0; + int i, wx, wy; + + for (i=1; argv[i]; i++) { + if (!strcmp(argv[i], "-display")) { + display_name = argv[i+1]; + i++; + } + if (!strcmp(argv[i], "-geometry")) { + geometry = argv[i+1]; + i++; + } + } + + if (!(display = XOpenDisplay(display_name))) { + fprintf(stderr, "%s: can't open display %s\n", + wname, XDisplayName(display_name)); + exit(1); + } + screen = DefaultScreen(display); + Root = RootWindow(display, screen); + d_depth = DefaultDepth(display, screen); + x_fd = XConnectionNumber(display); + + /* Convert XPM to XImage */ + GetXPM(&wmgen, pixmap_bytes); + + /* Create a window to hold the stuff */ + mysizehints.flags = USSize | USPosition; + mysizehints.x = 0; + mysizehints.y = 0; + + back_pix = GetColor("white"); + fore_pix = GetColor("black"); + + XWMGeometry(display, screen, Geometry, NULL, borderwidth, &mysizehints, + &mysizehints.x, &mysizehints.y,&mysizehints.width,&mysizehints.height, &dummy); + + mysizehints.width = 64; + mysizehints.height = 64; + + win = XCreateSimpleWindow(display, Root, mysizehints.x, mysizehints.y, + mysizehints.width, mysizehints.height, borderwidth, fore_pix, back_pix); + + iconwin = XCreateSimpleWindow(display, win, mysizehints.x, mysizehints.y, + mysizehints.width, mysizehints.height, borderwidth, fore_pix, back_pix); + + /* Activate hints */ + XSetWMNormalHints(display, win, &mysizehints); + classHint.res_name = wname; + classHint.res_class = wname; + XSetClassHint(display, win, &classHint); + + XSelectInput(display, win, ButtonPressMask | ExposureMask | ButtonReleaseMask | PointerMotionMask | StructureNotifyMask); + XSelectInput(display, iconwin, ButtonPressMask | ExposureMask | ButtonReleaseMask | PointerMotionMask | StructureNotifyMask); + + if (XStringListToTextProperty(&wname, 1, &name) == 0) { + fprintf(stderr, "%s: can't allocate window name\n", wname); + exit(1); + } + + XSetWMName(display, win, &name); + + /* Create GC for drawing */ + + gcm = GCForeground | GCBackground | GCGraphicsExposures; + gcv.foreground = fore_pix; + gcv.background = back_pix; + gcv.graphics_exposures = 0; + NormalGC = XCreateGC(display, Root, gcm, &gcv); + + /* ONLYSHAPE ON */ + + pixmask = XCreateBitmapFromData(display, win, pixmask_bits, pixmask_width, pixmask_height); + + XShapeCombineMask(display, win, ShapeBounding, 0, 0, pixmask, ShapeSet); + XShapeCombineMask(display, iconwin, ShapeBounding, 0, 0, pixmask, ShapeSet); + + /* ONLYSHAPE OFF */ + + mywmhints.initial_state = WithdrawnState; + mywmhints.icon_window = iconwin; + mywmhints.icon_x = mysizehints.x; + mywmhints.icon_y = mysizehints.y; + mywmhints.window_group = win; + mywmhints.flags = StateHint | IconWindowHint | IconPositionHint | WindowGroupHint; + + XSetWMHints(display, win, &mywmhints); + + XSetCommand(display, win, argv, argc); + XMapWindow(display, win); + + if (geometry) { + if (sscanf(geometry, "+%d+%d", &wx, &wy) != 2) { + fprintf(stderr, "Bad geometry string.\n"); + exit(1); + } + XMoveWindow(display, win, wx, wy); + } +} diff --git a/wmSMPmon-3.1/wmgeneral/wmgeneral.h b/wmSMPmon-3.1/wmgeneral/wmgeneral.h new file mode 100644 index 0000000..e9d6ca6 --- /dev/null +++ b/wmSMPmon-3.1/wmgeneral/wmgeneral.h @@ -0,0 +1,59 @@ +#ifndef WMGENERAL_H_INCLUDED +#define WMGENERAL_H_INCLUDED + + /***********/ + /* Defines */ +/***********/ + +#define MAX_MOUSE_REGION (16) + + /************/ + /* Typedefs */ +/************/ + +typedef struct _rckeys rckeys; + +struct _rckeys { + const char *label; + char **var; +}; + +typedef struct _rckeys2 rckeys2; + +struct _rckeys2 { + const char *family; + const char *label; + char **var; +}; + +typedef struct { + Pixmap pixmap; + Pixmap mask; + XpmAttributes attributes; +} XpmIcon; + + /*******************/ + /* Global variable */ +/*******************/ + +Display *display; + + /***********************/ + /* Function Prototypes */ +/***********************/ + +void AddMouseRegion(int index, int left, int top, int right, int bottom); +int CheckMouseRegion(int x, int y); + +void openXwindow(int argc, char *argv[], char **, char *, int, int); +void RedrawWindow(void); +void RedrawWindowXY(int x, int y); + +void createXBMfromXPM(char *, char **, int, int); +void copyXPMArea(int, int, int, int, int, int); +void copyXBMArea(int, int, int, int, int, int); +void setMaskXY(int, int); + +void parse_rcfile(const char *, rckeys *); + +#endif diff --git a/wmWeather-1.31/BUGS b/wmWeather-1.31/BUGS new file mode 100644 index 0000000..3afa0d5 --- /dev/null +++ b/wmWeather-1.31/BUGS @@ -0,0 +1,9 @@ +Please send bug reports to mghenderson@lanl.gov + +Ones I know about; + + The wind speed is decoded only when it is listed in units of KT or MPS for the time being. + + The Station code needs to be 4 characters. This is a bug because some stations have + numbers as well, and while not standard METAR, some stations have 5 characters. + diff --git a/wmWeather-1.31/CHANGES b/wmWeather-1.31/CHANGES new file mode 100644 index 0000000..45e94c7 --- /dev/null +++ b/wmWeather-1.31/CHANGES @@ -0,0 +1,108 @@ +wmWeather changes. + +Version Description +------------------------------------------------------------------------- +1.31 - released May 4, 1999. + fixed some conversion bugs in wind speed.. + + +1.30 - released April 13, 1999. + Fixed a bug whereby the App would crash when trying to gain input + focus under non-WindowMaker WMs (focus is now grabbed by + `PointerRoot' not `iconwin'). + + Added StationID and `time-of-last-update' labels. To do this I needed + to shrink the fonts down and scrunch them together a bit more. + + Added new command line option to change their color; + -tc + + Added code to properly decode wind speed when in MPS. + + Fixed bug in beaufort wind speed calcs. + + +1.29 - released March 13, 1999. + Reorganized wmgeneral.c and renamed it xutils.c (wmgeneral.h + -> xutils.h as well ). Also moved it into the same directory as wmWeather. + Now, the openXwindow is split into 2 parts. You first need to call + initXwindow(argc, argv). This allows us to check the display depth + before we commit to a particular pixmap (this will be useful in my + other DockApps to dynamically set appropriate pixmaps based on depth). + Got rid of alot of the other routines that I never use. + + Added 4 more command line option to set the colors of the text: + + -bc for setting the BackGround color. + -lc for setting the Label color. + -dc for setting the Data color. + -wgc for setting the Wind Gust color. + + Also cleaned up the pixmap to minimize the number of colors used. + + Changed metric toggle to work with a key press (any key). + + Added double click support. Now double clicking does the following: + + Double Mouse Left: pops up the fully decoded METAR file + in xmessage. + + Double Mouse Middle: Currently undefined. + + Double Mouse Right: Forces a new update (i.e. download.) + + + + +1.28 - released March 9, 1999. + Changed -celsius (-c) option to -metric (-m). Naming makes more + sense that way... + + Added -W option to display WindChill instead of DewPoint. + Since Windchill is not always available, we only show it if its + available. If its not, we paste up DewPoint as default. + + Also added -mps option to display wind speed in units of + meters/second (when in -metric mode). + +1.27 - released March 8, 1999. + fixed bug in speed calculation when wind is gusting. + + +1.26 - released February 24, 1999. + Added -delay option. + +1.25 - released February 16, 1999. + Added Wind speeds on the 'Beaufort scale' + Thanks to Paul Martin for this addition. + +1.24 - released February 12, 1999. + Added --passive-ftp option to wget... + +1.23 - released February 2, 1999. + Few more bug fixes... + Added support for different Pressure units... + +1.22 - released February 1, 1999. + Fixed minor bug in direction abbreviations. Added a bit more to man + page. + +1.21 - released January 29, 1999. + Fixed a problem in the perl script. Made the file paths absolute. + +1.2 - released January 29, 1999. + Added Wind speed line. Ended up decoding the Raw METAR line. + Fixed a few bugs... + Changed location of files from /tmp to ~/.wmWeatherReports + Changed units of pressure and wind speed to mmHg and km/h + when Celsius is set. (Really should change the flag to -metric). + +1.1 - Released Jan. 25, 1999. + Bug fixes. + Added Degrees F/C support... + Added a bit more info on where to find info on METAR/TAF + system... + +1.0 - Initial release. + Released Jan. 19, 1999. + diff --git a/wmWeather-1.31/COPYING b/wmWeather-1.31/COPYING new file mode 100644 index 0000000..a43ea21 --- /dev/null +++ b/wmWeather-1.31/COPYING @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, 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., 675 Mass Ave, Cambridge, MA 02139, 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. diff --git a/wmWeather-1.31/HINTS b/wmWeather-1.31/HINTS new file mode 100644 index 0000000..6a739d8 --- /dev/null +++ b/wmWeather-1.31/HINTS @@ -0,0 +1,27 @@ +Hints for wmWeather + + + +WindowMaker. +------------ +In WindowMaker simply drag and drop the wmWeather App on +the WindowMaker Dock or Clip. + + +Afterstep. +--------- +Afterstep users put the following in their .steprc +"Wharf wmWeather - MaxSwallow "wmWeather" wmWeather &". + +Note: AfterStep's Wharf has a problem with pixmaps that are +larger than 60x60 pixels. Please tell the AfterStep authors +to fix this, this is not our fault, but a Wharf problem! + + +Other window managers. +---------------------- +wmWeather shows as a 64x64 shaped icon on your desktop under other +window managers. + + + diff --git a/wmWeather-1.31/INSTALL b/wmWeather-1.31/INSTALL new file mode 100644 index 0000000..8aeaf3b --- /dev/null +++ b/wmWeather-1.31/INSTALL @@ -0,0 +1,29 @@ +Installation instructions for wmWeather. + +Requirements +------------------------------------------------------------------------------- +wmWeather requires the Xpm library (which should be available on most machines +with XFree86 installed). And it requires that the GNU wget utility be installed +as well. wget is a utility that allows you to grab stuff like html files and +images diretly off the www without using a graphical browser. (Also, you +obviously need to be connected to internet in a way that wget will work.) +You also need to have Perl installed. + +On FreeBSD systems you may need to use gmake instead of make. + +Installation +------------------------------------------------------------------------------- +1) gunzip wmWeather-1.29.tar.gz +1) tar -xvf wmWeather-1.29.tar +2) cd wmWeather-1.29/Src/ +3) make clean +4) make +5) make install (must be root) +6) wmWeather & (or 'wmWeather -h' for help, or 'man wmWeather' for the man page) +7) You need to set the location of perl correctly in GrabWeather if your perl + is located in a place other than /usr/bin/ + + + + + diff --git a/wmWeather-1.31/Src/GrabWeather b/wmWeather-1.31/Src/GrabWeather new file mode 100755 index 0000000..86dde9c --- /dev/null +++ b/wmWeather-1.31/Src/GrabWeather @@ -0,0 +1,212 @@ +#!/usr/bin/perl + +# +# Grabs the latest local weather conditions from the National Weather Service (NWS). +# Uses the decoded METAR reports. +# +# Need to give the 4-character METAR station code on the Command Line. E.g.; +# +# GrabWeather KLAM +# + + + require "ctime.pl"; + + + # + # Change to users home directory. We used to dump into /tmp + # but using home dir instead avoids multiple users interfering + # with one another. (Yeah, we could "unique-ize" the filenames, but + # this is easier for now...) + # + $home = (getpwuid($<))[7]; + $ok = chdir() || chdir($home); + + + # + # Check to see if .wmWeatherReports exists. + # If not, make it and move to it. + # + if ( !(-e ".wmWeatherReports") ){ + mkdir(".wmWeatherReports", 0775); + } + chdir(".wmWeatherReports"); + + + + + + $StationID = $ARGV[0]; + $HTMLFileName = "$StationID.TXT"; + $URL = "ftp://weather.noaa.gov/data/observations/metar/decoded/$HTMLFileName"; + $DataFileName = "$StationID.dat"; + + + + + # + # I think some of these wget command line options may cause problems + # for some people? Dont know why... (Perhaps they have a ~/.wgetrc file + # that overrides command line options?). + # + $GrabCmd = "wget --proxy=off --passive-ftp --tries 0 -q -O $home/.wmWeatherReports/$StationID.TXT $URL"; + system "$GrabCmd"; + + + + + # + # Parse HTML File. + # + $Temp = -999.0; + $Chill = -999.0; + $DewPnt = -999.0; + $Pressure = -999.0; + $Hum = -999.0; + $Flag = 0; + open(TmpFile, "$HTMLFileName"); + while (){ + chop; + if ($Flag == 0) { $StationInfo = $_; }; + if ($Flag == 1) { $UpdateTime = $_; }; + if ($_ =~ /^Sky conditions:/ ){ $SkyConditions = $_; $SkyConditions =~ s/Sky conditions: (.*)/\1/; } + if ($_ =~ /^Temperature:/ ){ $Temp = $_; $Temp =~ s/Temperature:\s*(\-{0,1}[0-9.]{1,}).*/\1/; } + if ($_ =~ /^Windchill:/ ){ $Chill = $_; $Chill =~ s/Windchill:\s*(\-{0,1}[0-9.]{1,}).*/\1/; } + if ($_ =~ /^Dew Point:/ ){ $DewPnt = $_; $DewPnt =~ s/Dew Point:\s*(\-{0,1}[0-9.]{1,}).*/\1/; } + if ($_ =~ /^Pressure \(.*\):/ ){ $Pressure = $_; $Pressure =~ s/Pressure \(.*\):\s*([0-9.]{2,}).*/\1/; } + if ($_ =~ /^Relative Humidity:/ ){ $Hum = $_; $Hum =~ s/Relative Humidity:\s*(\d{1,})\%.*/\1/; } + if ($_ =~ /^ob: / ){ $CodedMETAR = $_; $CodedMETAR =~ s/ob: (.*)/\1/; } + ++$Flag; + } + close(TmpFile); + + + + + # + # Isolate the Wind groups out of the coded METAR report. + # There may be two groups - the normal one and a variability set. + # + $WindGroup = $CodedMETAR; + $WindGroup =~ s/ RMK\s.*$//; + $VarWindGroup = $WindGroup; + + + if ($WindGroup =~ /.*\s\w{3}\d{2,3}KT\s\d{3}V\d{3}\s.*/ ) { + $VarWindGroup =~ s/.*\s\w{3}\d{2,3}KT\s(\d{3}V\d{3})\s.*/\1/; + $VarFlag = 1; + } elsif ($WindGroup =~ /.*\s\w{3}\d{2,3}MPS\s\d{3}V\d{3}\s.*/ ) { + $VarWindGroup =~ s/.*\s\w{3}\d{2,3}MPS\s(\d{3}V\d{3})\s.*/\1/; + $VarFlag = 1; + } elsif ($WindGroup =~ /.*\s\w{3}\d{2,3}G\d{2,3}KT\s(\d{2,3}V\d{2,3})\s.*/ ) { + $VarWindGroup =~ s/.*\s\w{3}\d{2,3}G\d{2,3}KT\s(\d{2,3}V\d{2,3})\s.*/\1/; + $VarFlag = 1; + } elsif ($WindGroup =~ /.*\s\w{3}\d{2,3}G\d{2,3}MPS\s(\d{2,3}V\d{2,3})\s.*/ ) { + $VarWindGroup =~ s/.*\s\w{3}\d{2,3}G\d{2,3}MPS\s(\d{2,3}V\d{2,3})\s.*/\1/; + $VarFlag = 1; + } else { + $VarWindGroup = ""; + $VarFlag = 0; + } + $Direction1 = $VarWindGroup; $Direction1 =~ s/(\d{3})V\d{3}/\1/; + $Direction2 = $VarWindGroup; $Direction2 =~ s/\d{3}V(\d{3})/\1/; + + + + $GustFlag = 0; + if ($WindGroup =~ /.*\s\w{3}\d{2,3}KT\s.*/ ) { + $WindGroup =~ s/.*\s(\w{3}\d{2,3}KT)\s.*/\1/; + $Direction = $WindGroup; $Direction =~ s/(\w{3})\d{2,3}KT/\1/; + $Speed = $WindGroup; $Speed =~ s/\w{3}(\d{2,3})KT/\1/; + } elsif ($WindGroup =~ /.*\s\w{3}\d{2,3}MPS\s.*/ ) { + $WindGroup =~ s/.*\s(\w{3}\d{2,3}MPS)\s.*/\1/; + $Direction = $WindGroup; $Direction =~ s/(\w{3})\d{2,3}MPS/\1/; + $Speed = $WindGroup; $Speed =~ s/\w{3}(\d{2,3})MPS/\1/; + $Speed *= 1.942; + } elsif ($WindGroup =~ /.*\s\w{3}\d{2,3}G\d{2,3}KT\s.*/ ) { + $WindGroup =~ s/.*\s(\w{3}\d{2,3}G\d{2,3}KT)\s.*/\1/; + $Direction = $WindGroup; $Direction =~ s/(\w{3})\d{2,3}G\d{2,3}KT/\1/; + $Speed1 = $WindGroup; $Speed1 =~ s/\w{3}(\d{2,3})G\d{2,3}KT/\1/; + $Speed2 = $WindGroup; $Speed2 =~ s/\w{3}\d{2,3}G(\d{2,3})KT/\1/; + $GustFlag = 1; + } elsif ($WindGroup =~ /.*\s\w{3}\d{2,3}G\d{2,3}MPS\s.*/ ) { + $WindGroup =~ s/.*\s(\w{3}\d{2,3}G\d{2,3}MPS)\s.*/\1/; + $Direction = $WindGroup; $Direction =~ s/(\w{3})\d{2,3}G\d{2,3}MPS/\1/; + $Speed1 = $WindGroup; $Speed1 =~ s/\w{3}(\d{2,3})G\d{2,3}MPS/\1/; + $Speed2 = $WindGroup; $Speed2 =~ s/\w{3}\d{2,3}G(\d{2,3})MPS/\1/; + $Speed1 *= 1.942; $Speed2 *= 1.942; + $GustFlag = 1; + } else { + $WindGroup = ""; + } + + + + # + # Get the Time out of the coded Metar Report. + # + $UniversalTime = $CodedMETAR; + if ($UniversalTime =~ /$StationID \d{1,2}\d{2}\d{2}Z/ ){ + + $UniversalTime =~ s/$StationID (\d{1,2})(\d{2})(\d{2})Z .*/\2:\3/; + + } else { + + $UniversalTime = "99:99"; + + } + + + + + + + + + + # + # Write out the stuff we need to the Data File. This is the file that will + # be read by wmWeather. + # + if ($Flag > 0){ + open(TmpFile, ">$DataFileName"); + print TmpFile "$StationInfo\n"; + print TmpFile "$UpdateTime\n"; + print TmpFile "$SkyConditions\n"; + print TmpFile "$UniversalTime\n"; + print TmpFile "$Temp\n"; + print TmpFile "$DewPnt\n"; + print TmpFile "$Chill\n"; + print TmpFile "$Pressure\n"; + print TmpFile "$Hum\n"; + + if ($Direction eq "" ){ + print TmpFile "-9999\n"; + } elsif ($Direction =~ /VRB/ ){ + print TmpFile "999\n"; + } elsif ($VarFlag) { + $Direction += 0; + print TmpFile "-$Direction\n"; + } else { + $Direction += 0; + print TmpFile "$Direction\n"; + } + + if ($WindGroup eq "" ) { + print TmpFile "-9999\n"; + } elsif ($GustFlag) { + $AvgSpeed = ($Speed1 + $Speed2)/2.0; + $AvgSpeed *= 1.15155; + print TmpFile "-$AvgSpeed\n"; + } else { + $Speed += 0; + $Speed *= 1.15155; + print TmpFile "$Speed\n"; + } + + close(TmpFile); + } + + + + diff --git a/wmWeather-1.31/Src/Makefile b/wmWeather-1.31/Src/Makefile new file mode 100644 index 0000000..e89bd8c --- /dev/null +++ b/wmWeather-1.31/Src/Makefile @@ -0,0 +1,34 @@ +CC = gcc +CFLAGS = -O2 -Wall +INCDIR = -I/usr/X11R6/include/X11 -I/usr/X11R6/include +DESTDIR= /usr/X11R6 +LIBDIR = -L/usr/X11R6/lib +# for linux +LIBS = -lXpm -lX11 -lXext +# for Solaris +# LIBS = -lXpm -lX11 -lXext -lsocket +OBJS = wmWeather.o \ + xutils.o + + +.c.o: + $(CC) $(CFLAGS) -D$(shell echo `uname -s`) -c $< -o $*.o $(INCDIR) + + +all: wmWeather.o wmWeather + +wmWeather.o: wmWeather_master.xpm wmWeather_mask.xbm +wmWeather: $(OBJS) + $(CC) $(CFLAGS) $(SYSTEM) -o wmWeather $^ $(INCDIR) $(LIBDIR) $(LIBS) + +clean: + for i in $(OBJS) ; do \ + rm -f $$i; \ + done + rm -f wmWeather + +install:: wmWeather + install -c -s -m 0755 wmWeather $(DESTDIR)/bin + install -c -m 0755 GrabWeather $(DESTDIR)/bin + install -c -m 0644 wmWeather.1 $(DESTDIR)/man/man1 + diff --git a/wmWeather-1.31/Src/wmWeather.1 b/wmWeather-1.31/Src/wmWeather.1 new file mode 100644 index 0000000..401efe2 --- /dev/null +++ b/wmWeather-1.31/Src/wmWeather.1 @@ -0,0 +1,94 @@ +.TH WMWEATHER 1.1 "19 January 1999" +.SH NAME +WMWEATHER \- Dockable Weather Monitor +.SH SYNOPSIS +.B wmWeather -station <4-char station ID> [-h] [-display ] [-metric] [-kPa] [-hPa] [-mmHg] [-beaufort] [-mps] [-delay