#!/usr/local/bin/python2.5
#################################################################################
# c2005-2006 by Paul Sherman                                                    #
# <psherma1@rochester.rr.com> http://www.pcbypaul.com                           #
#									        #
# 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.   #
#################################################################################
##  importing with system requirement checks ####################################

import sys, os, time, commands, string, shutil, re
import pygtk
import gobject
if gobject.pygtk_version < (2,5,96):
    print >>sys.stderr, "pyGTK version 2.6 or greater is required for this application"
    raise SystemExit
import gtk
try:
	import pango
except:
	print >> sys.stderr, "Cannot load Pango"
	raise SystemExit

############### now for our icons and font_description  ########################		
font_desc = pango.FontDescription()
cmd_font = pango.FontDescription("Monospaced 10")

squares_xpm = [
"531 125 10 1",
" 	c #000100",
".	c #111310",
"+	c #0200BA",
"@	c #1600FF",
"#	c #B90000",
"$	c #FF0000",
"%	c #00BA00",
"&	c #979996",
"*	c #999999",
"=	c #0CFF00",
"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
"&..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
"&..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
"&..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
"&..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
"&..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
"&..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
"&..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
"&..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
"&..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
"&..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
"&..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
"&..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
"&..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
"&..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
"&..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
"&................... ...................................................................................................................................                                                                                              ......................................                                                                                              .......................................                                                                                              ....................",
"&................... **********************************************************************************************.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$......................................==============================================================================================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                                                                                            *.....................................                                                                                              ......................................                                                                                              .......................................                                                                                              ....................",
"&................... *                                                                                            *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$......................................==============================================================================================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                                                                                            *.....................................                                                                                              ......................................                                                                                              .......................................                                                                                              ....................",
"&................... *                                                                                            *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$......................................==============================================================================================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                                                                                            *.....................................                                                                                              ......................................                                                                                              .......................................                                                                                              ....................",
"&................... *                                                                                            *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$......................................==============================================================================================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                                                                                            *.....................................                                                                                              ......................................                                                                                              .......................................                                                                                              ....................",
"&................... *                                                                                            *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$......................................==============================================================================================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                                                                                            *.....................................                                                                                              ......................................                                                                                              .......................................                                                                                              ....................",
"&................... *                                                                                            *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$......................................==============================================================================================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                                                                                            *.....................................                                                                                              ......................................                                                                                              .......................................                                                                                              ....................",
"&................... *                                                                                            *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$......................................==============================================================================================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                                                                                            *.....................................                                                                                              ......................................                                                                                              .......................................                                                                                              ....................",
"&................... *                                                                                            *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$......................................==============================================================================================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                                                                                            *.....................................                                                                                              ......................................                                                                                              .......................................                                                                                              ....................",
"&................... *                                                                                            *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$......................................==============================================================================================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                                                                                            *.....................................                                                                                              ......................................                                                                                              .......................................                                                                                              ....................",
"&................... *                                                                                            *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$......................................==============================================================================================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                                                                                            *.....................................                                                                                              ......................................                                                                                              .......................................                                                                                              ....................",
"&................... *                                                                                            *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$......................................==============================================================================================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                                                                                            *.....................................                                                                                              ......................................                                                                                              .......................................                                                                                              ....................",
"&................... *                                                                                            *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$......................................==============================================================================================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                                                                                            *.....................................                                                                                              ......................................                                                                                              .......................................                                                                                              ....................",
"&................... *                                                                                            *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$......................................==============================================================================================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                                                                                            *.....................................                                                                                              ......................................                                                                                              .......................................                                                                                              ....................",
"&................... *                         .........................................                          *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$$$$$$$$$$$$$$$$$$$$$$$$$$......................................===========================%=%=%=%=%=%=%=%=%=%=%=%=%=%=%=%=%=%=%=%=%==========================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                         .........................................                          *.....................................                           #########################################                          ......................................                           %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                          .......................................                           +++++++++++++++++++++++++++++++++++++++++                          ....................",
"&................... *                         .........................................                          *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$#########################################$$$$$$$$$$$$$$$$$$$$$$$$$$......................................===========================%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%==========================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@+++++++++++++++++++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                         .........................................                          *.....................................                           #########################################                          ......................................                           %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                          .......................................                           +++++++++++++++++++++++++++++++++++++++++                          ....................",
"&................... *                         .........................................                          *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$#########################################$$$$$$$$$$$$$$$$$$$$$$$$$$......................................===========================%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%==========================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@+++++++++++++++++++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                         .........................................                          *.....................................                           #########################################                          ......................................                           %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                          .......................................                           +++++++++++++++++++++++++++++++++++++++++                          ....................",
"&................... *                         .........................................                          *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$#########################################$$$$$$$$$$$$$$$$$$$$$$$$$$......................................===========================%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%==========================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@+++++++++++++++++++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                         .........................................                          *.....................................                           #########################################                          ......................................                           %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                          .......................................                           +++++++++++++++++++++++++++++++++++++++++                          ....................",
"&................... *                         .........................................                          *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$#########################################$$$$$$$$$$$$$$$$$$$$$$$$$$......................................===========================%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%==========================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@+++++++++++++++++++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                         .........................................                          *.....................................                           #########################################                          ......................................                           %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                          .......................................                           +++++++++++++++++++++++++++++++++++++++++                          ....................",
"&................... *                         .........................................                          *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$#########################################$$$$$$$$$$$$$$$$$$$$$$$$$$......................................===========================%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%==========================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@+++++++++++++++++++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                         .........................................                          *.....................................                           #########################################                          ......................................                           %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                          .......................................                           +++++++++++++++++++++++++++++++++++++++++                          ....................",
"&................... *                         .........................................                          *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$#########################################$$$$$$$$$$$$$$$$$$$$$$$$$$......................................===========================%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%==========================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@+++++++++++++++++++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                         .........................................                          *.....................................                           #########################################                          ......................................                           %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                          .......................................                           +++++++++++++++++++++++++++++++++++++++++                          ....................",
"&................... *                         .........................................                          *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$#########################################$$$$$$$$$$$$$$$$$$$$$$$$$$......................................===========================%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%==========================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@+++++++++++++++++++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                         .........................................                          *.....................................                           #########################################                          ......................................                           %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                          .......................................                           +++++++++++++++++++++++++++++++++++++++++                          ....................",
"&................... *                         .........................................                          *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$#########################################$$$$$$$$$$$$$$$$$$$$$$$$$$......................................===========================%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%==========================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@+++++++++++++++++++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                         .........................................                          *.....................................                           #########################################                          ......................................                           %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                          .......................................                           +++++++++++++++++++++++++++++++++++++++++                          ....................",
"&................... *                         .........................................                          *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$#########################################$$$$$$$$$$$$$$$$$$$$$$$$$$......................................===========================%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%==========================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@+++++++++++++++++++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                         .........................................                          *.....................................                           #########################################                          ......................................                           %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                          .......................................                           +++++++++++++++++++++++++++++++++++++++++                          ....................",
"&................... *                         .........................................                          *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$#########################################$$$$$$$$$$$$$$$$$$$$$$$$$$......................................===========================%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%==========================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@+++++++++++++++++++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                         .........................................                          *.....................................                           #########################################                          ......................................                           %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                          .......................................                           +++++++++++++++++++++++++++++++++++++++++                          ....................",
"&................... *                         .........................................                          *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$#########################################$$$$$$$$$$$$$$$$$$$$$$$$$$......................................===========================%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%==========================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@+++++++++++++++++++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                         .........................................                          *.....................................                           #########################################                          ......................................                           %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                          .......................................                           +++++++++++++++++++++++++++++++++++++++++                          ....................",
"&................... *                         .........................................                          *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$#########################################$$$$$$$$$$$$$$$$$$$$$$$$$$......................................===========================%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%==========================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@+++++++++++++++++++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                         .........................................                          *.....................................                           #########################################                          ......................................                           %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                          .......................................                           +++++++++++++++++++++++++++++++++++++++++                          ....................",
"&................... *                         .........................................                          *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$#########################################$$$$$$$$$$$$$$$$$$$$$$$$$$......................................===========================%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%==========================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@+++++++++++++++++++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                         .........................................                          *.....................................                           #########################################                          ......................................                           %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                          .......................................                           +++++++++++++++++++++++++++++++++++++++++                          ....................",
"&................... *                         .........................................                          *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$#########################################$$$$$$$$$$$$$$$$$$$$$$$$$$......................................===========================%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%==========================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@+++++++++++++++++++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                         .........................................                          *.....................................                           #########################################                          ......................................                           %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                          .......................................                           +++++++++++++++++++++++++++++++++++++++++                          ....................",
"&................... *                         .........................................                          *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$#########################################$$$$$$$$$$$$$$$$$$$$$$$$$$......................................===========================%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%==========================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@+++++++++++++++++++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                         .........................................                          *.....................................                           #########################################                          ......................................                           %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                          .......................................                           +++++++++++++++++++++++++++++++++++++++++                          ....................",
"&................... *                         .........................................                          *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$#########################################$$$$$$$$$$$$$$$$$$$$$$$$$$......................................===========================%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%==========================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@+++++++++++++++++++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                         .........................................                          *.....................................                           #########################################                          ......................................                           %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                          .......................................                           +++++++++++++++++++++++++++++++++++++++++                          ....................",
"&................... *                         .........................................                          *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$#########################################$$$$$$$$$$$$$$$$$$$$$$$$$$......................................===========================%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%==========================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@+++++++++++++++++++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                         .........................................                          *.....................................                           #########################################                          ......................................                           %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                          .......................................                           +++++++++++++++++++++++++++++++++++++++++                          ....................",
"&................... *                         .........................................                          *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$#########################################$$$$$$$$$$$$$$$$$$$$$$$$$$......................................===========================%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%==========================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@+++++++++++++++++++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                         .........................................                          *.....................................                           #########################################                          ......................................                           %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                          .......................................                           +++++++++++++++++++++++++++++++++++++++++                          ....................",
"&................... *                         .........................................                          *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$#########################################$$$$$$$$$$$$$$$$$$$$$$$$$$......................................===========================%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%==========================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@+++++++++++++++++++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                         .........................................                          *.....................................                           #########################################                          ......................................                           %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                          .......................................                           +++++++++++++++++++++++++++++++++++++++++                          ....................",
"&................... *                         .........................................                          *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$$$$$$$$$$$$$$$$$$$$$$$$$$......................................===========================%=%=%=%=%=%=%=%=%=%=%=%=%=%=%=%=%=%=%=%=%==========================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                                                                                            *.....................................                                                                                              ......................................                                                                                              .......................................                                                                                              ....................",
"&................... *                                                                                            *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$......................................==============================================================================================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                                                                                            *.....................................                                                                                              ......................................                                                                                              .......................................                                                                                              ....................",
"&................... *                                                                                            *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$......................................==============================================================================================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                                                                                            *.....................................                                                                                              ......................................                                                                                              .......................................                                                                                              ....................",
"&................... *                                                                                            *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$......................................==============================================================================================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                                                                                            *.....................................                                                                                              ......................................                                                                                              .......................................                                                                                              ....................",
"&................... *                                                                                            *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$......................................==============================================================================================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                                                                                            *.....................................                                                                                              ......................................                                                                                              .......................................                                                                                              ....................",
"&................... *                                                                                            *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$......................................==============================================================================================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                                                                                            *.....................................                                                                                              ......................................                                                                                              .......................................                                                                                              ....................",
"&................... *                                                                                            *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$......................................==============================================================================================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                                                                                            *.....................................                                                                                              ......................................                                                                                              .......................................                                                                                              ....................",
"&................... *                                                                                            *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$......................................==============================================================================================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                                                                                            *.....................................                                                                                              ......................................                                                                                              .......................................                                                                                              ....................",
"&................... *                                                                                            *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$......................................==============================================================================================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                                                                                            *.....................................                                                                                              ......................................                                                                                              .......................................                                                                                              ....................",
"&................... *                                                                                            *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$......................................==============================================================================================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                                                                                            *.....................................                                                                                              ......................................                                                                                              .......................................                                                                                              ....................",
"&................... *                                                                                            *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$......................................==============================================================================================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                                                                                            *.....................................                                                                                              ......................................                                                                                              .......................................                                                                                              ....................",
"&................... *                                                                                            *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$......................................==============================================================================================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                                                                                            *.....................................                                                                                              ......................................                                                                                              .......................................                                                                                              ....................",
"&................... *                                                                                            *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$......................................==============================================================================================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... *                                                                                            *.....................................                                                                                              ......................................                                                                                              .......................................                                                                                              ....................",
"&................... *                                                                                            *.....................................$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$......................................==============================================================================================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&................... **********************************************************************************************................................................................................................................................................................................................................................................................................................................................................................................................................................",
"&.......................................................................................................................................................$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$......................................==============================================================================================.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@....................",
"&..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
"&..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
"&..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
"&..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
"&..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
"&..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
"&..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
"&..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
"&..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
"&..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
"&..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
"&..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
"&.................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................."]



gamma22_xpm = [
"180 90 208 2",
"  	c None",
". 	c #7E7E7E",
"+ 	c #8C8C8C",
"@ 	c #989898",
"# 	c #979797",
"$ 	c #959595",
"% 	c #949494",
"& 	c #929292",
"* 	c #909090",
"= 	c #8F8F8F",
"- 	c #8D8D8D",
"; 	c #8B8B8B",
"> 	c #898989",
", 	c #888888",
"' 	c #868686",
") 	c #848484",
"! 	c #828282",
"~ 	c #808080",
"{ 	c #7D7D7D",
"] 	c #7B7B7B",
"^ 	c #797979",
"/ 	c #777777",
"( 	c #757575",
"_ 	c #737373",
": 	c #717171",
"< 	c #6F6F6F",
"[ 	c #6C6C6C",
"} 	c #6A6A6A",
"| 	c #686868",
"1 	c #666666",
"2 	c #646464",
"3 	c #616161",
"4 	c #5F5F5F",
"5 	c #5D5D5D",
"6 	c #5B5B5B",
"7 	c #585858",
"8 	c #565656",
"9 	c #535353",
"0 	c #515151",
"a 	c #4F4F4F",
"b 	c #4C4C4C",
"c 	c #494949",
"d 	c #474747",
"e 	c #444444",
"f 	c #414141",
"g 	c #404040",
"h 	c #434343",
"i 	c #464646",
"j 	c #484848",
"k 	c #4B4B4B",
"l 	c #4D4D4D",
"m 	c #505050",
"n 	c #525252",
"o 	c #555555",
"p 	c #575757",
"q 	c #595959",
"r 	c #5C5C5C",
"s 	c #5E5E5E",
"t 	c #606060",
"u 	c #636363",
"v 	c #656565",
"w 	c #676767",
"x 	c #696969",
"y 	c #6B6B6B",
"z 	c #6D6D6D",
"A 	c #707070",
"B 	c #727272",
"C 	c #747474",
"D 	c #767676",
"E 	c #787878",
"F 	c #7A7A7A",
"G 	c #7C7C7C",
"H 	c #7F7F7F",
"I 	c #818181",
"J 	c #838383",
"K 	c #858585",
"L 	c #878787",
"M 	c #8A8A8A",
"N 	c #8E8E8E",
"O 	c #919191",
"P 	c #939393",
"Q 	c #969696",
"R 	c #999999",
"S 	c #9B9B9B",
"T 	c #9C9C9C",
"U 	c #9D9D9D",
"V 	c #9F9F9F",
"W 	c #A0A0A0",
"X 	c #A2A2A2",
"Y 	c #A3A3A3",
"Z 	c #A4A4A4",
"` 	c #A6A6A6",
" .	c #A7A7A7",
"..	c #A8A8A8",
"+.	c #A9A9A9",
"@.	c #AAAAAA",
"#.	c #ACACAC",
"$.	c #ADADAD",
"%.	c #AEAEAE",
"&.	c #AFAFAF",
"*.	c #B0B0B0",
"=.	c #B1B1B1",
"-.	c #B2B2B2",
";.	c #B3B3B3",
">.	c #B4B4B4",
",.	c #B5B5B5",
"'.	c #B6B6B6",
").	c #B7B7B7",
"!.	c #B8B8B8",
"~.	c #B9B9B9",
"{.	c #BABABA",
"].	c #BBBBBB",
"^.	c #BCBCBC",
"/.	c #BDBDBD",
"(.	c #BEBEBE",
"_.	c #ABABAB",
":.	c #A5A5A5",
"<.	c #A1A1A1",
"[.	c #9E9E9E",
"}.	c #C0C0C0",
"|.	c #C3C3C3",
"1.	c #C5C5C5",
"2.	c #C8C8C8",
"3.	c #CBCBCB",
"4.	c #CDCDCD",
"5.	c #D0D0D0",
"6.	c #D2D2D2",
"7.	c #D5D5D5",
"8.	c #D7D7D7",
"9.	c #D9D9D9",
"0.	c #DCDCDC",
"a.	c #DEDEDE",
"b.	c #E0E0E0",
"c.	c #E2E2E2",
"d.	c #E4E4E4",
"e.	c #E6E6E6",
"f.	c #E8E8E8",
"g.	c #E9E9E9",
"h.	c #EBEBEB",
"i.	c #EDEDED",
"j.	c #EEEEEE",
"k.	c #F0F0F0",
"l.	c #F1F1F1",
"m.	c #F3F3F3",
"n.	c #F4F4F4",
"o.	c #F5F5F5",
"p.	c #F6F6F6",
"q.	c #F7F7F7",
"r.	c #F8F8F8",
"s.	c #F9F9F9",
"t.	c #FAFAFA",
"u.	c #FBFBFB",
"v.	c #FCFCFC",
"w.	c #FDFDFD",
"x.	c #FEFEFE",
"y.	c #FFFFFF",
"z.	c #F2F2F2",
"A.	c #EFEFEF",
"B.	c #ECECEC",
"C.	c #EAEAEA",
"D.	c #E7E7E7",
"E.	c #E5E5E5",
"F.	c #E3E3E3",
"G.	c #E1E1E1",
"H.	c #DFDFDF",
"I.	c #DDDDDD",
"J.	c #DBDBDB",
"K.	c #D8D8D8",
"L.	c #D6D6D6",
"M.	c #D4D4D4",
"N.	c #D1D1D1",
"O.	c #CFCFCF",
"P.	c #CCCCCC",
"Q.	c #CACACA",
"R.	c #C7C7C7",
"S.	c #C4C4C4",
"T.	c #C1C1C1",
"U.	c #6E6E6E",
"V.	c #626262",
"W.	c #3F3F3F",
"X.	c #3A3A3A",
"Y.	c #353535",
"Z.	c #313131",
"`.	c #2C2C2C",
" +	c #272727",
".+	c #222222",
"++	c #1D1D1D",
"@+	c #181818",
"#+	c #131313",
"$+	c #0E0E0E",
"%+	c #080808",
"&+	c #020202",
"*+	c #050505",
"=+	c #0B0B0B",
"-+	c #101010",
";+	c #151515",
">+	c #1B1B1B",
",+	c #202020",
"'+	c #252525",
")+	c #292929",
"!+	c #2E2E2E",
"~+	c #333333",
"{+	c #383838",
"]+	c #3C3C3C",
"^+	c #454545",
"/+	c #4A4A4A",
"(+	c #4E4E4E",
"_+	c #9A9A9A",
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
". + @ # $ % & * = - ; > , ' ) ! ~ . { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G . H I J K L , M + N = O P % Q # R S T U V W X Y Z `  ...+.@.#.$.%.&.*.=.-.;.;.>.,.'.'.).!.!.~.{.{.].].].^.^./././././.(.(.(.(.(.(.(./././././.^.^.^.].].{.{.~.~.!.!.).'.,.,.>.;.-.=.*.&.%.$.#._.@.+. .` :.Z X <.W [.- . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". U }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.u.t.t.s.r.q.p.n.m.z.k.A.i.B.C.g.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.(.^.~.'.-.&.#.+.` X V S @ % O - > ' ! . F D B U.} 1 V.5 q o 0 b j h W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+f ^+/+(+9 p 6 t 2 | [ A C E G ~ ) L ; = P Q _+U <.Z  ._.%.=.>._+. ",
". _+>.=.%._. .Z <.U _+Q P = ; L ) ~ G E C A [ | 2 t 6 p 9 (+/+^+f ]+{+~+!+)+'+,+>+;+-+=+*+&+%+$+#+@+++.+ +`.Z.Y.X.W.h j b 0 o q 5 V.1 } U.B D F . ! ' > - O % @ S V X ` +.#.&.-.'.~.^.(.T.S.R.Q.P.O.N.M.L.K.J.I.H.G.F.E.D.g.C.B.i.A.k.z.m.n.p.q.r.s.t.t.u.v.w.w.x.x.x.y.y.y.y.y.y.y.x.x.x.w.w.v.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.0.9.8.7.6.5.4.3.2.1.|.}.U . ",
". - [.W <.X Z :.`  .+.@._.#.$.%.&.*.=.-.;.>.,.,.'.).!.!.~.~.{.{.].].^.^.^./././././.(.(.(.(.(.(.(./././././.^.^.].].].{.{.~.!.!.).'.'.,.>.;.;.-.=.*.&.%.$.#.@.+... .` Z Y X W V U T S R # Q % P O = N + M , L K J I H . G F E D C B A z y x w v u t s r q p o n m l k j i h g f e d c b a 0 9 8 7 6 5 4 3 2 1 | } [ < : _ ( / ^ ] { . ~ ! ) ' , > ; - = * & % $ # @ + . ",
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "]


ruler_xpm = [
"488 19 3 1",
" 	c #999999",
".	c #7C0535",
"+	c #000000",
"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        ",
"                                                            .      ....                                                                                                                                                                                                                                                                                                                                                                                                                                 ",
"                       +++    ++                          ...      .  .                                                                                                                                                                                                                                                                                                                                                                                               ++   +++                          ",
"                      +   +    +                            .      .  .                                                                                                                                                                                                                                                                                                                                                                                                +  +   +                         ",
"                      + + +    +                            .      .  .                                   +++++                                       ++++                                          ++                                       +++++                                       ++++                                         ++++                                       +++                                         ++++                                      +  + + +                         ",
"                      +   +    +                            .      .  .                                        +                                          +                                        + +                                       +                                          +                                                +                                      +   +                                       +    +                                     +  +   +                         ",
"                      +   + +  +                            .   .  .  .                                    ++++                                        +++                                        +  +                                       ++++                                       +++++                                            +                                       +++                                         +++++                                     +  +   +                         ",
"                       +++  + +++                           .  ..  ....                                   +                                               +                                       +  +                                           +                                      +    +                                          +                                       +   +                                            +                                    +++  +++                          ",
"                                                                                                          +                                               +                                       +++++                                          +                                      +    +                                         +                                        +   +                                            +                                                                      ",
"                                                                                                          ++++++                                      ++++                                           +                                       ++++                                        ++++                                          +                                         +++                                         ++++                                                                       ",
"                            +                                   ++                                                                                                                                                                                                                                                                                                                                                                                                        +                             ",
"                            +                                   ++                                                                                                                                                                                                                                                                                                                                                                                                        +                             ",
"                            +                                   ++                                           +                                          +                                           +                                          +                                           +                                           +                                          +                                            +                                          +                             ",
"                            +                                   ++                                           +                                          +                                           +                                          +                                           +                                           +                                          +                                            +                                          +                             ",
"                            +                                   ++                                           +                                          +                                           +                                          +                                           +                                           +                                          +                                            +                                          +                             ",
"                            +                                   ++                                           +                                          +                                           +                                          +                                           +                                           +                                          +                                            +                                          +                             ",
"                            +                                   ++                                           +                                          +                                           +                                          +                                           +                                           +                                          +                                            +                                          +                             ",
"                            +                                   ++                                           +                                          +                                           +                                          +                                           +                                           +                                          +                                            +                                          +                             ",
"                            +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                             "]


wp_xpm = [
"90 60 3 1",
" 	c None",
".	c #FFFFFF",
"+	c #FAFAFA",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++"]


bp_xpm = [
"90 60 3 1",
" 	c None",
".	c #121212",
"+	c #000000",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++",
".............................................+++++++++++++++++++++++++++++++++++++++++++++"]


class ShowGamma:

		
	def info(self, message):
		box = gtk.MessageDialog(None, 0, gtk.MESSAGE_INFO, gtk.BUTTONS_OK, message)
		box.set_position(gtk.WIN_POS_CENTER)
		box.set_title('Information')
		box.run()
		box.destroy()	
		
		
	def alert(self, message):
		box = gtk.MessageDialog(None, 0, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, message)
		box.set_position(gtk.WIN_POS_CENTER)
		box.set_title('Error')
		box.run()
		box.destroy()		

	def delete_event(self, widget, event, data=None):
		gtk.main_quit()
	
	def val1_changed(self, adjuster):
		self.lbl_red.set_text('%0.2f' % adjuster.get_value())
		if self.tog_sync.get_active():
			self.lbl_grn.set_text('%0.2f' % adjuster.get_value())
			self.lbl_blu.set_text('%0.2f' % adjuster.get_value())
		self.set_gamma()

	def val2_changed(self, adjuster):
		self.lbl_grn.set_text('%0.2f' % adjuster.get_value())
		self.set_gamma()

	def val3_changed(self, adjuster):
		self.lbl_blu.set_text('%0.2f' % adjuster.get_value())
		self.set_gamma()			
			
	def sync_tog(self, tog):
		if self.tog_sync.get_active():
			self.grn_scroll.set_adjustment(self.adj1)
			self.blu_scroll.set_adjustment(self.adj1)
			self.lbl_grn.set_text('%0.2f' % self.adj1.get_value())
			self.lbl_blu.set_text('%0.2f' % self.adj1.get_value())
		else:	
			self.adj2.set_all(self.adj1.get_value(), 0.1, 10.0, 0.01, 0.2)
			self.adj3.set_all(self.adj1.get_value(), 0.1, 10.0, 0.01, 0.2)
			self.grn_scroll.set_adjustment(self.adj2)
			self.blu_scroll.set_adjustment(self.adj3)
		self.set_gamma()

 	def set_gamma(self):
		red = float(self.lbl_red.get_text())
  		grn = float(self.lbl_grn.get_text())
  		blu = float(self.lbl_blu.get_text())
		cmd = '%s -rgamma %1.2f -ggamma %1.2f -bgamma %1.2f 2> /dev/null' % (self.GAMMA_CMD, red, grn, blu)
		os.system(cmd)
		self.txtCommand.set_text(cmd)


	def cancel_all(self, btn):
		self.window.hide()
		self.adj1.set_all(self.g_init[0], 0.1, 10.0, 0.01, 0.2)
		self.adj2.set_all(self.g_init[1], 0.1, 10.0, 0.01, 0.2)
		self.adj3.set_all(self.g_init[2], 0.1, 10.0, 0.01, 0.2)
		gtk.main_quit()


	def exit_only(self, btn):
		gtk.main_quit()


	def isGlogon(self, btn):
		ret = commands.getoutput('grep ":initdefault:" /etc/inittab')
		if re.search("id:3:initdefault:", ret):
			return False
		if re.search("id:4:initdefault:", ret):
			if os.path.exists("/etc/slackware-version"):
				return True
		if re.search("id:5:initdefault:", ret):
			return True
		if sys.platform.startswith('openbsd'):
			return False
		else:
			self.info("Logon type cannot be determined,\ntherefore GAMMApage does not know\nwhere to save the gamma-adjusting \ncommand to be run on X-startup.\n\nThe \"Save\" button will be disabled.\nIn its place, the \"Exit\" button will close the program but keep your gamma adjustments until your X-session ends.\n\nSee the \"HELP\" pages for further instructions.")
			self.save_btn.disconnect(self.saveid)
			self.save_btn.set_label("Exit")
			self.save_btn.connect("clicked", self.exit_only)
			self.saveable = False
			return False

	def toggle_init(self, data=None):
	
		if self.tog_init.get_active():		
			myshell=os.path.basename(os.getenv("SHELL"))
			if myshell != "bash" and myshell != "ksh" and myshell != "zsh" and myshell != "sh":
				self.saveable = False
				self.info("GAMMApage uses bourne shell scripts to adjust gamma on system startup. Since you appear to NOT be using a bourne shell... \n\nThe \"Save\" button cannot be enabled.\nIn its place, the \"Exit\" button will close the program but keep your gamma adjustments until your X-session ends.\n\nSee the \"HELP\" pages for further instructions.")
				return False
			else:	

				self.glogon = self.isGlogon(self.save_btn)
				self.start_file = self.get_start_file()	
				self.info("The \"Save\" button will now be enabled.\n\nFor information about how GAMMApage altrers the USER init script, click the HELP button on the lower left of the application window.")
				self.save_btn.disconnect(self.saveid)
				self.save_btn.set_label("Save and Exit")
				self.saveid = self.save_btn.connect("clicked", self.attempt_save)
				#self.tooltips.set_tip(self.save_btn, "Close GAMMApage")
				self.saveable = True
				return True
		else:
			self.save_btn.disconnect(self.saveid)
			self.save_btn.set_label("Exit")
			self.saveid = self.save_btn.connect("clicked", self.exit_only)
			self.saveable = False	
			
	

	def get_init_gamma(self):
		f = commands.getoutput('%s 2>&1' % self.GAMMA_CMD)
		prts = string.split(f, ",")
		red_prt = float(string.split(prts[0], " ")[-1])
		grn_prt = float(string.split(prts[1], " ")[-1])
		blu_prt = float(string.split(prts[2], " ")[-1])
		sync = True
		if not (red_prt == grn_prt == blu_prt):
			sync = False
		init_gamma = red_prt, grn_prt, blu_prt, sync
		return init_gamma
		

	def get_start_file(self):
		if self.glogon:
			try1 = os.path.join(self.home_dir,".bash_profile")
			try2 = os.path.join(self.home_dir,".bash_login")
			try3 = os.path.join(self.home_dir,".profile")
			if os.path.exists(try1):
				return try1
			elif os.path.exists(try1):
				return try2
			elif os.path.exists(try1):
				return try3
			else:
				self.generated_start_file = True
				return try1		
		else:
			tryx = os.path.join(self.home_dir,".xinitrc")
			if not os.path.exists(tryx):
				if not os.path.exists("/etc/X11/xinit/xinitrc"):
					self.info("You seem to be using a console logon, but neither your ~/.xinitrc or /etc/X11/xinit/xinitrc can be found.\n\nThe \"Save\" button will be disabled.\nIn its place, the \"Exit\" button will close the program but keep your gamma adjustments until your X-session ends.\n\nSee the \"HELP\" pages for further instructions.")
					self.save_btn.disconnect(self.saveid)
					self.save_btn.set_label("Exit")
					self.save_btn.connect("clicked", self.exit_only)
					self.tooltips.set_tip(self.save_btn, "Close GAMMApage")
					self.saveable = False				
					return None
				self.generated_start_file = True
			return tryx
	
	
	def reset_sliders(self, btn):
		self.adj1.set_all(self.g_init[0], 0.1, 10.0, 0.01, 0.2)
		self.adj2.set_all(self.g_init[1], 0.1, 10.0, 0.01, 0.2)
		self.adj3.set_all(self.g_init[2], 0.1, 10.0, 0.01, 0.2)
		self.tog_sync.set_active(True)
			
					
	def attempt_save(self, btn):
		if self.write_gammapage():
			if self.save_me():
				gtk.main_quit()
			else:
				pass
		else:
			pass


	def write_gammapage(self):
		try:
			rc = os.path.join(self.home_dir, ".gammapagerc")
			if os.path.exists(rc):
				os.system('rm -f %s' % rc)
			red = self.lbl_red.get_text()
  			grn = self.lbl_grn.get_text()
  			blu = self.lbl_blu.get_text()
			cmd = '%s -rgamma %s -ggamma %s -bgamma %s 2> /dev/null # called from %s' % (self.GAMMA_CMD, red, grn, blu, self.start_file)
			f = open(rc, 'w')
			f.write(cmd)
			f.close()
			os.chmod(rc, 0700)
			return True
		except:
			self.alert("Could not write thr gammapagerc file")
			return False	
				
						
					
	def save_me(self):
		if self.generated_start_file:
			if self.start_file == os.path.join(self.home_dir,".bash_profile"):
				try:
					f = open(self.start_file, 'w')
					f.write('# .bash_profile generated by gammapage\n')
					ftmp.write('if [ -x $HOME/.gammapagerc ]; then\n')
					ftmp.write('    $HOME/.gammapagerc   #monitor calibration\n')
					ftmp.write('fi # end gammapage\n')
					rc_written = True
					os.chmod(f, 0644)
					self.info("\nSettings have been saved")
					return True
				except:
					self.alert('Could not write %s' % self.start_file)
					return False
				
			
			else:
				try:
					xPath = os.path.realpath("/etc/X11/xinit/xinitrc")
					f_in = open(xPath, 'r')
					f_out = open(self.start_file, 'w')
					rc_written = False
					for line in f_in:
						if not line[0] == "#":
							if not rc_written:	
								f_out.write('# local .xinitrc generated by gammapage\n')
								f_out.write('if [ -x $HOME/.gammapagerc ]; then\n')
								f_out.write('    $HOME/.gammapagerc   #monitor calibration\n')
								f_out.write('fi # end gammapage\n')
								rc_written = True
						f_out.write(line)
						
					f_in.close()
					f_out.close()
					os.chmod(self.start_file, 0755)
					self.info("\nSettings have been saved")
					return True
				except:
					self.alert('Could not write %s' % self.start_file)
					return False
		
		else:
			try:
				tmp = os.path.join(self.home_dir,"gamma_temp")
				bak_str = self.start_file + ".bak"
				shutil.copyfile(self.start_file, bak_str)
				f = open(self.start_file, 'r')
				ftmp = open(tmp, 'w')
				rc_written = False
				for line in f:
					if re.search("gammapage", line):
						if re.search("generated by gammapage", line):
							ftmp.write(line)
					else:
						if not line[0] == "#":
							if not rc_written:
								ftmp.write('if [ -x $HOME/.gammapagerc ]; then\n')
								ftmp.write('    $HOME/.gammapagerc   #monitor calibration\n')
								ftmp.write('fi # end gammapage\n')
								rc_written = True
							ftmp.write(line)
						else:
							ftmp.write(line)
				ftmp.close()
				f.close()
				os.system('mv -f %s %s' % (tmp, self.start_file))
				if self.start_file == os.path.join(self.home_dir,".xinitrc"):
					os.chmod(self.start_file, 0755)
				self.info("\nSettings have been saved")
				return True
			except:
				if not os.path.exists(self.start_file):
					if os.path.exists(bak_str):
						os.system('mv -f %s %s' % (bak_str, self.start_file))
						if self.start_file == os.path.join(self.home_dir,".xinitrc"):
							os.chmod(self.start_file, 0755)
				self.alert('An error occured. Could not write to:\n %s' % self.start_file)
				return False

	
				
	def restore_all(self, btn):
		rc = os.path.join(self.home_dir, ".gammapagerc")
		g_string = "generated by gammapage"
		self.adj1.set_all(1.0, 0.1, 10.0, 0.01, 0.2)
		self.adj2.set_all(1.0, 0.1, 10.0, 0.01, 0.2)
		self.adj3.set_all(1.0, 0.1, 10.0, 0.01, 0.2)
		self.tog_sync.set_active(True)
		# delete calling file if "generated by gammapage" -- after asking user
		# or simply delete the calling lines if file was already there
		if os.path.exists(rc):
			os.system('rm -f %s' % rc)
			
		self.start_file = self.get_start_file()	
		if not os.path.exists(self.start_file):
			return
		if commands.getoutput('grep "%s" %s' % (g_string, self.start_file)):
			dlg = gtk.MessageDialog(self.window, gtk.DIALOG_MODAL, gtk.MESSAGE_QUESTION, gtk.BUTTONS_YES_NO, 'The file:   %s \n\nwas originally created by GAMMApage, so instead of removing the lines specific to this application, you may want to delete it entirely. \n\n Do you want to delete that file?' % self.start_file )
			dlg.set_position(gtk.WIN_POS_MOUSE)
			response = dlg.run()
			if response == gtk.RESPONSE_YES:
				dlg.destroy()
				os.system('rm -f %s' % self.start_file)
				self.info("\nAll settings have been removed")	
			else:
				dlg.destroy()
				self.info('gammapagerc has been removed but the lines to call that file remain in:\n\n   %s' % self.start_file)
		else:
			try:
				tmp = os.path.join(self.home_dir,"gamma_temp")
				bak_str = self.start_file + ".bak"
				shutil.copyfile(self.start_file, bak_str)
				f = open(self.start_file, 'r')
				ftmp = open(tmp, 'w')
				rc_written = False
				for line in f:
					if re.search("gammapage", line):
						pass
					else:
						ftmp.write(line)
				ftmp.close()
				f.close()
				os.system('mv -f %s %s' % (tmp, self.start_file))
				if self.start_file == os.path.join(self.home_dir,".xinitrc"):
					os.chmod(self.start_file, 0755)
				self.info("\nAll settings have been removed")
			except:
				if not os.path.exists(self.start_file):
					if os.path.exists(bak_str):
						os.system('mv -f %s %s' % (bak_str, self.start_file))
						if self.start_file == os.path.join(self.home_dir,".xinitrc"):
							os.chmod(self.start_file, 0755)
						
				self.info('An write error occurred. gammapagerc has been removed but the lines to call that file remain in:\n\n   %s' % self.start_file)
	
	def cmd_copy(self, none):
		self.clippy.set_text(self.txtCommand.get_text())
			
			
	def checkfor(self, xprog):
		ls=os.environ['PATH']
		isflag = False
		for d in ls.split(':'):
			try: 
				if xprog in os.listdir(d):
					return True
			except:
				pass
		return False	
		
		
	def __init__(self):
		self.window = None
		self.home_dir = os.path.expanduser("~")
		self.generated_start_file = False
		self.saveable = False
		self.clippy = gtk.Clipboard(display=gtk.gdk.display_get_default(), selection="CLIPBOARD")
		#self.clippy.set_can_store(None)
		self.GAMMA_CMD = ""
		
		if self.checkfor("xgamma"):
			self.GAMMA_CMD = "xgamma"					
					
#		if self.checkfor("fglrx_xgamma"):
#			self.GAMMA_CMD = "fglrx_xgamma"
# 		above removed due to reports that fglrx_xgamma was not working with latest ATI drivers
			
		if self.GAMMA_CMD == "":
			print >> sys.stderr, "Sorry, but no gamma adjusting utility was found on your machine"
			raise SystemExit
		self.g_init = self.get_init_gamma()
			
	
		####################  graphics  ######################
		squares = gtk.gdk.pixbuf_new_from_xpm_data(squares_xpm)
		gamma22 = gtk.gdk.pixbuf_new_from_xpm_data(gamma22_xpm)
		ruler = gtk.gdk.pixbuf_new_from_xpm_data(ruler_xpm)

		sq_img = gtk.Image()
		g22_img = gtk.Image()
		rul_img = gtk.Image()

		sq_img.set_from_pixbuf(squares)
		g22_img.set_from_pixbuf(gamma22)
		rul_img.set_from_pixbuf(ruler)


		###########  window setup  ################
		self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
		self.window.set_title("GAMMApage - 0.5")
		self.window.set_border_width(5)
		self.window.set_default_size(540, 420)
		self.window.set_position(gtk.WIN_POS_CENTER)
		self.window.set_geometry_hints(self.window, 540, 420, 540, 420)
		#self.window.connect("destroy", self.destroy_event)
		self.window.connect("delete_event", self.delete_event)
		self.tooltips = gtk.Tooltips()
		#self.window.set_icon(icon)


		###########  layout  ################
		vbox = gtk.VBox(False, 6)
		self.window.add(vbox)
		self.window.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse("#666666"))
		
		###########  Color Squares  ################
		top_box = gtk.HBox(True, 0)
		vbox.pack_start(top_box, False, False, 0)
		top_box.pack_start(sq_img, False, False, 0)
		
		###########  2.2 gamma  ################
		g22_box = gtk.HBox(True, 0)
		g22_inner_box = gtk.HBox(False, 0)
		vbox.pack_start(g22_box, False, False, 0)
		g22_inner_box.pack_start(g22_img, False, False, 10)
		lbl_g22 = gtk.Label("The")
		lbl_g22.set_markup('<span size="10240" font_family="monospace">The image at left is an aid to set your \nmonitor\'s gamma to the sRGB standard 2.2.\nBasically, squint at the image and adjust\nsliders until you get an even-looking grey.\nUse colors ONLY if grey has a color cast.</span>')
		g22_inner_box.pack_start(lbl_g22, False, False, 0)
		g22_box.pack_start(g22_inner_box, False, False, 0)
		
		###########  syncronize ################
		sync_box = gtk.HBox(True, 0)
		vbox.pack_start(sync_box, False, False, 0)

		self.tog_sync = gtk.CheckButton(label="Synchronize Colors")
		self.tog_sync.set_active(self.g_init[3])
		sync_box.pack_start(self.tog_sync, False, False, 0)
		self.tog_sync.connect("toggled", self.sync_tog)
		
		self.tog_init = gtk.CheckButton(label="Run output on system startup")
		self.tog_init.set_active(False)
		sync_box.pack_start(self.tog_init, False, False, 0)			
		self.tooltips.set_tip(self.tog_init, "This will attempt to run the gamma-modifying command when your system starts. Any changes to your INIT scripts would be on a per-user, not a system-wide basis.\n\nSee HELP for more information.")
		self.tog_init.connect("toggled", self.toggle_init)
		
		###########  scrollbars ################
		scroll_box = gtk.VBox(False, 2)
		red_box = gtk.HBox(False, 2)
		grn_box = gtk.HBox(False, 2)
		blu_box = gtk.HBox(False, 2)
		rul_box = gtk.HBox(False, 0)
		
		self.adj1 = gtk.Adjustment(self.g_init[0], 0.1, 10.0, 0.01, 0.2)
		self.adj2 = gtk.Adjustment(self.g_init[0], 0.1, 10.0, 0.01, 0.2)
		self.adj3 = gtk.Adjustment(self.g_init[0], 0.1, 10.0, 0.01, 0.2)
		
		lbl_rul = gtk.Label(" ")
		self.lbl_red = gtk.Label(str(self.g_init[0]))
		self.lbl_grn = gtk.Label(str(self.g_init[1
		]))
		self.lbl_blu = gtk.Label(str(self.g_init[2]))
		lbl_rul.set_width_chars(1)
		self.lbl_red.set_width_chars(4)
		self.lbl_grn.set_width_chars(4)
		self.lbl_blu.set_width_chars(4)
		self.lbl_red.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse("#CC0000"))
		self.lbl_grn.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse("#00FF00"))
		self.lbl_blu.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse("#0000FF"))
		self.red_scroll = gtk.HScrollbar(adjustment=self.adj1)
		self.grn_scroll = gtk.HScrollbar(adjustment=self.adj1)
		self.blu_scroll = gtk.HScrollbar(adjustment=self.adj1)
		self.red_scroll.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse("#FF6666"))
		self.red_scroll.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse("#990000"))
		self.grn_scroll.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse("#00FF00"))
		self.grn_scroll.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse("#009900"))
		self.blu_scroll.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse("#AAAAFF"))
		self.blu_scroll.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse("#000099"))
		rul_box.pack_start(lbl_rul, False, False, 12)
		rul_box.pack_start(rul_img, False, False, 0)
		red_box.pack_start(self.lbl_red, False, False, 8)
		red_box.pack_start(self.red_scroll, True, True, 0)
		grn_box.pack_start(self.lbl_grn, False, False, 8)
		grn_box.pack_start(self.grn_scroll, True, True, 0)
		blu_box.pack_start(self.lbl_blu, False, False, 8)
		blu_box.pack_start(self.blu_scroll, True, True, 0)
		scroll_box.pack_start(rul_box, False, False, 0)		
		scroll_box.pack_start(red_box, False, False, 0)
		scroll_box.pack_start(grn_box, False, False, 0)
		scroll_box.pack_start(blu_box, False, False, 0)
		vbox.pack_start(scroll_box, False, False, 0)
		
		self.txtCommand = gtk.Entry()
		self.txtCommand.set_text("Command output will appear here")
		self.txtCommand.modify_font(cmd_font)
		vbox.pack_start(self.txtCommand,True, True, 0)
		self.tooltips.set_tip(self.txtCommand, "\nThis is the command that adjusts the gamma on your system.\n\nYou can copy this to an appropriate location in your system init scripts [when you move the sliders, the comand is automatically put into a clipboard -- just leave GAMApage open until after you paste the command where you would like.] \n\nTo let GP do this for you, check the: RUN OUTPUT ON SYSTEM STARTUP checkbox that is located above the sliders.\n")
		self.txtCommand.set_editable(False)
		self.txtCommand.connect("changed", self.cmd_copy)
		
		but_box = gtk.HButtonBox()
		but_box.set_spacing(0)
		self.info_btn = gtk.Button("Help")
		self.restore_btn = gtk.Button("Restore")
		self.reset_btn = gtk.Button("Reset")
		self.cancel_btn = gtk.Button("Cancel")
		self.save_btn = gtk.Button("Exit")
		but_box.pack_start(self.info_btn, True, True, 0)
		but_box.pack_start(self.restore_btn, True, True, 0)
		but_box.pack_start(self.reset_btn, True, True, 0)
		but_box.pack_start(self.cancel_btn, True, True, 0)
		but_box.pack_start(self.save_btn, True, True, 0)
		self.tooltips.set_tip(self.info_btn, "Preparation, about, tips, troubleshooting, regarding icc profiles")
		self.tooltips.set_tip(self.restore_btn, "This will reset gamma to 1.0 for all colors and remove all files associated with GAMMApage.")
		self.tooltips.set_tip(self.reset_btn, "Return sliders to the positions they had when you opened GAMMApage.")
		self.tooltips.set_tip(self.cancel_btn, "Closes GAMMApage, making no changes from when it was opened. Any changes you made to the gamma will be reversed.")
		self.tooltips.set_tip(self.save_btn, "Closes program.\n\nAny changes you made to the gamma will be kept for the current X-session.\n\nIf \"Run output on system startup\"\nis checked,  GAMMApage will write file to user\'s init script which sets the gamma automatically after logging in.")
		
		self.restore_btn.connect("clicked", self.restore_all)
		self.reset_btn.connect("clicked", self.reset_sliders)
		self.info_btn.connect("clicked", self.help_window)
		vbox.pack_end(but_box,False,False, 0)
		self.adj1.connect("value_changed", self.val1_changed)
		self.adj2.connect("value_changed", self.val2_changed)
		self.adj3.connect("value_changed", self.val3_changed)
		
		self.saveid = self.save_btn.connect("clicked", self.exit_only)
		self.cancelid = self.cancel_btn.connect("clicked", self.cancel_all)

		self.window.show_all()
		
		# set safe shell/logon values
		self.shell_ok = False
		self.glogon = False
		self.window.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse("#999999"))	


	class help_window(gtk.Window):


		def delete_event(self, e=None):
			self.destroy()


		def __init__(self, evt=None):
			gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL)

			self.connect("destroy", self.delete_event)

        		self.set_title('GAMMApage Help')
			self.set_border_width(0)
			self.set_size_request(540, 420)
			self.set_position(gtk.WIN_POS_CENTER)
			
			wp = gtk.gdk.pixbuf_new_from_xpm_data(wp_xpm)
			wpt_img = gtk.Image()
			wpt_img.set_from_pixbuf(wp)
			
			bp = gtk.gdk.pixbuf_new_from_xpm_data(bp_xpm)
			bpt_img = gtk.Image()
			bpt_img.set_from_pixbuf(bp)

			box1 = gtk.VBox()
			self.add(box1)
			box1.show()

			box2 = gtk.VBox(spacing=4)
			box2.set_border_width(4)
			box1.pack_start(box2)
			box2.show()

			notebook = gtk.Notebook()
			notebook.set_tab_pos(gtk.POS_TOP)
			box2.pack_start(notebook)
			notebook.show()

			names = ['About', 'Preparation', 'Some Tips', 'Color Profiles', 'Troubleshooting', 'Run on startup']
			msg = self.mlist()

			for i in range(len(names)):
				buffer = names[i]
				sw=gtk.ScrolledWindow()
				sw.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC)
				sw.set_shadow_type(gtk.SHADOW_NONE)
				sw.show()
				############################################################################
				# add widgets to each frame here
				if i == 0:
					label = gtk.Label(msg[i])
					sw.add_with_viewport(label)
				if i == 1:
					label = gtk.Label(msg[i])
					pt_box = gtk.VBox(False, 0)
					sm_box = gtk.HBox(True, 0)
					
					sm_box.pack_start(bpt_img, False, False, 30)
					bpt_img.show()
					sm_box.pack_start(wpt_img, False, False, 0)
					wpt_img.show()
					
					pt_box.pack_start(sm_box, False, False, 30)
					sm_box.show()
					pt_box.pack_start(label, False, False, 0)
					pt_box.show()
					sw.add_with_viewport(pt_box)
				if i == 2:
					label = gtk.Label(msg[i])
					sw.add_with_viewport(label)
				if i == 3:
					label = gtk.Label(msg[i])
					sw.add_with_viewport(label)
				if i == 4:
					label = gtk.Label(msg[i])
					sw.add_with_viewport(label)
				if i == 5:
					label = gtk.Label(msg[i])
					sw.add_with_viewport(label)

				###########################################################################
				label.show()
				lbl = gtk.Label(buffer)
				lbl.set_padding(2, 2)
				notebook.append_page(sw, lbl)

			self.show()

		def mlist(self):
			msglist = [""]
			msg1 = """
GAMMApage\n\n(c) 2005-2006 by Paul Sherman\n
GAMMApage is a GAMMA-setting utility written in Python, 
using GTK and the pyGTK bindings. 

Please view the "Preparation" page before you begin tweaking your gamma.
The other help pages include some troubleshooting and tips.

Dependencies include:
    python >= 2.4
    GTK >= 2.6
    pyGTK >= 2.6
    Pango


2.2 gamma image courtesy of Norman Koren <www.normankoren.com>
Any questions/concerns regarding the program can be directed to me at:
<psherma1@rochester.rr.com>

My webite is located at <http://www.pcbypaul.com>"""

			msg2 = """
Before you start tinkering with the gamma settings you
should adjust the monitor manually, if it has any controls. 

1.] The color temperature, if possible, should be set to 6500k.

2.] Contrast should be set to 100%.

3.] Brightness -- Black and White points;
    should be adjusted so that you are able to discern 
    the four color squares shown at the top of this page. 

    Dark grey and black to the left. 
    White and light grey on the far right. 

    These are rather generous differences for black and white-point settings --
    so if you cannot adjust your monitor to see them all, even after further
    gamma correction.. it would be in your best interest to buy a new monitor.
	"""

			msg3 = """      
    I will repeat something from "Preparation" due ti its importance:

1]  DO NOT leave the monitor set at 9300k, if you can at all help it. 
     Monitors are often shipped on that setting and I know if you were
     accostomed to 9300k and you switch to 6500k, you will think the
     image is flat and yellow-ish.That impression will pass.

2]  Color calibration using ICC profiles is the way to go, but difficult 
     to impliment for home users on Linux because printer profiles are
     difficult to get for modest printers.

3]  Ambient light -- while calibrating or editing images, should be LOW. 
     No direct light on the screen or even reflective materials near the
     monitor. If possible, use a diffused or indirect light source that
     has a color temp of 6500K.

4]  The monitor screen should be SIGNIFICANTLY BRIGHTER than the 
     ambient light.

5]  Make sure your display is set to the highest number of colors - millions, 
     not thousands. This will lessen banding -- more common on LCD screens.

	"""

			msg4 = """
Then golden grail of color management...

but as I mentioned on the tips page, a lack of available printer 
profiles for common inkjets leave most of us out of the loop. But - 
for those with higher-end printers or lucky enough to ship out their 
print jobs to commercial printers, there is an Open-Source solution.

Little CMS (lcms) runs on Linux and is a color management engine used 
by many programs to generate and impliment profiling. Most notably 
(although difficult at times to track down) is "lprof." It is an
Open-Source profile generator for both monitors and scanners. It 
is dependent upon lcms (mentioned above) as well as the QT toolkit.

If interested, lcms is available from:
http://www.littlecms.com/

lprof is tougher to track down as the author has dropped maintenance of 
the application, for reasons I do not know --
You can find it temporarily one place or another, as I did. And since it is
Open-Source and has no home I will post it on my site as long as I can.
Look in the Linux section at:
http://www.pcbypaul.com
 -- with the GAMMApage links.

	"""
			msg5 = """
If there is a problem, it should be one of just a couple things.

1] Bash-usage. This one is fairly obvious. If you have csh or some
    (relatively) obscure shell -- I simply don't know how to account for it.
    If you are familiar enough to give me some help, perhaps I can accomodate.
    
2] Can't find your "startup file." GAMMApage uses one of your USER system
    startup scripts to make a call to a one-line executable file called 
    "gammapagerc" in your home directory. It is the only directory GP 
    will write to. If you are using a console login, GP will call the rc file
    from the user's .xinitrc. If not there already, GP will make a copy 
    of the /etc/X11/xinit/xinitrc (or the file it is symlinked to) and then 
    put the calling lines into that. The copy would be in your home directory. 
    NOTE: If you "restore Settings" GP will ask you if you wish to delete that 
    file, (if generate by GP to begin with.) If you made a mistake or were just
    being cautious, you can check that the /etc/X11... file does what you need 
    it to before deleting the .xinitrc in your home directory, or just delete any
    line in it that contains the word "GAMMApage."
    
3] If using a graphical login, GP will look in your home directory for:
        .bash_profile
	.bash_login
	.profile
	
	"""


			msg6 = """
If you mark the "Run command on Startup" checkbox, GP will:

1.) Make sure you are using a BASH shell
    (GP is limited to BASH init scripts to impliment startup calls to xgamma)
     
2.) Checks for graphical login startup scripts. Possibilities are:
        .bash_profile
	.bash_login
	.profile
    If login is not graphical, GP looks for:
   	~/.xinitrc 
    If not found tries to make a copy in your home folder of:
	/etc/X11/xinit/xinitrc  [NOTE - GP will NOT write to /etc]

3.) If none of the above can be used GP simply won't try to save anything.

4.) If startup file is useable, GP will put a call to ~/.gammapagerc in the file,
    called with a check to make sure the rc file is there and executable, so if 
    you delete it you won't get an error every time you try to start X.
    
5.) Gammapagerc simply runs the command GP displays in the textbox just above the 
    buttons in the application window. xgamma, or fglrx_xgamma for ATI users.
    
6.) GP's RESTORE button resets your gamma, and removes all additions/changes 
    it may have made to your system.
"""



			msglist.insert(0,msg1)
			msglist.remove("")
			msglist.insert(1,msg2)
			msglist.insert(2,msg3)
			msglist.insert(3,msg4)
			msglist.insert(4,msg5)
			msglist.insert(5,msg6)
			return msglist


					
def main():
	ShowGamma()
	gtk.main()
	
if __name__ == "__main__":
	main()
