Syntactic Confectionery Delight PerlMonks

### "Rubics Cube" game - part 2

by tos (Deacon)
 on Mar 04, 2008 at 18:04 UTC ( #671958=note: print w/replies, xml ) Need Help??

in reply to "Rubics Cube" game

```#---------------------------------------------------------------------
package main;
#---------------------------------------------------------------------

sub init { # {{{1

\$zug = "";

undef \$mm;
\$mm = new matob(1);

undef \$qb;
\$qb = new qb(\$qbCubes, 1);
\$qb->updSlices();
\$qb->{actAxis} = 'y';

print \$qb->{cube},"\n";

my \$font =
'-misc-fixed-medium-r-normal-*-*-150-*-*-c-*-iso8859-9
+';
\$font = '-misc-fixed-medium-r-*-*-13-*-*-*-m-*-*-*';
my \$font2 = '-*-console-medium-*-*-*-16-*-*-*-*-*-*-*'
+;
\$font2 = '-*-courier-medium-r-*-*-14-*-*-*-*-*-*-*';

my \$al = 26;
my \$xAxis = new line3d(    new point3d(-\$al, 0, 0),
new point3d(\$al, 0, 0)
+,
1, "gray20", "xAxis");

my \$yAxis = new line3d(    new point3d(0, -\$al, 0),
new point3d(0, \$al, 0)
+,
1, \$rgb{DarkRed}, "yAx
+is");

my \$zAxis = new line3d(    new point3d(0, 0, -\$al),
new point3d(0, 0, \$al)
+,
1, "blue", "zAxis");

my \$horiz = new vec3d(    new point3d(1, 0, 0),
1, "green", "vektor");

my \$vertik = new vec3d(new point3d(0, 1, 0),
1, "orange", "vektor")
+;

my \$cvac = new vec3d(\$qb->{cube}[\$actCube]{centr},
1, "white", "cvac");

# all vars should be kept in a common ds

{
cvac                => \$cvac,
freezeCvac         => 0,
font                => [\$font, \$font2]
+,
horiz                => \$horiz,
old_fill         => '',
PFLAG                => 1,
plotCS            => 0,
plotTri            => 0,
triX                => 0,
triY                => 0,
triZ                => 0,
showCvac         => 1,
shuffleSteps    => 1,
vertik            => \$vertik,
xAxis                => \$xAxis,
xb1down             => 0,
xb3down             => 0,
yAxis                => \$yAxis,
yb1down             => 0,
yb3down             => 0,
zAxis                => \$zAxis,
}
} # init }}}1

my \$V = init();

sub plotAllVectors { #{{{1

\$V->{showCvac} && \$V->{cvac}->plot;
\$V->{horiz}->plot;
\$V->{vertik}->plot;
#\$c20_centr->plot;

}; #}}}1

sub plotAll { #{{{1

#print "plotte mal wieder all\n";;
\$qb->plotAllCubes;
plotCS() if \$V->{plotCS};
plotTri() if \$V->{plotTri};
# plotAllVectors;

} # plotAll #}}}1

sub plotCS { #{{{1

\$V->{xAxis}->plot; \$V->{yAxis}->plot; \$V->{zAxis}->plot;

} # plotCS #}}}1

sub remCS { #{{{1

\$V->{xAxis}->clear; \$V->{yAxis}->clear; \$V->{zAxis}->clear;

} # remCS #}}}1

sub plotTri { #{{{1

\$V->{triX}->plot; \$V->{triY}->plot; \$V->{triZ}->plot;

} # plotCS #}}}1

sub remTri { #{{{1

\$V->{triX}->clear; \$V->{triY}->clear; \$V->{triZ}->clear;

} # remCS #}}}1

sub fileDialog { #{{{1

my \$w = shift;
my \$operation = shift;
my \$file;
#   Type names        Extension(s)    Mac File Type(s)
#
#---------------------------------------------------------
my @types = (
["qb3-Snapshot files",     '.qsn'],
["qb3-Moves files",         '.qmv'],
["qb3 files (deprecated)",    '.qb3'],
#["All files",        '*']
);
if (\$operation eq 'open') {
\$file = \$w->getOpenFile(-filetypes => \@types);
} else {
\$file = \$w->getSaveFile(-filetypes => \@types,
-initialfile => 'noname',
#-defaultextension => '.qb3');
);
}

\$file;
#if (defined \$file and \$file ne '') {
#    \$ent->delete(0, 'end');
#    \$ent->insert(0, \$file);
#    \$ent->xview('end');
#}
} # fileDialog }}}1

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Widgets and bindings
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

my \$top = MainWindow->new();
\$top->resizable(1, 1);

->Frame(
-relief => 'raise',
-borderwidth  => 2)
->pack(-side => 'top', -fill => 'x');
#}}}2

->pack(-side => 'left', -padx => 2);

-accelerator => 'Ctrl-n',
-underline   => 0,
-command => \&newGame,
);
\$top->bind('<Control-n>' => \&newGame);

-accelerator => 'Ctrl-l',
-underline   => 0,
);

-accelerator => 'Ctrl+s',
-underline   => 0,
-command => \&save,
);
-accelerator => 'q',
-underline   => 0,
-command     => \&lebWohl,
); #}}}2

#             reference. It doesn't matter whether this reference
#             is delivered by list-reference or via sub.

[
['command', 'MoveInput', -command => \&moveInp],
['command', 'checkSlices', -command => \&checkSlices],
];

#    [
#    ],
#}

->pack(-side => 'left', -padx => 2);

#                    ->pack(-side => 'left', -padx => 2);
#
# the Slick, Sophisticated, New-Fashioned Way,
#                                 -> 12.2.2. masteringPerlTk\ch12_02.h
+tm
#

[
['command', 'default', -command =>
sub {
foreach (keys %cD) {
(\$_, -background => \$cD{\$_}[0]);
%cL = %cD;
plotAll();
}
}
],

[
map ['command', \$_, -background => \$rgb{\$_},
-command =>
[    sub {
print "\\$_: \$_\n";
# nachdem das colMenu ein Stufe tiefer
+ ge-
# rutscht ist, kann ich den index des
+ersten
# col-Menus nicht mehr ermitteln. ?!
# bekomme nur 'none'. Lösung vermutlic
+h dann,
# wenn ich die folgende Zeile tatsächl
+ich ver-
# standen und anschließend modifiziert
+ habe.
# don't give up ...
# bis v0.52 funktioniert colMenu; alle
+rdings
+e");
my \$i2 = shift @_;
print "\$i1/\$i2\n";

my \$i3 = index ("yelredoragreblupin",
+\$i2)/3;
print "\\$i3: \$i3\n";
my \$i4 = \$i1 - 1;
\$cL{"r\$i4"} = \$cRef->[\$i3];

-background => \$rgb{\$i
+2});
plotAll();
}, \$_
],
], qw/yel red ora gre blu pin/,
],
], qw/r1 r2 r3 r4 r5 r6/,
],

sub moveInp { #{{{3

if (! Exists(\$tl)) {
\$tl = \$top->Toplevel( );
\$tl->title("MoveInput");
my \$text = \$tl->Scrolled('Text',
-width => 25,
-height => 10,
-scrollbars => 'w')->pack(qw/    -fill y
-e
+xpand 1/);

\$tl->Button(-text => "Clear", -command =>
sub {
\$text->delete("1.0", "end");
}
)->pack(-side => 'left');

\$tl->Button(-text => "Commit", -command =>
sub {
my @z =  split /\n/, \$text->get("1.0", "end");

foreach (@z) {
/([xyz]\d)([+-]?\d)/
? do     {
my \$z = "\$1\$2";
print "tue \$z\n";
\$qb->move(\$z);
}
: print "invalid Move\n";
};
}
)->pack(-side => 'left');

\$tl->Button(-text => "HighLightCubes", -command =>
sub {
my @z =  split /\n/, \$text->get("1.0", "end");

foreach (@z) {
/(\d\d)/ && print \$1,"\n";
\$qb->{cube}[\$1]->{palette} = 4;
};
plotAll();
}
)->pack(-side => 'left');

\$tl->Button(-text => "Close", -command =>
sub {
\$tl->withdraw
}
)->pack(-side => 'left');

} else {
\$tl->deiconify( );
\$tl->raise( );
}

} # end moveInp #}}}3

sub checkSlices { #{{{3

if (! Exists(\$tlcs)) {
\$tlcs = \$top->Toplevel( );
\$tlcs->title("checkSlices");

# setup the default value we would like
my \$rb_value = "gray";
\$tlcs->configure(-background => \$rb_value);

# create the Radiobuttons that will let us change it
foreach (qw(x y z)) {
my \$fr = \$tlcs->Frame(
-borderwidth => 2,
#-relief => 'ridge',
)->pack(qw/-side left/);

for (my \$i = 1; \$i <= \$qbCubes; \$i++) {
-text => \$_ . \$i,
-value => \$_ . \$i,
-variable => \\$rb_value,
-command => \&set_bg)->pack(-side => 'top');
}
}

sub set_bg {
foreach (0 .. \$qbCubes ** 3 - 1) {
\$qb->{cube}[\$_]->{palette} = 0;
};
plotAll();
#print "\\$rb_value: \$rb_value\n";
foreach (keys %{\$qb->{slice}{\$rb_value}{members}}) {
\$qb->{cube}[\$_]->{palette} = 1;
};
plotAll();
}

\$tlcs->Button(-text => "Clear", -command =>
sub {
foreach (0 .. \$qbCubes ** 3 - 1) {
\$qb->{cube}[\$_]->{palette} = 0;
};
plotAll();
}
)->pack(-fill => 'y', -expand => 1, -side => 'top');

\$tlcs->Button(-text => "Close", -command =>
sub {
\$tlcs->withdraw
}
)->pack(-side => 'bottom');

} else {
\$tlcs->deiconify( );
\$tlcs->raise( );
}

} # end moveInp #}}}3

# }}}2

->pack(-side => 'left', -padx => 2);

\$mOptions->separator;

-underline => 0,

foreach (qw/2 3 4 5/) {
-label    => \$_,
-variable => \\$qbCubes,
);
}

\$mOptions->checkbutton(    -label    => 'show cvac',
-variable => \\$V->{showCvac});
\$mOptions->checkbutton(    -label    => 'freeze cvac',
-variable => \\$V->{freezeCvac});
\$mOptions->separator;

-underline => 0,
-variable => \\$V->{shuffleSteps});
-variable => \\$V->{shuffleSteps});
-variable => \\$V->{shuffleSteps});
-variable => \\$V->{shuffleSteps});
-variable => \\$V->{shuffleSteps});
# }}}2

->pack(-side => 'left', -padx => 2);

-accelerator => 'Meta+H',
-underline   => 0,
-command     => sub {print "hilf dir selbst da
+nn \
hilft
+dir gott...\n"}
);

sub mbox {

my \$mbox = \$top->DialogBox(
-buttons => ["ok"],
);

my \$fr = \$mbox->add('Frame',     -borderwidth => 2,
-relief => 'ridge')
->pack(qw/-side left/);

\$fr->Label(-image => \$mbox->Pixmap(    -data => &greyCubeLogo))
->pack(qw/-side top/);

-text => " Version: \$VERSION\n\n"
. "Perl: \$]\n"
. "Tk  : \$Tk::VERSION",
-relief => "groove",
)->pack(-side => 'left');

\$mbox->add('Label', -image => \$top->Pixmap(-data => &ptk))
->pack(qw/-side top/);
\$mbox->add('Label', -image => \$top->Pixmap(-data => &cwVim))
->pack(qw/-side top/);
\$mbox->add('Label', -image => \$top->Pixmap(-data => &wilbur))
->pack(qw/-side top/);
\$mbox->add('Label', -image => \$top->Pixmap(-data => &tos),
-relief => "groove",
)->pack(qw/-side top/);
-text => " made by tos",
-relief => "groove",
)->pack(-side => 'top');

\$mbox->Show();

}; #}}}2

sub show_msg { #{{{1

my(\$iconvar, \$message, \$movLBox) = @_;

my \$button = \$top->messageBox(

-icon => \$iconvar,
-type => "OK",
-title => 'Message',
-message => \$message

);
#\$saveIt && \$qb->save("errDump", \$movLBox);
exit;

} # show_msg }}}1

-accelerator => 'Meta+A',
-underline   => 0,
-command => \&mbox,
); # }}}2

# dashboard {{{1

my \$mainFrame = \$top
->Frame(-bd => "2")
->pack(-side => 'top', -fill => 'x');

my \$rf = \$mainFrame
->Frame(    -bd => "2",
#-cursor => 'rtl_logo',
#-cursor => 'question_arrow',
#-cursor => 'draped_box',
-cursor => 'plus',
)
->pack(-side => 'right', -fill => 'y');

my \$tf = \$mainFrame
->Frame()
->pack(-side => 'top', -fill => 'both');

my \$cubAnz1 = \$tf
->Label(    -text => "",
#-relief => "groove",
-width => 30, -foreground => \$rgb{Dark
+Green},
-height => 4,
-font => \$V->{font}[0])
->pack(-fill => 'x', -expand => 1, -side => 'left'
+);

my \$bf = \$mainFrame
->Frame()
->pack(-side => 'bottom', -fill => 'x');

my \$cubAnz2 = \$bf
->Label(    -text => "",
#-relief => "groove",
-foreground => \$rgb{DarkGreen},
-height => 4,
-font => \$V->{font}[0])
->pack(-fill => 'x', -expand => 1, -side => 'left'
+);

my \$lf = \$mainFrame
->Frame(
#-relief => "groove",
-cursor => 'plus',
-bd => "2")
->pack(-side => 'left', -fill => 'y');

my \$tlf = \$lf
->Frame(
#-relief => "groove",
-bd => "2")
->pack(-side => 'top', -fill => 'x');

my \$blf = \$lf
->Frame(
#-relief => "groove",
-bd => "2")
->pack(-side => 'bottom', -fill => 'x');

\$top->Icon(-image => \$top->Pixmap(-data => &icon));

my \$hMovLBox = \$tlf
->Label(    -text => "Moves", -relief => "flat",
-foreground => "gray20",
-cursor => 'pirate',
#-width => 10,
-font => \$V->{font}[0])
->pack(-side => 'top', -fill => 'x');

my \$movLBox = \$tlf
->Scrolled(qw/Listbox -width 16 -height 7
-setgrid 1 -scrollbars w
-bd 2/,
-font => \$V->{font}[1])
->pack();
#-bg LemonChiffon2 /,

my \$canvFram = \$mainFrame
->Frame(
#-relief => "groove",
-width => 600,
-height => 270,
-bd => "2")
->pack(-side => 'left');

\$canvas = \$canvFram
->Canvas(-width     => \$screenWidth,
-height     => \$screenHeight,
#-relief     => "ridge",
-cursor     => 'crosshair')
->pack(-side => 'left', -fill => 'both');

my \$detInf = \$rf
->Frame(
)
->pack(-side => 'right', -fill => 'both');

my \$statLine = \$top
->Frame(    -relief => "raise", -bd => "2", -heigh
+t => 8)
->pack(-side => 'top', -fill => 'both');

my \$statAnz = \$top
->Frame(    -relief => "sunken", -bd => "2",
-foreground => \$rgb{DarkGreen})
->pack(-side => 'top', -fill => 'x');

my \$lvFrame = \$detInf
->Frame(    -relief => "flat", -bd => "2")
->pack(-side => 'top', -fill => 'x');

my \$wvFrame = \$detInf
->Frame(    -relief => "flat", -bd => "2")
->pack(-side => 'top', -fill => 'x');

my \$dFrame = \$detInf
->Frame(    -relief => "flat", -bd => "2")
->pack(-side => 'top', -fill => 'x');

my \$oFrame = \$detInf
->Frame(    -relief => "flat", -bd => "2")
->pack(-side => 'top', -fill => 'x');

my \$sVFrame = \$detInf
->Frame(    -relief => "flat", -bd => "2")
->pack(-side => 'top', -fill => 'x');

my \$rfDeckl = \$detInf
->Label(    -relief => "flat",
-width => "50",
-height => "40",
-text => "")
->place(-x => 0, -y => 0);

my \$tlfDeckl = \$tlf
->Label(    -relief => "flat",
-width => "50",
-height => "20",
-text => "")
->place(-x => 0, -y => 0);

my \$blfDeckl = \$blf
->Label(    -relief => "flat",
-width => "50",
-height => "20",
-text => "")
->place(-x => 0, -y => 0);

my \$lvLab = \$lvFrame
->Label(    -text => "localCoords",
-relief => "flat",
-cursor => 'pirate',
-foreground => "gray20",
-width => 20,
-font => \$V->{font}[0])
->pack(-side => 'top');

my \$lxAnz = \$lvFrame
->Label(    -text => "", -relief => "sunken",
-foreground => "gray20",
-width => 10,
-font => \$V->{font}[0])
->pack(-side => 'top');

my \$lyAnz = \$lvFrame
->Label(    -text => "", -relief => "sunken",
-foreground => \$rgb{DarkRed},
-width => 10,
-font => \$V->{font}[0])
->pack(-side => 'top');

my \$lzAnz = \$lvFrame
->Label(    -text => "", -relief => "sunken",
-foreground => \$rgb{DarkBlue},
-width => 10,
-font => \$V->{font}[0])
->pack(-side => 'top');

my \$cubAnz = \$statLine
->Label(    -text => "", -relief => "sunken",
-width => 3, -foreground => \$rgb{DarkG
+reen},
-font => \$V->{font}[0])
->pack(-side => 'left');

my \$rectAnz = \$statLine
->Label(    -text => "", -relief => "sunken",
-width => 2, -foreground => "blue",
-font => \$V->{font}[0])
->pack(-side => 'left');

my \$sliceAnz = \$statLine
->Label(    -text => "", -relief => "sunken",
-width => 5, -foreground => "darkorchi
+d",
-foreground => "purple",
-font => \$V->{font}[0])
->pack(-side => 'left');

my \$vecAnz = \$statLine
->Label(    -text => "", -relief => "sunken",
-width => 4,
-foreground => "darkorchid",
-font => \$V->{font}[0])
->pack(-side => 'left');

my \$statFram = \$statLine
->Frame(    -relief => "groove", -bd => "1",
#-height => 3)
)
->pack(-side => 'left', -fill => "x");

\$statFram->bind('<1>' =>
sub {
print "bye, bye Sir!\n";
exit;
});

my \$shuffle = \$statFram
->Button(-text => "shuffle",
-height => 0.3,
-command =>
sub {
keys %{\$qb->{constraint}} && r
+eturn;
\$qb->shuffle(
\$V->{shuff
+leSteps},
\$movLBox
);
},
-font => \$V->{font}[0])
->pack(-side => 'left');

my \$leave = \$statFram
->Label(    -text => "",
-width => 40,
-cursor => 'pirate',
-font => \$V->{font}[0])
->pack(-side => 'left', -fill => 'x');

my \$yKoor = \$statLine
->Label(    -text => "", -relief => "sunken",
-width => 3,
-font => \$V->{font}[0])
->pack(-side => 'right');

my \$xKoor = \$statLine
->Label(    -text => "", -relief => "sunken",
-width => 3,
-font => \$V->{font}[0])
->pack(-side => 'right');

my \$lwLab = \$wvFrame
->Label(    -text => "worldCoords",
-relief => "flat",
-foreground => "gray20",
-width => 12,
-font => \$V->{font}[0])
->pack(-side => 'top');

my \$xKoor3d = \$wvFrame
->Label(    -text => "", -relief => "sunken",
-width => 10, -foreground => "gray20",
+
-font => \$V->{font}[0])
->pack(-side => 'top');

my \$yKoor3d = \$wvFrame
->Label(    -text => "", -relief => "sunken",
-width => 10, -foreground => \$rgb{Dark
+Red},
-font => \$V->{font}[0])
->pack(-side => 'top');

my \$zKoor3d = \$wvFrame
->Label(    -text => "", -relief => "sunken",
-width => 10, -foreground => \$rgb{Dark
+Blue},
-font => \$V->{font}[0])
->pack(-side => 'top');

my \$dLab = \$dFrame
->Label(    -text => "distance",
-relief => "flat",
-foreground => "gray20",
-width => 12,
-font => \$V->{font}[0])
->pack(-side => 'top');

my \$distLab = \$dFrame
->Label(    -text => "", -foreground => "red",
-relief => "sunken", -width => 10,
-font => \$V->{font}[0])
->pack(-side => 'top');

my \$oLab = \$oFrame
->Label(    -text => "query",
-relief => "flat",
-foreground => "gray20",
-width => 12,
-font => \$V->{font}[0])
->pack(-side => 'top');

my \$rSentry = \$oFrame
->Entry(-relief => "sunken", -width => 10,
-textvariable => \\$qb->{query},
-validate => 'key',
-font => \$V->{font}[0])
->pack(-side => 'top');

my \$sVLab = \$sVFrame
->Label(    -text => "selVect",
-relief => "flat",
-foreground => "gray20",
-width => 12,
-font => \$V->{font}[0])
->pack(-side => 'top');

my \$sVxAnz = \$sVFrame
->Label(    -text => "", -relief => "sunken",
-foreground => "gray20",
-width => 10,
-font => \$V->{font}[0])
->pack(-side => 'top');

my \$sVyAnz = \$sVFrame
->Label(    -text => "", -relief => "sunken",
-foreground => \$rgb{DarkRed},
-width => 10,
-font => \$V->{font}[0])
->pack(-side => 'top');

my \$sVzAnz = \$sVFrame
->Label(    -text => "", -relief => "sunken",
-foreground => \$rgb{DarkBlue},
-width => 10,
-font => \$V->{font}[0])
->pack(-side => 'top');

my \$sVnAnz = \$sVFrame
->Label(    -text => "", -relief => "sunken",
-foreground => "black",
-width => 10,
-font => \$V->{font}[0])
->pack(-side => 'top');

sub lebWohl {
\$top->iconify();
#\$saveIt && \$qb->save("noname", \$movLBox);
print "bye, bye Sir!\n";
exit;
}; # lebWohl

-text   => 'File',
-relief => 'raised',
);
#\$file->pack(qw/-side left/);

[qw/command ~color/],
'',
[qw/command ~position/],
'',
[qw/command ~properties/],
'',
[qw/command ~hide/],
'',
[qw/command ~Quit/, -command => \&exit],
]);
#print "\\$hiddenM: \$hiddenM\n";

\$canvas->configure(-cursor => 'watch');
my \$file = shift || fileDialog(\$top, "open");
\$file || return;
#print "\\$file: \$file\n";
my (\$name,\$path,\$ext) = fileparse(\$file, '\..*');

#print "\\$name: \$name\n";
#print "\\$path: \$path\n";
#print "\\$ext: \$ext\n";

\$canvas->delete('all');

#local \$/ = "";

CASE: {
(\$ext eq ".qsn") && do
{
my \$ds;
open I, \$file;
while (<I>) {
m/\'id\'\s+\=\>\s+\d+/ && next;
\$ds .= \$_;
};
close I;
eval \$ds;
};

(\$ext eq ".qmv") && do
{
open I, \$file;
while (<I>) {
#print;
chomp;
\$movLBox->inser
+t('end', \$_);
/([xyz]\d-?\d)/;
my \$haltMal = \$1;
#print "will \$halt
+Mal\n";
\$qb->move(\$haltMal
+);
}
close I;
};
};

open (I, \$path . \$name . ".qpo");
my \$ds = (<I>);
print \$ds;
close I;
eval \$ds;

print "done\n";
plotAll();
print "\\$qb: \$qb\n";
\$canvas->configure(-cursor => 'crosshair');

sub save { # {{{3
my \$f = fileDialog(\$top, "save");
\$qb->save(\$f, \$movLBox) if defined \$f;
}; # save }}}3

sub newGame { # {{{3
\$canvas->delete('all');
\$movLBox->delete(0,'end');
\$V = init();
\$mm->rotate(PI/-6, PI/6, 0.0);
plotAll();
}; #}}}3

# dashboard }}}1

# bindings # {{{1

my \$labDefColor = \$statLine->cget('-background');
my \$highLightBgColor = "wheat2";
#\$lyAnz->configure(-background  => \$highLightBgColor);

sub updDashBoard { # {{{2

{
(\$qb->{actAxis} eq "x") &&
do {
\$lyAnz->configure(-background  => \$labDefColor);
\$lzAnz->configure(-background  => \$labDefColor);
\$lxAnz->configure(-background  => \$highLightBgColor);
};
(\$qb->{actAxis} eq "y") &&
do {
\$lxAnz->configure(-background  => \$labDefColor);
\$lzAnz->configure(-background  => \$labDefColor);
\$lyAnz->configure(-background  => \$highLightBgColor);
};
(\$qb->{actAxis} eq "z") &&
do {
\$lxAnz->configure(-background  => \$labDefColor);
\$lyAnz->configure(-background  => \$labDefColor);
\$lzAnz->configure(-background  => \$highLightBgColor);
};
}

} # updDashBoard # }}}2

#\$top->bind('<A>' =>  # {{{2
#            # uneingerastete Slice-Stellung, deren Möglichkeit ich au
+s
#            # effekthascherischen Erwägungen beibehalten will, bringt
+
#            # leider Mehraufwand mit sich. (eigentlich logisch)
#            # Nun der Versuch das in, auch noch nach Monaten verständ
+-                 # liche Worte zu fassen. Also:
#
#            # Definition: "gerastet" meint, daß die Kanten aller Cube
+s
#            #                     eine Slices parallel zu den jeweils
+ korres-
#            #                    pondierenden Koordinatenachsen stehe
+n.
#            #                    Zu Spielbegin sind alle Slices geras
+tet.
#            #
#
#            # Definition: "engaged" [(ein)gerastet] means that all cu
+be-
#            #                  edges of a slice are parallel with the
+ parti-
#            #                   cular coordinate-axises. At the begin
+ning of
#            #                  a game all slices are engaged.
#            #
#
#            # - Doppelklick auf gerasteten Slice führt zu Achsen-
#            #   wechsel. So solls auch sein. Ist der Slice nicht ge-
#            #   rastet, so findet kein Achsenwechsel statt. Es können
#            #   jetzt nur Slices gedreht werden, die senkrecht auf
#            #   der gleichen Achse stehen. (Schaschlikspieß).
#
#            # - Doubleclick on engaged slice leads to change of rota-
#            #   tionaxis. That's the way it has to be. If the slice i
+s
#            #   not engaged there will be no change of axis. Only sli
+ces
#            #   then can be rotated which are vertical to the same ax
+is.
#            #   Think of a skewer.
#
#            # - erst wenn alle Slices in der Flucht liegen UND gerast
+et
#            #   sind, kann wieder Achsenwechsel stattfinden.
#
#            # - not until all slices lay in straight line AND are eng
+a-
#            #   ged change of axis can be done.
#
#            # - sind alle Slices gefluchtet aber nicht gerastet, steh
+en
#            #   sie gemeinsam schief im KS. Um wieder in alle Richtun
+gen
#            #   beweglich zu sein, muß jetzt erst wieder Orthogonalit
+ät
#            #   zwischen Slices und KS hergestellt werden.
#
#            # - if all slices are in straight line but not engaged th
+ey
#            #   have a common crooked position. To make them mavable
+to
#            #   all directions there has to be at first an orthogonal
#            #   (relative) position between slices and coordinatesyst
+em.
#
#            # die folgende Subroutine soll ausgehend von einem repräs
+en-
#            # tativen Slice alle drei gemeinsam zurück in einen geras
+te-
#            # ten Zustand drehen.
#
#            # the following subroutine ...
#
#            sub {
#                print "<A>\n";
#                # adjust (make orthogonal) slices
#                # relativ to coorSystem
#
#                my \$slice = \$qb->{slice}{gripped};
#                print "\\$slice: \$slice\n";
#                \$slice =~ /^(sl[xyz])/;
#                my \$slPrfx = \$1;
#
#                my \$steps = \$qb->{rot}{\$slice};
#                my \$dir = \$steps / abs(\$steps);
#                \$steps = abs(\$steps) % \$rotSiSteps;
#                my \$diff = \$rotSiSteps - \$steps;
#                if (\$diff < \$steps) {
#                                                \$steps = \$diff;
#                                                \$dir = -\$dir;
#                };
#
#                print "\\$steps: \$steps\n";
#                print "\\$dir: \$dir\n";
#
#                \$qb->{slice}{gripped} = '';
#
#                for (my \$i = 1; \$i <= \$qbCubes; \$i++) {
#                #for ("-10", "  0", " 10") {
#                    my \$slice = \$slPrfx . \$i;
#                    print "\\$slice: \$slice\n";
#                    \$qb->detSlViaNam(\$canvas, \$slice);
#                    \$qb->oneSliceRotStep(\$steps, -\$dir);
#                    \$qb->corr;
#                    \$qb->{rot}{\$slice} = 0;
#                }
#
#            }); # }}}2

\$top->bind('<b>' =>  # {{{2
sub {
print "<b>\n";
\$qb->{shuffleBreak}++;
}); # }}}2

\$top->bind('<Control-c>' => \&lebWohl);

\$top->bind('<c>' =>  # {{{2
sub {
print "Cubes ", \$qb->check ? "bad" : "OK", "\n";

#print "\\$qb->{constraint}\n";
#print Dumper \$qb->{constraint};

foreach (qw(X Y Z)) {
my \$tr = "tri\$_";
my \$ax = lc(\$_) . "Axis";

print "\n\$tr-eVec: \t(";
print "\$_\t" for @{\$V->{\$tr}->eVec};
print ")\t";
print "\n\$ax-eVec: \t(";
print "\$_\t" for @{\$V->{\$ax}->eVec};
print ")\n";
print matob::vecsPhi(
\$V->{\$tr}->eVec,
\$V->{\$ax}->eVec
), "\n";
}

}); # }}}2

\$top->bind('<C>' =>  # {{{2
sub {
my \$initialColor = "gray";
\$top->chooseColor(-title => "Choose a color", -ini
+tialcolor => \$initialColor);

}); # }}}2

# <d> # {{{2
{my \$x = 50;
\$top->bind('<d>' =>
sub {
\$x = (\$x == 50) ? 0 : 50;
\$rfDeckl->configure(-width => \$x);
\$tlfDeckl->configure(-width => \$x);
\$blfDeckl->configure(-width => \$x);

});
}; # }}}2

\$top->bind('<D>' => # {{{2
#\$top->bind('<D>' => [\&autoRot, 2]);
sub {
print "_"x25, "slice-Dump-Anf", "_"x25,"\n";
print "slices: ", Dumper (\$qb->{slice}), "\n";
print "="x25, "slice-Dump-End", "="x25,"\n";
}); # }}}2

\$top->bind('<g>' =>  # {{{2
sub {
print "\\$qb->grippedS: ",
\$qb->{slice}{gripped}{name}, "\n";
}); # }}}2

\$top->bind('<h>' =>  # {{{2
sub {
print "\\$highId: \$highId\n";
}); # }}}2

\$top->bind('<i>' =>  # {{{2
sub {
\$iColrFlag = \$iColrFlag ? 0 : 1;
plotAll();
}); # }}}2

\$top->bind('<k>' =>  # {{{2
sub {
\$V->{plotCS} = \$V->{plotCS} ? do {remCS; 0} : plotCS;
}); # }}}2

\$top->bind('<l>' =>  # {{{2
sub {

print "\\$mm: \$mm\n";
\$mm->rotate( \$qb->{rS}, 0.0, 0.0)
if (\$qb->{actAxis} eq "x");

\$mm->rotate( 0.0, \$qb->{rS}, 0.0)
if (\$qb->{actAxis} eq "y");

\$mm->rotate( 0.0, 0.0, \$qb->{rS})
if (\$qb->{actAxis} eq "z");

plotAll;

}); # }}}2

\$top->bind('<Control-l>' =>  # {{{2
sub {
}); # }}}2

\$top->bind('<m>' =>  # {{{2
sub {
#print Data::Dumper->Dump([\$mm],['\$mm']);

print "\\$mm:\n";
for (my \$z=0; \$z<4; \$z++) {
for (my \$s=0; \$s<4; \$s++) {
printf "%+0.2f ", \$mm->[\$z][\$s];
}
print "\n";
}

my \$im = invMat(\$mm);

print "\\$inv:\n";
for (my \$z=0; \$z<4; \$z++) {
for (my \$s=0; \$s<4; \$s++) {
printf "%+0.2f ", \$im->[\$z][\$s];
}
print "\n";
}

my (\$probe, \$dummy) = ([]);
\$probe = matMult(\$dummy,\$mm,\$im);

print "\\$probe\n";
for (my \$z=0; \$z<4; \$z++) {
for (my \$s=0; \$s<4; \$s++) {
printf "%+0.2f ", \$probe->[\$z][\$s];
}
print "\n";
}
}); # }}}2

\$top->bind('<M>' =>  # {{{2
sub {
{
\$mm->freeRot(\$V->{horiz}, -\$qb->{rS});
}

plotAll;

}); # }}}2

\$top->bind('<p>' =>  # {{{2
sub {
#print "<p> tut nix\n";
print "\\$actCube: \$actCube\n";

}); # }}}2

\$top->bind('<P>' =>  # {{{2
sub {
{
\$mm->freeRot(\$V->{horiz}, \$qb->{rS});
}

plotAll;

}); # }}}2

\$top->bind('<Control-p>' =>  # {{{2
sub {
print "CTRL-p\n";
foreach (\$V->{xAxis}, \$V->{yAxis}, \$V->{zAxis}) {
}

}); # }}}2

\$top->bind('<q>' => \&lebWohl);

\$top->bind('<r>' =>  # {{{2
sub {

\$mm->rotate(-\$qb->{rS}, 0.0, 0.0)
if (\$qb->{actAxis} eq "x");

\$mm->rotate( 0.0,-\$qb->{rS}, 0.0)
if (\$qb->{actAxis} eq "y");

\$mm->rotate( 0.0, 0.0,-\$qb->{rS})
if (\$qb->{actAxis} eq "z");

plotAll;

}); # }}}2

\$top->bind('<S>' =>  # {{{2
sub {
keys %{\$qb->{constraint}} && return;
\$qb->shuffle(\$V->{shuffleSteps}, \$movLBox);
}); # }}}2

\$top->bind('<s>' =>  # {{{2
sub {
\$qb->{cube}[\$actCube]->showAttr;
}); # }}}2

\$top->bind('<Control-s>' =>  # {{{2
sub {
save();
}); # }}}2

\$top->bind('<t>' =>  # {{{2
sub {
print "matob::dotProd(\\$xAxis, \\$yAxis): ",
matob::dotProd(\$V->{xAxis}, \$V->{yAxis}), "\n"
+;
#\$V->{horiz}->showAttr;
}); # }}}2

\$top->bind('<T>' =>  # {{{2
sub {
print "\$actCube\n";
#rp4rp3
\$V->{triX} = new line3d(\$qb->{cube}[\$actCube]{r2}{p4},
\$qb->{cube}[\$actCube]{
+r2}{p3},
1, "white", "triX");
#rp4rp1
\$V->{triY} = new line3d(\$qb->{cube}[\$actCube]{r2}{p4},
\$qb->{cube}[\$actCube]{
+r2}{p1},
1, "#42ff00", "triY");

#rp4gp4
\$V->{triZ} = new line3d(\$qb->{cube}[\$actCube]{r2}{p4},
\$qb->{cube}[\$actCube]{
+r4}{p1},
1, "cyan", "triZ");
\$V->{plotTri} = \$V->{plotTri} ? do {remTri; 0} : plotT
+ri;

}); # }}}2

\$top->bind('<u>' =>  # {{{2
sub {
return unless my \$rZug = \$movLBox->get('end');

\$qb->undoMove(\$rZug);
\$movLBox->delete('end');
\$movLBox->see('end');
}); # }}}2

\$top->bind('<v>' =>  # {{{2
sub {

}); # }}}2

\$top->bind('<V>' =>  # {{{2
sub {
print Data::Dumper->Dump([%\$V]);
}); # }}}2

\$top->bind('<X>' =>  # {{{2
sub {
print Data::Dumper->Dump([%cL]);
}); # }}}2

\$top->bind('<w>' =>  # {{{2
sub {
\$qb->showAttr;
}); # }}}2

\$top->bind('<x>' =>  # {{{2
sub {
\$qb->{actAxis} = "x";
updDashBoard;
}); # }}}2

\$top->bind('<y>' =>  # {{{2
sub {
\$qb->{actAxis} = "y";
updDashBoard;
}); # }}}2

\$top->bind('<z>' =>  # {{{2
sub {
\$qb->{actAxis} = "z";
updDashBoard;
}); # }}}2

\$top->bind('<Button-2>' =>  # {{{2
sub {
\$V->{plotCS} = \$V->{plotCS} ? do {remCS; 0} : plotCS;
\$V->{plotTri} = \$V->{plotTri} ? do {remTri; 0} : plotT
+ri;
}); # }}}2

\$top->bind('<MouseWheel>' => sub {print "MouseWheel\n"});

\$rSentry->bind('<Enter>' =>  # {{{2
sub {
\$rSentry->focusNext;
}); # }}}2

\$leave->bind('<Button-1>' => \&lebWohl);

\$rfDeckl->bind('<Button-1>' =>  # {{{2
sub {

#print "<Button-1 / \\$rfDeckl>\n";
\$rfDeckl->configure(-width => 0);
}); # }}}2

\$lvLab->bind('<Button-1>' =>  # {{{2
sub {
#print "<Button-1 / \\$lvLab>\n";
\$rfDeckl->configure(-width => 50);
}); # }}}2

\$tlfDeckl->bind('<Button-1>' =>  # {{{2
sub {

#print "<Button-1 / \\$tlfDeckl>\n";
\$tlfDeckl->configure(-width => 0);
}); # }}}2

\$blfDeckl->bind('<Button-1>' =>  # {{{2
sub {

#print "<Button-1 / \\$blfDeckl>\n";
\$blfDeckl->configure(-width => 0);
}); # }}}2

\$hMovLBox->bind('<Button-1>' =>  # {{{2
sub {
#print "<Button-1 / \\$hMovLBox>\n";
\$tlfDeckl->configure(-width => 50);
}); # }}}2

\$canvas->bind('line3d', '<Button-1>' =>  # {{{2
sub {
print "'line3d', <Button-1>\n";
my \$v = shift;
my \$id = \$v->find(qw/withtag current/);
my \$name = (\$v->gettags('current'))[0];
print "line3d \$name\n";

\$V->{\$name}->showAttr;

print "\neVec: (";
print "\$_\t" for @{\$V->{\$name}->eVec};
print ")\n";

}); # }}}2

\$canvas->bind('vec3d', '<Any-Enter>' =>  # {{{2
sub {
print "'vec3d', <Any-Enter>\n";
my \$v = shift;
my \$id = \$v->find(qw/withtag current/);
my \$name = (\$v->gettags('current'))[0];

my \$ref;
eval "\\$ref = \\$\$name";

my (\$x, \$y, \$z)
= (\$ref->{p2}{lx}, \$ref->{p2}{ly}, \$ref->{p2}{lz})
+;

\$vecAnz->configure(
-background => \$highLightBgColor,
-text => \$ref->{name}
);
\$sVxAnz->configure(
-background => \$highLightBgColor,
-text => sprintf "%-0f", \$x
);
\$sVyAnz->configure(
-background => \$highLightBgColor,
-text => sprintf "%-0f", \$y
);
\$sVzAnz->configure(
-background => \$highLightBgColor,
-text => sprintf "%-0f", \$z
);

my \$nrm = matob::vNorm(\$x, \$y, \$z);

\$sVnAnz->configure(
-background => \$highLightBgColor,
-text => sprintf "%-0f", \$nrm
);

}); # }}}2

\$canvas->bind('vec3d', '<Any-Leave>' =>  # {{{2
sub {

\$vecAnz->configure(
-background => \$labDefColor,
);
\$sVxAnz->configure(
-background => \$labDefColor,
);
\$sVyAnz->configure(
-background => \$labDefColor,
);
\$sVzAnz->configure(
-background => \$labDefColor,
);
\$sVnAnz->configure(
-background => \$labDefColor,
);
}); # }}}2

\$canvas->bind('cube', '<Button-1>' =>  # {{{2
sub {
print "cube-<Button-1>\n";

my \$e = \$Tk::event;
(\$V->{xb1down}, \$V->{yb1down}) = (\$e->x, \$e->y);
\$canvas->configure(-cursor => 'exchange');

\$qb->{slice}{gripped}
= \$qb->{slice}{\$sliceAnz->cget('-text')};

}); # }}}2

\$canvas->bind('cube', '<Alt-Button-1>' => [ # {{{2
sub {
my (\$canv, \$old_fill) = @_;
#print "<Alt-Button-1>\n";

my \$id = \$canv->find(qw/withtag current/);
#print "\\$id: \$id\n";
\$canv->itemconfigure(\$id,
-outline => "#ffff64",
-width => 5
);

my \$actRect = (\$canv->gettags('current'))[1];
#print "\\$actRect: \$actRect\n";

print "\\$old_fill: \$\$old_fill\n";
#my \$initialColor = \$\$old_fill;
my \$newColor = \$top->chooseColor(
-title => "Choose a color"
+,
-initialcolor => \$\$old_fil
+l);

\$newColor ||= \$\$old_fill;
print "\\$newColor: \$newColor\n";

\$qb->{cube}[\$actCube]{\$actRect}{iColr} = \$newColor
+;
\$canv->itemconfigure(\$id,
-outline => "black",
-width => 1
);

plotAll;

}, \\$V->{old_fill}]); # }}}2

\$canvas->bind('cube', '<Double-Button-1>' =>  # {{{2
sub {
print "<Double-Button-1>\n";
\$qb->{slice}{marked}->changeColor(0);
\$canvas->configure(-cursor => 'exchange');
#\$canvas->configure(-cursor => 'target');
my \$canv = shift;

{
keys %{\$qb->{constraint}} && last;

\$qb->{actAxis} eq "x" && do {
\$qb->{actAxi
+s} = "y";
last;
};
\$qb->{actAxis} eq "y" && do {
\$qb->{actAxi
+s} = "z";
last;
};
\$qb->{actAxis} eq "z" && do {
\$qb->{actA
+xis} = "x";
last;
};
}

\$qb->selSlice;
plotAll;
\$sliceAnz->configure(
-text => \$qb->{slice}{marked}{name
+});

\$qb->{slice}{gripped}
= \$qb->{slice}{\$sliceAnz->cget('-text'
+)};

}); # }}}2

\$canvas->bind('cube', '<Shift-Button-1>' => [ # {{{2
sub {
my (\$canv, \$old_fill) = @_;
print "<Shift-Button-1>\n";

my \$id = \$canv->find(qw/withtag current/);
\$canv->itemconfigure(\$id, -fill => undef);

}, \\$V->{old_fill}]); # }}}2

#\$canvas->bind('cube', '<Any-Enter>' => [\&cscroll_enter, \\$old_fill])
+;
\$canvas->bind('cube', '<Any-Enter>' => [ # {{{2
sub {
#\$qb->{slice}{gripped} && return;
print "'cube', <Any-Enter>\n";

\$V->{freezeCvac} || do {
\$V->{cvac}->{p2}
= \$qb->{cube}[\$act
+Cube]{centr};
plotAllVectors;
};

\$V->{PFLAG} == 0 && return;    # OTHERWISE ENDLESS-LOO
+P !!!

my (\$canv, \$old_fill) = @_;

my \$id = \$canv->find(qw/withtag current/);
\$id-- if (\$canv->gettags('current'))[0] eq 'text';
\$\$old_fill = (\$canv->itemconfigure(\$id, -fill))[4];

(\$actCube     = (\$canv->gettags('current'))[0])
=~ s/c(\d+)/\$1/;
my \$actRect = (\$canv->gettags('current'))[1];

updDashBoard;

\$qb->selSlice;
\$sliceAnz->configure(-text => \$qb->{slice}{marked}{nam
+e});
\$V->{PFLAG} = 0;     # avoid renewed sub-run-through w
+hich
# will be caused (suspected) b
+y poly-
# gon-redrawings
plotAll;

# cube/rect-names in statusline
# selected cubes-names should be red (deprecated due t
+o
# slice-highlighting ?)
my \$fg = \$qb->{slice}{marked}{members}{\$actCube}
? "red
+"
: \$rgb
+{DarkGreen};
\$cubAnz->configure(    -text  => "c" . \$actCube,
-foreground  => \$fg);
\$rectAnz->configure(    -text  => \$actRect);

# update coordinate- and distance-display in dashboard

my \$dist = \$mm->vNorm(\$qb->{cube}[\$1]{centr}{wx},
\$qb->{cube}[\$1]{centr}{wy},
\$qb->{cube}[\$1]{centr}{wz} + \$
+distance);

\$xKoor3d->configure(-text =>     sprintf "%0f",
\$qb->{cube}[\$1
+]{centr}{wx});
\$yKoor3d->configure(-text =>     sprintf "%0f",
\$qb->{cube}[\$1
+]{centr}{wy});
\$zKoor3d->configure(-text =>     sprintf "%0f",
\$qb->{cube}[\$1
+]{centr}{wz});

\$distLab->configure(-text => sprintf "%0f", \$dist);

\$lxAnz->configure(-text => sprintf "%0f",
\$qb->{cube}[\$1]{ce
+ntr}{lx});
\$lyAnz->configure(-text => sprintf "%0f",
\$qb->{cube}[\$1]{ce
+ntr}{ly});
\$lzAnz->configure(-text => sprintf "%0f",
\$qb->{cube}[\$1]{ce
+ntr}{lz});

}
, \\$V->{old_fill}]); # }}}2

\$canvas->bind('cube', '<Any-Leave>' => [ # {{{2
sub {

my(\$canv, \$old_fill) = @_;

my \$id = \$canv->find(qw/withtag current/);
\$id-- if (\$canv->gettags('current'))[0] eq 'text';
\$canv->itemconfigure(\$id, -fill => \$\$old_fill);

\$qb->{slice}{marked}->changeColor(0);

\$V->{PFLAG} = 1;
plotAll;

}
, \\$V->{old_fill}]); # }}}2

\$canvas->bind('cube', '<B1-Motion>' =>  # {{{2
sub {

(\$Z++ <= 1)
? return
: do {\$Z = 0};

foreach (keys %{\$qb->{slice}{marked}{members}}) {
\$qb->{cube}[\$_]{palette} = 0;
}

my \$e = \$Tk::event;

my (\$xnow, \$ynow) = (\$e->x, \$e->y);
my \$dir = (\$V->{xb1down} > \$xnow) ? 1 : -1;

\$qb->{slice}{gripped}{rot} += \$dir;
\$qb->{sMovFlag} = 1;

foreach (keys %{\$qb->{slice}{marked}{members}}) {

\$qb->{cube}[\$_]->rotate(\$qb->{rS} * \$dir, 0.0,
+ 0.0)
if (\$qb->{actAxis} eq
+"x");

\$qb->{cube}[\$_]->rotate(0.0, \$qb->{rS} * \$dir,
+ 0.0)
if (\$qb->{actAxis} eq
+"y");

\$qb->{cube}[\$_]->rotate(0.0, 0.0, \$qb->{rS} *
+\$dir)
if (\$qb->{actAxis} eq
+"z");

}

plotAll;
(\$V->{xb1down}, \$V->{yb1down}) = (\$xnow, \$ynow);
}); # }}}2

\$canvas->CanvasBind('<Motion>' =>  # {{{2
sub {
\$xKoor->configure(-text => \$Tk::event->x);
\$yKoor->configure(-text => \$Tk::event->y);
}); # }}}2

\$canvas->CanvasBind('<Control-Button-1>' =>  # {{{2
sub {
print "<Control-Button-1>\n";

print "\\$actCube: \$actCube\n";
# hol mir das sliceObjekt zu diesem cube
my \$slice = \$qb->sliceOfCube(\$actCube);
\$slice->changeColor;

}); # }}}2

\$canvas->CanvasBind('<Double-Button-3>' => # {{{2
sub {
\$V->{plotCS} = \$V->{plotCS} ? do {remCS; 0} : plotCS;
}); # }}}2

\$canvas->CanvasBind('<Button-1>' => # {{{2
#\$canvas->CanvasBind('<Button-3>' =>
sub {
\$qb->{slice}{gripped}{name} && return;
\$canvas->configure(-cursor => 'fleur');
plotAllVectors;

my \$e = \$Tk::event;
(\$V->{xb3down}, \$V->{yb3down}) = (\$e->x, \$e->y);
}); # }}}2

\$canvas->bind('cube', '<Button-3>' => [ # {{{2
sub {
#\$canvas->CanvasBind('<Button-3>' => [sub {
my(\$w, \$x, \$y) = @_;
print "\\$hiddenM: \$hiddenM\n";
\$hiddenM->post(\$x, \$y);
}, Ev('X'), Ev('Y')]); #}}}2

\$canvas->CanvasBind('<B1-Motion>' =>  # {{{2
#\$canvas->CanvasBind('<B3-Motion>' =>
sub {

\$qb->{slice}{gripped}{name} && return;
my \$e = \$Tk::event;

my (\$xnow, \$ynow) = (\$e->x, \$e->y);

my \$xdir = (\$V->{xb3down} - \$xnow) / 10;
my \$ydir = (\$V->{yb3down} - \$ynow) / 10;

\$V->{horiz}->{p2}->creaHVWC([1, 0, 0]);
\$V->{vertik}->{p2}->creaHVWC([0, 1, 0]);

\$mm->freeRot(\$V->{horiz}, \$qb->{rS} * -\$ydir);
\$mm->freeRot(\$V->{vertik}, \$qb->{rS} * -\$xdir);

plotAll;
(\$V->{xb3down}, \$V->{yb3down}) = (\$xnow, \$ynow);

}); # }}}2

\$canvas->CanvasBind('<ButtonRelease-3>' =>  # {{{2
sub {
\$canvas->configure(-cursor => 'crosshair');
}); # }}}2

\$canvas->CanvasBind('<ButtonRelease-1>' => sub         # {{{2
{
print "ButtonRelease-1\n";
print "\\$qb->{slice}{gripped}{name} ",
\$qb->{slice}{gripped}{name},"\n";
\$canvas->configure(-cursor => 'crosshair');

\$V->{PFLAG} = 1;
plotAll;

my \$slice = \$qb->{slice}{gripped} || return;
\$qb->{slice}{gripped} = {};

\$qb->{sMovFlag} && do {
print "moved slice was : ", \$slice->{name}, "\n";
my \$rest = \$slice->{rot} % \$rotSiSteps;
my \$movs = int(\$slice->{rot} / \$rotSiSteps);

\$rest
? do {
#print "\\$rest: \$rest\n";
#print "incomplete move\n";
\$qb->{constraint}{\$slice->{name}} = \$slice;
}
: do {

#print "\\$movs: \$movs\n";
\$qb->corr(\$slice);
\$movs && do
{
\$zug = sprintf("%4d: %2s%-2d",
\$movLBox->index('end')
+ + 1,
\$slice->{name},
\$movs);
print "valid move: \$zug\n";

\$movLBox->insert('end', \$zug);
\$movLBox->see('end');
\$saveIt = 1;

\$slice->{rot} = 0;
};

#print "delete ", \$slice->{name}, "aus constra
+intHash\n";
delete \${\$qb->{constraint}}{\$slice->{name}};
\$qb->updSlices;
};

};
\$qb->{sMovFlag} = 0;
print "Cubes ", \$qb->check ? "bad" : "OK", "\n";
#print "members: ", Dumper \$slice->{members}, "\n";

}); # }}}2

# END bindings }}}1

\$mm->rotate(PI/-6, PI/6, 0.0);
plotAll();
#\$qb->detSlViaNam(\$canvas, "slx10");
#print ALL_EVENTS;

Replies are listed 'Best First'.
Re: "Rubics Cube" game - part3
by tos (Deacon) on Mar 04, 2008 at 18:11 UTC
```MainLoop;

sub opts { # {{{1

# tos-Standards:#
# \$opt_h    :     help
# \$opt_l    :     logfile
# \$opt_v    :     schwatzhaft
# \$opt_V    :     zeige Version

OPT: {
\$opt_h      && do {
print <<"EOHELP";

einsatz wasses tut ...

Usage: \$0 [OPTION]... [FILE]...

Options:
-h   this helptext
-v   be verbose
-V   show version

Examples:
tosSkel ...

EOHELP
exit;
};
\$opt_V      && do {
print "\$0, \$VERSION\n" && exit;
};
#   \$opt_l      && do {
#                              print "log-file is: \$opt_l\n";
#                              \$tos::logFile = "\$opt_l";
#                  };
\$opt_v      && do {
print "mode: verbose\n";
};
}
} # end opts }}}1

# logos {{{1

sub ptk { #{{{2

my \$xpm = <<'end-of-xpm';
/* XPM */
static char *ptk[] = {
/* columns rows colors chars-per-pixel */
"88 31 39 1",
"  c black",
". c #111111",
"X c #333300",
"o c #222222",
"O c gray20",
"+ c #663300",
"@ c #663333",
"# c #666633",
"\$ c #444444",
"% c #555555",
"& c gray40",
"* c #777777",
"= c #006699",
"- c #336699",
"; c #339999",
": c #669999",
"> c #990000",
", c #996633",
"< c #996666",
"1 c #CC3333",
"2 c #CC6666",
"3 c #FF6666",
"4 c #999966",
"5 c #CC9966",
"6 c #CCCC66",
"7 c #888888",
"8 c gray60",
"9 c #AAAAAA",
"0 c #BBBBBB",
"q c #9999CC",
"w c #FF9999",
"e c #CCCC99",
"r c #FFCC99",
"t c #FFFF99",
"y c gray80",
"u c #FFCCCC",
"i c #FFFFCC",
"p c #EEEEEE",
"a c gray100",
/* pixels */
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaa ",
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaa  ",
"aa0y00y00y00y00y00y00y00y00y00y00y00y00y00y00y00y00y00y00y00y00y00y00
+y00y00y00y00y00y0  ",
"aa000y00000y00000y00000y00000y00000y00000y00000y00000y00000y00000y000
+00y00000y00000y00  ",
"aay0                        000077y00y97y098y98089977809780097780977y
+00009780079y8800y >",
"aa00 iiiiiiiiiiiiiiiiiiiiii y0y% O 90\$.oo97 0Oo0 7% O%yO.oo0% O%yO.o
+7y0yO..Oy%O0 *y00>>",
"aa0y iiiiiiiiiiiiiiiii4,5ti 00y%OyO%8 0yO%0 8  9 y%Oy00O%0 8%Oy00O%y%
+.000O%7 00 &Oy001>>",
"aa00 iiiiiiiiaiiiiiiii#,@+5 00y%.% 7%O00%O0o&OO%Oy%  O0O  \$y%  O0O%y7
+ 0y0O  \$0y% 70011>>",
"aay0 iiiiiiie4,4eiiiii,##5r y00%.&9y7 00O%y%O%\$.%0%Oy00O%7 0%Oy00O%y%
+oy00O%0 807 y0111>>",
"aa00 iiiiiie@,5<#4tiie,#tii 00y%Oy00y\$.oo00* 7& 7y% OOyO%0 7% OOyO.o.
+800yO.ooy07 01111>>",
"aa0y iiiii5#<45<4,,rr<,4iii y0098000008800y070070y9777089y8997770879y
+0y0087800y0711111>>",
"aa00 iiii,,4555555<,,,,eiii 00y0y0y0y0y0y000y000y00y0y00y00yyy0y0y0y0
+00000y0y000111111>>",
"aay0 iiie,55555555554,4iiii 0y000000000000y000y00y00y00y00009;q00000y
+0y0y09000y1111111>>",
"aa00 iti,5<45555554#@<iiiii 00:====-==-9000y000y00y000000y9===90y0y00
+:;====;y011111111>>",
"aa0y iii#5,X,4<<54X,eiiiiii y000==-0y:==:y000y00y0000y0y000:==q000000
+======:0111111111>>",
"aa00 iie#,,@,##++,+tiiiiiii 0000==;y00;==000y00000y0y0000y09==900y0y9
+=999qy01211u11111>>",
"aay0 iie#@,riir# #<<riiiiii y0y0==;000:==90y0:::90000q;0::0q==90y000;
+;q000012p33aw1111>>",
"aa00 itiXX,iiii,+it4@iiiiii 000y==;00y;==q0:=;9:=-0y:=====-9==9000y0=
+====;11wpuwauw111>>",
"aa0y ii,,#4iiir+6iir#iiiiii 0y00==;00:==;0:=;000==::===:==:9==90y00y=
+====1111wapaaau31> ",
"aa00 ii#i,eiia5#iiii,iiiiii y000===--==;0q===;;;;-:0:==00y09==9000000
+yq:11pu11waawuu11  ",
"aay0 it@i+riia<5iiii,riiiii 00y0==;099000:==90000000:==0y009==9y0y0y0
+0011paa111wau311y  ",
"aa00 ir,i,eiia,tiiii,5iiiii 000y==;00y0y0:==90y00y00:==00009==900000y
+011aaau3111wu11y0  ",
"aa0y i54ie,iii,iiiii4@tiiii 0y00==-y00000:==;00y000y:==y00y9==9y00y00
+111uuuau311111000  ",
"aa00 i,<ii#rii@eiiiiiiiiiii y000==;000y0y0===9000090:==00009==900y001
+111112uauw1110y0y  ",
"aay0 ir5ii4,iietiiiiiiiiiii 00yq===0y00000:===:9:=:0:==0y0y:==:0y0011
+1111112uaw110y000  ",
"aa00 iiiiiiiiaaiiiiiiiiiiii 00:;;;;-:0y0y009;===;9y;;;;;:0:;;-;:00111
+11111112u210000y0  ",
"aa0y                        0y000000y0000y000000y00000000000000001111
+11111111110y0y000  ",
"aa00y00y00y00y00y00y00y00y00y000y0y0000y0000y00y0000y00y00y0y0y011111
+1111111110y00000y  ",
"aay000y00y00y00y00y00y00y00y00y00000y0y00y0y00y00y0y00y00y00000111111
+111111110000y0y00  ",
"a                                                             >>>>>>>
+>>>>>>>            ",
"                                                             >>>>>>>>
+>>>>>>             "
};
end-of-xpm

return \$xpm;

} # end ptk #}}}2

sub cwVim { #{{{2

my \$xpm = <<'end-of-xpm';
/* XPM */
static char *cwVim[] = {
/* columns rows colors chars-per-pixel */
"88 34 257 2",
"   c #000400",
".  c #08040A",
"X  c #070411",
"o  c #0E0503",
"O  c #020333",
"+  c #0C0047",
"@  c #00064E",
"#  c #0F053C",
"\$  c #0C1105",
"%  c #040369",
"&  c #0B120F",
"*  c #00095F",
"=  c #100078",
"-  c #062103",
";  c #111C18",
":  c #191914",
">  c #1C1818",
",  c #191D09",
"<  c #13200D",
"1  c #121D20",
"2  c #17163C",
"3  c #211913",
"4  c #0C1954",
"5  c #001B70",
"6  c #032C0F",
"7  c #1D1B26",
"8  c #231B20",
"9  c #1B1B36",
"0  c #2C1725",
"q  c #1A2A19",
"w  c #22271D",
"e  c #033E00",
"r  c #222826",
"t  c #2D242E",
"y  c #2B2726",
"u  c #153902",
"i  c #0B3D12",
"p  c #2A292E",
"a  c #332629",
"s  c #302922",
"d  c #30293A",
"f  c #004F02",
"g  c #25372C",
"h  c #154801",
"j  c #153E3C",
"k  c #263A28",
"l  c #31362A",
"z  c #313633",
"x  c #31353C",
"c  c #1C461C",
"v  c #30344B",
"b  c #3D3336",
"n  c #3B3635",
"m  c #3C3542",
"M  c #035E05",
"N  c #1A5119",
"B  c #016300",
"V  c #453935",
"C  c #36442F",
"Z  c #005E37",
"A  c #44402F",
"S  c #2B4E32",
"D  c #3E4436",
"F  c #036B08",
"G  c #424144",
"H  c #37483E",
"J  c #5A3649",
"K  c #007200",
"L  c #40463F",
"P  c #4E3D4D",
"I  c #4B453A",
"U  c #424650",
"Y  c #484643",
"T  c #4B4651",
"R  c #4A494D",
"E  c #018000",
"W  c #5A474B",
"Q  c #48573F",
"!  c #107D13",
"~  c #515057",
"^  c #594B60",
"/  c #574F56",
"(  c #585246",
")  c #53534F",
"_  c #4B5948",
"`  c #4E5557",
"'  c #4F564F",
"]  c #495951",
"[  c #535648",
"{  c #4F5663",
"}  c #5E5252",
"|  c #00900F",
" . c #4E5673",
".. c #009400",
"X. c #645461",
"o. c #55605D",
"O. c #5B5E5D",
"+. c #5F5B67",
"@. c #009D0C",
"#. c #00A000",
"\$. c #4C6C54",
"%. c #586659",
"&. c #5F6358",
"*. c #655F5E",
"=. c #5E6752",
"-. c #5D636D",
";. c #646165",
":. c #676357",
">. c #00AA00",
",. c #5C6967",
"<. c #71615D",
"1. c #706067",
"2. c #6E6075",
"3. c #656867",
"4. c #626E52",
"5. c #7D5D6F",
"6. c #6C6E54",
"7. c #766471",
"8. c #00B600",
"9. c #756D56",
"0. c #726F63",
"q. c #67765F",
"w. c #68736E",
"e. c #6F6E79",
"r. c #697376",
"t. c #6F7366",
"y. c #697668",
"u. c #727074",
"i. c #777070",
"p. c #737472",
"a. c #757C80",
"s. c #8C7282",
"d. c #7A7E75",
"f. c #787F7A",
"g. c #7D7C82",
"h. c #738972",
"j. c #867F8B",
"k. c #8D7B8E",
"l. c #8C7F85",
"z. c #7B878B",
"x. c #917B96",
"c. c #8B837D",
"v. c #828783",
"b. c #85877E",
"n. c #86858B",
"m. c #8B8879",
"M. c #8B8685",
"N. c #848F89",
"B. c #8F8D91",
"V. c #889193",
"C. c #938E8C",
"Z. c #948C98",
"A. c #8F918C",
"S. c #968AA0",
"D. c #A28697",
"F. c #8E909B",
"G. c #8C9883",
"H. c #9F8F92",
"J. c #8E9990",
"K. c #89A980",
"L. c #BF8DB1",
"P. c #9CA5A8",
"I. c #AC9BB2",
"U. c #A4A2A6",
"Y. c #A9A0A6",
"T. c #A1A3AE",
"R. c #AC9FAC",
"E. c #9EAAA2",
"W. c #A6A7A2",
"Q. c #A9A3B1",
"!. c #ABA5A3",
"~. c #BE9BAE",
"^. c #B7A2A9",
"/. c #AAB0B3",
"_. c #AFB1AE",
"`. c #B5B3A1",
"]. c #B4B4AB",
"[. c #B2B1C2",
"{. c #B9B3B1",
"}. c #BDAEC5",
"|. c #AFB8BA",
" X c #C3AFB5",
".X c #B5B7B4",
"XX c #9AC2C3",
"oX c #C0B0BE",
"OX c #B8B4BF",
"+X c #B9B5BA",
"@X c #D2A7CA",
"#X c #B5BFBA",
"\$X c #BFBCC1",
"%X c #BAC1B6",
"&X c #CCB8BA",
"*X c #C0BFB6",
"=X c #BBC1C3",
"-X c #C4BEBC",
";X c #C6BCC3",
":X c #BEBFC9",
">X c #BFC1BD",
",X c #C6BBCF",
"<X c #CABFB3",
"1X c #C4BECA",
"2X c #CEB9CB",
"3X c #C3C1C5",
"4X c #CBBCCA",
"5X c #C2C6B3",
"6X c #B7CABD",
"7X c #B6CAC2",
"8X c #D0BFC7",
"9X c #C8C5CA",
"0X c #C0C8D0",
"qX c #C1CAC5",
"wX c #C3C8CB",
"eX c #C6C8C5",
"rX c #C4CAC0",
"tX c #D9BCD2",
"yX c #D5C1C3",
"uX c #CCC6C4",
"iX c #CEC4CA",
"pX c #C8C6D1",
"aX c #CAC9C0",
"sX c #CCCACE",
"dX c #C5D5C8",
"gX c #D5CDCC",
"hX c #C2DAC1",
"jX c #C9D4CF",
"kX c #D4CFD4",
"lX c #D2D0DB",
"zX c #D2D5D1",
"xX c #D4D7C7",
"cX c #DECFDD",
"vX c #E2CFE5",
"bX c #D9D8CF",
"nX c #D3DBDD",
"mX c #DBD8DC",
"MX c #E0D8D6",
"NX c #E0DEE2",
"BX c #DFE2DF",
"VX c #E3DEED",
"CX c #D5EDDC",
"ZX c #EAEAE1",
"AX c #E6EBE8",
"SX c #EEE8E5",
"DX c #EFEBF0",
"FX c #FCE6F6",
"GX c #F0F3EF",
"HX c #EFF3F7",
"JX c #FEEDFF",
"KX c #F8F3F1",
"LX c #F6F9ED",
"PX c #FEFBFF",
"IX c #FCFFFC",
"UX c gray100",
"YX c None",
/* pixels */
"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXY
+XYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXLX!
+K YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX",
"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXY
+XYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXCXYXM #.
+8.f DXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX",
"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXY
+XYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX*.f.1.f.l.y.d.t.s.h.E #.
+E 8.B o k d.d.w.l.i.d.a.w.d.x YXYXYXYX",
"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXY
+XYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX5.GXMXlXhXnXvXnXkXCXvXP h
+>.| 8.N AXFXcXnX0XCXvXiXmXZXY.. YXYXYX",
"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXY
+XYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXfX] nX+XlX2X2XyX-X4X=XtXT B
+>.@.@.c @XhX3XuXiX1XaXkX|.9XF.  YXYXYX",
"IXIXLXGXLXGXPXGXHXHXHXHXHXHXHXHXKXGXKXKXKXKXKXKXAXGXAXGXAXGXGXGXGXGXK
+XDXDXDXDXDXLXGXGXGXGXGXSXDXBXSXAXAXAXAXBXMXv.J 0.xX;X>X6X,X6XS.;.M |
+..@.| ! N ^ ,X6X@XqX>X<XpX=Xe.I 3.f.wX",
"KXAXAXBXBXBXNXZXZXZXZXZXZXZXZXZXAXAXAXAXAXAXAXAXAXSXAXDXAXNXAXNXBXBXZ
+XbXZXbXBXBXnXNXNXmXmXnXzXBXnXMXMXnXmXMXfXeX0Xo.A.gXeXuX8XyXyXk.z ..>.
+#.E >.| f k.NXhXyXdXgXgX(.) r =.,.3.g.",
"IXZXzXlXgXsXwXzX:X\$X;X;X;X:X:XpX1X:X:X:X:X:X:X3X\$X:X\$X-X\$X3X1X3X1X1X1
+X:X\$X1X;X\$X\$X=X-X;X1X3XeXqX>X>X.X+X{.+X{./..Xi.k.lX4X:X0X=XqXJ.0 ..|
+..>.#.f Z.AXfX2X7X}.wX1XO.l L L ~ *.} ",
"IXBXiX1X3XwX0XeXkXwXeXsXyXuXeXuXeXeXeX>X>XeX=X=X3X3X:X3X\$X\$X1X;X.X+X{
+.>X.X.X.X#X+X.X_._.).{.{.Y._..X.X/._..X_./.U.e.i.CX8XeXyX2X1Xc.0 >.>.
+E @.N K.IXmX\$X;X2XhX).;.> l ' ' ] _ 3.",
"IXMXlXlXjXzXsXkXfXeXsXeX0X9X\$XqX;X;X\$X3X3X\$X-X-X-X\$X-X\$X\$X-X+X\$X-X>X\$
+X>X>X).;X+X;X\$X/.).>X#X{.Z.P.).{..X/.).).U.!.q.j.mX=XuX,XqXpXV.p ..@.
+8.f W.JXkX'.kX6X2X).u.; H g U %.t.' -.",
"IXbXqXaXgXjXn./ ;.M.>XiXdXsX-X=X=XpXwX-X.XqX\$XqX-X{.eX{.:X{.wX=X;.;X/
+.=X4X_.6X)._.oX|. X`.oXJ.: X #X).<X/.[.`.T.}.Q k.NX%X1XwXaXzXx.g ..|
+F M.PX,XeX;XsXxXR.e.- 3 v L =.2.1.t.} ",
"LXVXfX;XdX2.& :.~ > ,.lX|.3XNXgXeXpX*XlXlXqXlX{.:XqXfX:XxXeXOX*Xw n.m
+X{.7X:X8X7X4XqXoXXX}.6X;XB.: R.|.|.^.{.U._.d.N l.lX-X3XwX;X8Xn.V #.B
+m.IX2XxXoX0XfX~.e.h #.M r ` %.y.a./ r.",
"PXAXpXfXI.  OXAXmXR V.H.; x n o z 2X`.m   g Z.BX{.x   \$ i.=X.X7 X
+ x .X).{   1 :.xX1Xf.y , x & %X^.]._.oX1Xk.! F J.lX8X1XeX;X\$XM.d f G.
+JX<X:XuXwXeXQ.-.u @.>.#.B U ^ 2.d.w.X.",
"IXZXrX4XP.r %X1XeX>XzX3Xw.  p V.) [.3 ;.0X:.x {.pXt.H.F.o wX[.`.X y.W
+.D.\$XH n .Xn.p g.P.X -.Z.t   OX%X[.[.].V.F >.K n.BX=X4X3XqX;XA.7 W.DX
+kXpX>X,XdX Xe.e @.@.| #.8.B v 6.u.-.*.",
"IXBXzXkXE.t =XfXsXMXkXmXv.: kXkXnXC.  >   X o V.].x 1 o X H.eX;Xw Q.(
+.xXwX. . & :   b 4.I fX+XA.& `.{.E.{.m.F 8.>.F x.kX6X4X;X9XuXu.'.FXfX
+5X1X3XsX!.r.u | #...@.....8.! { 4.X.,.",
"IXGXpXjXQ.& Y.qXmXz.U.zXB.z OXfXuXb.. f.A.B.b.lXR s W.n.l =X[._.q D.:
+X7XH.8 ] l.z.j.E.7.r OXnXr.X OX_.2XOXS j j @.F c.kXwXpXwXwX=XD.NXjXyX
+|.uXnX~.e.u @.>.| @.#.>.| | Z z +.4.X.",
"KXDXdX,XjXl.  8 >   H.v.. o a r +XMXU . y ;   _.R . ) &   r nX+Xa \$ r
+ . e.N.. p p   ` %XX \$ >   o _ /.).#X{.^ = Z F G.kX3X;X=X9XeXF.cXwXsX
+tX7X'.u.u | #.....@...#...4 @ H ` { &.",
"PXNXlX6XzXmXOXV.a.jX:X/.n.w.n.d.>X1XaX+Xu.J.wXeX3X3.R g.M.a.3X*X/.N.i
+.).rXpX[.0.p./.gX0X{.n.i./.J. X(.'./.T.E.H % 1 S.NXuX;X3XiX9XuXqXtX%X
+!.X.t e #.#...#.#.@.@...% @ g Y o.] +.",
"PXBXkX9XeXsXlXMXsXuXuX9XsXpXfXfXeX3X-X9XpXpX:XOXqXeXzX1XaXxX0X*X1X:X3
+X;X{.\$X:XeX/.qXoX|.%XoX\$X>X_.:X<XW.=X].).U.) O j.BX\$XeXeX3X<X7X4XzXE.
+) Q.-.B #.@.#.| @...@.5 = q / :.] +.t.",
"PXBXwXsXwX3XiXsXwXwXeXeXsXwX9X3X9XwXwX3XuX-XuX>XuX[.).<X[.+X\$XoX%X%X:
+X|.%X*X).=X4X].!.{.-XrXE.=X/./.>X).).!.T.V.m.v c.bX1XpXiXyXlX}.hXtXI.
+4.wXD.B ..>.| ..8.! 4 # 7 C C G w.%.2.",
"PXAXwXwXwXeX9XeXsXpX:X=XuX=X3X3X;X;X3X=X\$X=X3XuX-X#XqXwXqX'.=XaX:X!.y
+X\$X[.}.^.%XOX|.wX).Q.*XyXY.=X!.).{._.!.{.P.W.` C.nX\$X3X:X:XhX@X=XrX}.
+r 8 f K B F 8.! M 9 @ ; < z ` e.X.\$.O.",
"PXBXkXsXqX=X3XuXwXeX9X9X=XeXeX=X=X=X3X;X3X;X\$X:X1XuX+X[.gX{.[.>X&.G (
+.1X'.5X|.P.*XI.>X) . |.T.|.=X_.(.=X/.(.`./.H.o.l.lXeXuXOXwX,XeXlXE.g
+7 5.6 ;.s.` - ^ t.-.X O.-.r D %.s.` i.",
"PXBXsXpXsX9X:X>XwXeX9X9X3XwXwXwXwX>X=X=XwX9X\$X+XwX0XeX%XpX=XxX=XT.y.r
+X<X(.[.-.I dXVXE.%X  .X&X-X;X{.T.{.).T.].U.Q.t.m.mXeXiX:XqXjX>XR.m <
+[.MX- i 0XVX%XlXcXpX%XvXLXS.6 u.,.<.+.",
"IXBXsXiX9XsXiXwXuX3XwX9X9XeX>X=XuX3X=X3X-X>X>X|.G G )./.U m ).e.V x 0
+X}.eXJ.X X b p J.kX. %.L 3.C.=X/.+X/././.!.[.y.B.kXeX1X\$XeX.XL.\$.f S
+eXu.f k wX<.R r.fX<.{ r.<XT b { d.O.O.",
"IXBXfXwXwXfXsXqXwX3X=X9X:XpX9X=X1X;X3X=X3X\$X-X{.1 < n.V.< & /.A.m ; %
+X{.>XP.r l +.o.P.pX. > ) 8 3.9X'..X/.'.).W.U.p.j.lXaXyX9X4XT.S M F 5.
+oXS f G.}.2 O G.T.,   !.S.k / \$.t.+.*.",
"PXBXiX1XwX3XsXwXfXqXwXwX9X9XuX-XeXeXeX9X=XeX3XfXp.b t s G -.bX0XP.: +
+X1XOX-XO.U wX].oXzX  Q.0X3.z +X{.).{.{.OX/.).3.Z.bX=X1X>X{.I B >.N 5X
+x.f S OXj.+ v tX0.& b nX=.9 ] :.r.i.,.",
"LXnXzXrXaX:X:XwX1XwXeX-X>XqXeX-X3X\$X>X3X\$X=X\$XiX'.. r . \$ l.fXpXT.. j
+X*XaXqX*.Y lXrXwXbXo P.pX<.U qX)._./.].|.!./.w.H.VXeX0XH.O.# 5 B e.Q.
+h f e.).    v.T.\$ & B.).w n O.:.a.*.q.",
"PXNXpXsXsXiXuXaX3X3X:X:X3X:XpX3XyXeX3X-XuX3XwX3X0X  R / . W.zXY `   ~
+ ,./.&X3.. o.n t V.\$ ,.Y.z \$ J.+X>X+X!.). XY.C.,.a.H.Z.U q 7 + O }.eX
+[ & iXfXd : :X*Xx y (.^.H ] -.-.a.2.2.",
"IXbXeXsXpXpXlX3XaXeXrXeXeXeX9XwX3X=XwX=X=X=X=X=X+X*.l.W./ .XOXY n z b
+ ` /.sX|.3.t &.n.v.8 L F.I x H.Q.(.).|././.E. Xg.x s w j *._ S + 2 -
+c * , w r p w p n m r d r ' r.a.N.9.&.",
"IXBXeXwXeXeXeX:XsXwXsX9X3X3X3X;X=X3X-X\$X3X-X>X-XuX=XfXqX9X9X\$X:XfXgX=
+X{.3X>X-X>XpX#XjX=X4XwXfXP.5X*X#X]._.#X<X_.Q.!._.A.l.j.a.[ } r.A @ 5
+5 # p H H ` _ o.' ` o.=.q.t.e.Z.n.a.` ",
"HXNXeXeXgXuXuXpXsX9XsX9X9X3X3X1XsXwXeX>XwX3XwX>X=XOX\$X+XbX(.>XeX=X).:
+XyX).|.{.-X=X!. X|.(.].!.pXOXQ.|.(.Y.[.(./.'.U.(.Y.N.b.A.e.M.h.f.' O
+@ C ' ) o.=.O.t.r.d.-.e.j.p.p.B.B.a.*.",
"IXBXuXsX=X:X0X:X3X=X>XeX>X-X>X>X>X\$X\$X\$X{.-X{.>X.X:X].+X#XOX.X{.+X|.*
+X=X/.{.=XT.).sX X].(..X-XP.R.Y..X_.]._.].E.!.W.W.N.T.l.l.V.z.9.x.h.d.
+9.O.w.;.w.%.a.p.f.t.l.b.B.V.A.E.A.f.} ",
"PXOXZ.B.A.n.b.m.B.Z.n.F.F.B.B.F.N.A.A.B.B.A.B.B.c.V.A.N.M.Z.g.N.b.v.A
+.v.a.M.J.B.l.z.w.G.j.a.v.N.A.V.d.a.n.e.g.e.y.u.7.3.a.t.3.2.0. .6.;.+.
+{ %.W ` O.~ :.+.0.-.O.w.;.3.1.e.e.o.R ",
"rXf.n I L G ~ ~ &.) *.O.o.O.o.%.o.O.;.o.` ;.) o.;.R 1.] } ' ;.=.` ) o
+.` O.o.} ' %.U 1.&.R O./ / Y R } T &.T &.} *.R &.o.P R %.~ ~ ' ^ D `
+I H U ) G R T O.T ~ ] ~ / o.) ~ ) C t "
};
end-of-xpm
return \$xpm;

} # end cwVim #}}}2

sub icon { #{{{2

my \$xpm = <<'end-of-xpm';
/* XPM */
static char *kpackage[] = {
/* columns rows colors chars-per-pixel */
"32 32 257 2",
"   c transparent",
".  c #69090B",
"X  c #640F09",
"o  c #750D0D",
"O  c #7B1517",
"+  c #721A19",
"@  c #9C0A08",
"#  c #89190D",
"\$  c #892321",
"%  c #693046",
"&  c #982122",
"*  c #A91E19",
"=  c #D50C09",
"-  c #D81215",
";  c #C21D1C",
":  c #963030",
">  c #D01918",
",  c #D21C09",
"<  c #C91F1D",
"1  c #B52729",
"2  c #A62F2C",
"3  c #E41518",
"4  c #D31F22",
"5  c #B13132",
"6  c #C82A1E",
"7  c #88405C",
"8  c #A73835",
"9  c #D22A1C",
"0  c #2E63AB",
"q  c #C53024",
"w  c #CB2D26",
"e  c #D22A26",
"r  c #72507A",
"t  c #DB292D",
"y  c #E52825",
"u  c #5A5A98",
"i  c #655887",
"p  c #CF3235",
"a  c #BC3B3A",
"s  c #D3352C",
"d  c #BC3E4B",
"f  c #AE4358",
"g  c #EA2E2F",
"h  c #C53F3F",
"j  c #E33339",
"k  c #B84747",
"l  c #886919",
"z  c #3A70CD",
"x  c #3075D0",
"c  c #E83736",
"v  c #CA4443",
"b  c #E13B3A",
"n  c #3C76C5",
"m  c #DE4246",
"M  c #4C79BA",
"N  c #C6504E",
"B  c #E84245",
"V  c #427FCE",
"C  c #467FC8",
"Z  c #D14F4F",
"A  c #F14143",
"S  c #E3474A",
"D  c #D74D51",
"F  c #B76A12",
"G  c #A27917",
"H  c #EF494A",
"J  c #5782C1",
"K  c #EA4D4F",
"L  c #A77D08",
"P  c #DF5351",
"I  c #E55150",
"Y  c #787AA4",
"T  c #5087D1",
"R  c #C45E73",
"E  c #DB5858",
"W  c #4B8CCB",
"Q  c #5C8AA9",
"!  c #BA7711",
"~  c #75848A",
"^  c #DC595E",
"/  c #F6504F",
"(  c #548DD1",
")  c #F45656",
"_  c #7E8B7F",
"`  c #E95C59",
"'  c #5092DB",
"]  c #D86467",
"[  c #D07812",
"{  c #F05B5C",
"}  c #B5880D",
"|  c #CD7B13",
" . c #FC565A",
".. c #8C8D66",
"X. c #CB7A26",
"o. c #5C91DC",
"O. c #BD8900",
"+. c #6693BC",
"@. c #968E54",
"#. c #5B94D5",
"\$. c #6D93AA",
"%. c #E86361",
"&. c #5A98CE",
"*. c #B58D12",
"=. c #BB8D03",
"-. c #C7821F",
";. c #CA7F28",
":. c #5497EA",
">. c #E86468",
",. c #FA5D61",
"<. c #B98C1F",
"1. c #529CEB",
"2. c #C77580",
"3. c #FE605E",
"4. c #BD8F18",
"5. c #5E9BDF",
"6. c #C0910D",
"8. c #4DA1F6",
"9. c #A39653",
"0. c #679CDB",
"q. c #58A0F0",
"w. c #F36D6A",
"e. c #FE6867",
"r. c #E77274",
"t. c #F36E70",
"y. c #C29815",
"u. c #C19821",
"i. c #FB6D6D",
"p. c #BF992B",
"a. c #FF6C70",
"s. c #CF980D",
"d. c #CF818A",
"f. c #C99920",
"g. c #C39E1B",
"h. c #FF7171",
"j. c #62A8F9",
"k. c #C89E1D",
"l. c #FD7572",
"z. c #C08D9F",
"v. c #C5A22A",
"b. c #6CACF1",
"n. c #FF787A",
"m. c #D3A119",
"M. c #6EACF7",
"N. c #75AAF0",
"B. c #74B0E8",
"V. c #C9A927",
"C. c #DDA311",
"Z. c #D5A327",
"A. c #FF7F7D",
"S. c #6FB3F0",
"D. c #6CB4FE",
"F. c #75B6EE",
"G. c #75B4F9",
"H. c #7BB5E7",
"J. c #CEAC39",
"K. c #F6898B",
"L. c #DDA924",
"P. c #CEAF2D",
"I. c #7EB7E3",
"U. c #CBB338",
"Y. c #D4AF38",
"T. c #DCAF33",
"R. c #EFAF00",
"E. c #CAB642",
"W. c #EBAF15",
"Q. c #7CBFFD",
"!. c #DCB52D",
"~. c #75C3FF",
"^. c #83C0EC",
"/. c #E8B225",
"(. c #E0B33F",
"). c #85C2E7",
"_. c #7BC5F5",
"`. c #DEB638",
"'. c #7EC4FB",
"]. c #EBB73D",
"[. c #8AC5FE",
"{. c #8FC4F7",
"}. c #91C2FD",
"|. c #83C9FF",
" X c #EABB36",
".X c #F8BA18",
"XX c #EFBC2F",
"oX c #F5BD27",
"OX c #F9BB28",
"+X c #DCC350",
"@X c #EAC03A",
"#X c #87D0FF",
"\$X c #96CAFE",
"%X c #E4C453",
"&X c #F3C235",
"*X c #90CFFF",
"=X c #95D1F6",
"-X c #FFC12F",
";X c #EBC848",
":X c #F7C250",
">X c #93D5FF",
",X c #F3C943",
"<X c #9BD3FF",
"1X c #97D7F5",
"2X c #FFC733",
"3X c #F7C854",
"4X c #94DBFF",
"5X c #EECD5C",
"6X c #FECC36",
"7X c #FACA4E",
"8X c #F7C95C",
"9X c #E9D34F",
"0X c #F1D148",
"qX c #E8D357",
"wX c #FFCD41",
"eX c #9EDBFF",
"rX c #F7CE58",
"tX c #9FDFFD",
"yX c #FED244",
"uX c #FFD24D",
"iX c #FCD35C",
"pX c #FBDB49",
"aX c #FFD949",
"sX c #B1DFFF",
"dX c #A2E7FE",
"fX c #FED951",
"gX c #AAE5FE",
"hX c #F0E05A",
"jX c #F5DE5A",
"kX c #FFD767",
"zX c #EEE565",
"xX c #FFE056",
"cX c #FFDD6B",
"vX c #F8E265",
"bX c #FFE05E",
"nX c #FFE75B",
"mX c #FFE470",
"MX c #FFE863",
"NX c #FAEB64",
"BX c #FFE96C",
"VX c #F7EE6D",
"CX c #BFF1FE",
"ZX c #F6EF74",
"AX c #FFEB75",
"SX c #FFF069",
"DX c #F5F478",
"FX c #FFF171",
"GX c #FFF178",
"HX c #D0F1FF",
"JX c #FFF56C",
"KX c #FEF573",
"LX c #FEF67C",
"PX c #FDFB77",
"IX c #FEFD80",
"UX c gray100",
"YX c None",
/* pixels */
"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX",
"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX",
"YXYXYXYXYXYXYXYXYXYXYXYXYX{.:.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX",
"YXYXYXYXYXYXYXYXYXYXYXYXsXHXS.j.:.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYX",
"YXYXYXYXYXYXYXYXYXz M.gXCXeX#X|.Q.D.1.YXYXYXYXYXYXYXYXYXYXYXYXYX",
"YXYXYXYXYXYXYXj.5.M V B.>X4X4X4X>X#XQ.1.x YXYXYXYXYXYXYXYXYXYXYX",
"YXYXYXYX8.j.'.#X#X#X^.&.' B.4XdXtX^.T n W S.x.q.YXYXYXYXYXYXYXYX",
"YXYX..Q #.j.G.Q.|.*X>X4X=Xc.( B.T V W ).1XeX#X_.Q.D.q.1.YXYXYXYX",
"YXYXR.W.m.@.\$.7.M.Q.[.F.0.T C J #.I.gXgXtXtXsXeX=X#X[.Q.5.J % YX",
"YXYX/.OX.XOXW.v._ V x n &._.1X1X1XI.U F.tXgXeX<X\$X}.N.( Y 2.o YX",
"YXYXL.-X&XwX6XwX/.p.9.\$.S.~.#X>XeXsX=XH.T ' b.G.0.J Y z.K.N . YX",
"YXYX4.OXwXwXuXfX@Xf.XX].9.\$.D.'.*X*X*X}.S.T 0 u R d.K.A.%.h   YX",
"YXYXYXOXuXfXnXjX9Xy.5XfXwXXX@.+.j.N.( M r f ^ e ,.l.h.a.>.a YXYX",
"YXYXYXXXyXfXbXMXhXu.%XFXbXiXOXp.~ i 7 d K e.t.t K a.h.e.E h YXYX",
"YXYXYXf.&XxXNXSXVXg.5XFXFXFXcXuX| 9 / ,.3.3.a.b b e.n.l.%.5 YXYX",
"YXYXYXL 4.m.0XSXKXV.%XZXLXGXBXiXX.s B /  .3.h.b b l.n.n.>.2 YXYX",
"YXYXYXYX,XY.u.k.9XV.(.GXIXLXAXkX;.s K / ,.e.n.) c l.l.{ c ; YXYX",
"YXYXYXYXaXNXvXU.4.} T.ZXLXLXAXkX;.s H 3.e.h.n.I g / y 3 > * YXYX",
"YXYXYXYX,XNXFXPXIXE.f.`.vXLXGXkX;.s H / 3./ c - 4 4 q P Z O YXYX",
"YXYXYXYX XMXSXKXIXzX4.J.u.L.cXkX;.s K / 3 = 9 < c t.A.n.D O YXYX",
"YXYXYXYXY.MXSXKXIXZX} qXDXE.4.Z.-.6 3 , e { l.m b A.A.n.v X YXYX",
"YXYXYXYXJ.nXBXFXPXzX4.%XIXDX+Xp.| , > b ,.a.l.t H n.A.t.a   YXYX",
"YXYXYXYX<.XXiXvXLXvX} Y.LXGXmX5XF 6 K ) 3.i.e.4 H n.A.t.8 YXYXYX",
"YXYXYXYXYXYXk.7XbXzX4.Y.GXGXcX8X! 6 K I { e.i.> K A.l.%.& YXYXYX",
"YXYXYXYXYXYXYXYXZ.7X} (.AXAXcX8X! q K K ) e.{ - K >.v 1 o YXYXYX",
"YXYXYXYXYXYXYXYXYXG G J.cXAXcX8X! 6 S K %.t.%.- 1 \$   YXYXYXYXYX",
"YXYXYXYXYXYXYXYXYXYXYXl (.3XkX5X! 6 S I %.>.v @ YXYXYXYXYXYXYXYX",
"YXYXYXYXYXYXYXYXYXYXYXYXYX<.3X3X! q m E ] k + YXYXYXYXYXYXYXYXYX",
"YXYXYXYXYXYXYXYXYXYXYXYXYXYXG ].-.6 N k : YXYXYXYXYXYXYXYXYXYXYX",
"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX-.6 8 + YXYXYXYXYXYXYXYXYXYXYXYX",
"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX# YXYXYXYXYXYXYXYXYXYXYXYXYXYX",
"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX"
};
end-of-xpm

return \$xpm;

} # end icon #}}}2

sub tos { #{{{2

my \$xpm = <<'end-of-xpm';
/* XPM */
static char *tk_________x__[] = {
/* columns rows colors chars-per-pixel */
"48 48 220 2",
"   c #000000",
".  c #0C0504",
"X  c #0C0905",
"o  c #030609",
"O  c #0C0C0B",
"+  c #160404",
"@  c #1D0505",
"#  c #110C03",
"\$  c #0F100F",
"%  c #171102",
"&  c #161209",
"*  c #1A150B",
"=  c #1F180B",
"-  c #090B13",
";  c #171717",
":  c #17181A",
">  c #1C1C1C",
",  c #2F0001",
"<  c #220808",
"1  c #2B0909",
"2  c #320000",
"3  c #3E0101",
"4  c #300F0F",
"5  c #3E0F0F",
"6  c #231C0D",
"7  c #3E0D11",
"8  c #261F11",
"9  c #18211A",
"0  c #2A200C",
"q  c #32250D",
"w  c #272010",
"e  c #2B2211",
"r  c #22201B",
"t  c #2A211F",
"y  c #2E2F1B",
"u  c #302613",
"i  c #352A15",
"p  c #392D17",
"a  c #3E3219",
"s  c #1B2029",
"d  c #242423",
"f  c #292926",
"g  c #2B2A2B",
"h  c #3A3521",
"j  c #333333",
"k  c #373837",
"l  c #373839",
"z  c #3C3D3C",
"x  c #470E0E",
"c  c #441111",
"v  c #4D1313",
"b  c #541414",
"n  c #5B1717",
"m  c #5E1818",
"M  c #6A1213",
"N  c #601818",
"B  c #6C1B1B",
"V  c #7F1F1F",
"C  c #43351B",
"Z  c #47391D",
"A  c #4A3C1E",
"S  c #4A3D20",
"D  c #7B2A2D",
"F  c #6B511E",
"G  c #4F452E",
"H  c #544322",
"J  c #5D4B25",
"K  c #494435",
"L  c #624E26",
"P  c #624D28",
"I  c #645027",
"U  c #645029",
"Y  c #6B552C",
"T  c #6E582C",
"R  c #745C2D",
"E  c #645C3B",
"W  c #775F30",
"Q  c #76602F",
"!  c #7B6231",
"~  c #7C683D",
"^  c #444444",
"/  c #4A4B4A",
"(  c #535454",
")  c #5B5B5B",
"_  c #635A44",
"`  c #795655",
"'  c #5F625F",
"]  c #6E6957",
"[  c #756A50",
"{  c #5E6360",
"}  c #626362",
"|  c #676B67",
" . c #6D6D6C",
".. c #6F726F",
"X. c #737373",
"o. c #757975",
"O. c #7B7A7B",
"+. c #AB1E1F",
"@. c #892222",
"#. c #942525",
"\$. c #9B2323",
"%. c #A12627",
"&. c #A42828",
"=. c #B82324",
"-. c #B52D2D",
";. c #CD2C2C",
":. c #D22A2A",
">. c #DB2D2D",
",. c #CC3333",
"<. c #D43434",
"1. c #DB3636",
"2. c #DE3838",
"3. c #E23939",
"4. c #E83A3A",
"5. c #806531",
"6. c #856B36",
"7. c #8D6F36",
"8. c #8E7238",
"9. c #96793B",
"0. c #9B7C3E",
"q. c #9F7F40",
"w. c #927B49",
"e. c #886D69",
"r. c #D37975",
"t. c #7E817E",
"y. c #9E803F",
"u. c #AC883E",
"i. c #A38341",
"p. c #A88643",
"a. c #AB8943",
"s. c #B08D46",
"d. c #B38F48",
"f. c #B59249",
"g. c #BA944B",
"h. c #BA9C5A",
"j. c #8C8A74",
"k. c #B8A373",
"l. c #C39C4E",
"z. c #CAA24E",
"x. c #CBA251",
"c. c #D0A753",
"v. c #D4A955",
"n. c #DEB259",
"m. c #E3B55B",
"M. c #E7BA5C",
"N. c #EBBC5E",
"B. c #EFBF60",
"V. c #F0C05F",
"C. c #ECC166",
"Z. c #F4C362",
"A. c #F9C763",
"S. c #FFCC66",
"D. c #FFCF68",
"F. c #FFD267",
"G. c #FFD369",
"H. c #FFDB6D",
"J. c #F9CF74",
"K. c #FFDF70",
"L. c #FFE06F",
"P. c #FFE371",
"I. c #FFE974",
"U. c #FFE779",
"Y. c #FFED78",
"T. c #FFF67C",
"R. c #7F8288",
"E. c #848484",
"W. c #838A87",
"Q. c #8A8B8B",
"!. c #8D8E90",
"~. c #939393",
"^. c #959A95",
"/. c #9E9D92",
"(. c #9B9C9B",
"). c #99A099",
"_. c #A4A6A4",
"`. c #A5AAA5",
"'. c #A5ACA8",
"]. c gray67",
"[. c #ACB4B1",
"{. c #B3B4B3",
"}. c #B4BDB8",
"|. c #BBBBBB",
" X c #DA8D89",
".X c #EEABA6",
"XX c #BCC3BC",
"oX c #DFC488",
"OX c #F6D58E",
"+X c #C1C3BB",
"@X c #ECD7A9",
"#X c #E1C4BD",
"\$X c #FFE9B5",
"%X c #C3C3C4",
"&X c #C4CAC4",
"*X c #C4CEC8",
"=X c #CCCDCC",
"-X c #CBD2CC",
";X c #D2D2D2",
">X c #DFDCD4",
",X c #D9D9D9",
"<X c #DBE3DB",
"1X c #E6E5DD",
"2X c #F1F1D9",
"3X c #DFE7E0",
"4X c #DEEAE2",
"5X c #E3E6E3",
"6X c #E3EBE3",
"7X c #E6EFE8",
"8X c #EBEBEB",
"9X c #E7F0E7",
"0X c #E4F1E9",
"qX c #EBF3EB",
"wX c #E7F8EF",
"eX c #FFFFE7",
"rX c #EDFAF1",
"tX c gray96",
"yX c #F2FBF3",
"uX c #FFFFFF",
/* pixels */
"<X<X<X<X<X<X<X<X<X<X<X<X<XqX{.)                         j t.&XqX6X<X<
+X<X<X<X<X<X<X<X<X<X<X<X<X<X",
"<X<X<X<X<X<X<X<X<X<X<X<X8X5X; ; )                             j %XqX6
+X<X<X<X<X<X<X<X<X<X<X<X<X<X",
"<X<X<X<X<X<X<X<X<X5X3XQ.uX%XuXuX5Xz         j ;X].) / ^           | 3
+X6X<X<X<X<X<X<X<X<X<X<X<X<X",
"<X<X<X<X<X<X<X<X3X7X^ ,XuX_.j uX^         j ( ~.%XuXuXuX%X          -
+ XX9X<X<X<X<X<X<X<X<X<X<X<X",
"<X<X<X<X<X<X<X<X7X{ |.'   ,X&X5XuX} ^ )     O O.z uX5X;X=XQ.=X
+ . {.9X1X<X<X<X<X<X<X<X<X<X",
"<X<X<X<X<X<X<X9Xj.O.X.    %X^   / >   ~.E.g > ;X~.|.'   (.|.Q.
+ g   '.0X<X<X<X<X<X<X<X<X<X",
"<X<X<X<X<X<X6X<X  o   ; (.uX|.(.;X=X%XuXuXuXuXuXuXE.                Q
+.^.O   -X<X<X<X<X<X<X<X<X<X",
"<X<X<X<X<X<X9XX./   Q.uXuXuXuXuX8X~.uX=X/ 8XuXuX~.(.X.              g
+ O   > ;X<X<X<X<X<X<X<X<X<X",
"<X<X<X<X<X<X6X  j tXuXuXuXuXuXuX5X( j   ( ;X8XX.E.(.uXr
+   ( 5XuX<X<X<X<X<X<X<X<X<X",
"<X<X<X<X<X6X).    `.uXuXuXuXuXuXuX{.  ].uXuXuXuXuXuXuXuXQ.o
+       | 6X<X<X<X<X<X<X<X<X",
"<X<X<X<X<XqX .      tXuXuXuXuXuXuX,X{.%X_.k.b.w.J.J.OX\$XeXuXR.
+       _.6X<X<X<X<X<X<X<X<X",
"<X<X<X<X<XqXj     o ,XuXuXuXuXuXuX|.Q.  # d.R z.F.S.V.V.F F w.@X .s
+       yX<X<X<X<X<X<X<X<X<X",
"<X<X<X<X<XqXz       ) uXuXuX_.tXuXuXuXC.0.P.S.x.F.S.S.S.G.F.v.0.u.I.o
+Xd   \$ yX<X<X<X<X<X<X<X<X<X",
"<X,X<X<X<XqX/       {.uXuXE.Q.uXuXuX[ #   J n.l.D.S.S.S.S.S.g.a.n.F.H
+.    . yX<X<X<X<X<X<X<X<X<X",
"<X<X<X<X<XqX)     > %XuXuXuXuXuXuXl %   H Z.G.S.D.S.S.S.S.S.F.x.Y C.x
+.      :X4X<X<X<X<X<X<X<X<X",
"<X<X<X<X<XqX..    O.X.%X(.|.uX8X!.8   A P.F.D.S.S.S.S.S.S.S.F.N.y.G.G
+.n.=   ).1X<X:X<X<X<X<X<X<X",
"<X<X<X<X<X7XW.    O       {.|.  : * m.x.G.S.S.S.S.S.S.S.S.S.D.D.D.S.D
+.H..   ^.6X<X<X<X<X<X<X<X<X",
"<X<X<X<X<X7X(.    -       g       = Z.G.S.S.S.S.D.D.H.G.G.D.S.S.S.S.S
+.H.A   _.6X<X<X<X<X<X<X<X<X",
"<X<X<X<X<X6X[.  h.I.M.K         G L.G.S.S.S.S.S.D.Y J J R B.S.S.S.S.S
+.P.Q   :X4X<X<X<X<X<X<X<X<X",
"<X<X<X<X<X<XXX8 I.g.H.G.Y       7.H.S.S.S.S.S.S.D.G.K.K.G.Z.D.S.S.S.H
+.x.  * yX<X<X<X<X<X<X<X<X<X",
"<X<X<X<X<X6X}.S a.0.F.F.P.=     S.F.S.S.S.S.S.D.F.H.K.b.f.v.G.G.D.H.v
+..   _ qX<X<X<X<X<X<X<X<X<X",
"<X<X<X<X<X6X[.H L F.F.B.H.0.  w F.D.S.S.S.S.D.K.c.P         S G.F.n.
+     /.6X<X<X<X<X<X<X<X<X<X",
"<X<X<X<X<X6X'.0 P K.D.x.v.P.X   x.G.S.S.S.S.D.H     * g.! i 8.G.G.9.
+ C # XX6X<X<X<X<X<X<X<X<X<X",
"<X<X<X<X<X<X-X  5.G.D.F.F.P.&   n.G.S.S.S.S.F.B.v.U c.c.! U.G.F.G.6.
+ &   &X6X<X<X<X<X<X<X<X<X<X",
"<X<X<X<X<X<XqXf 8.H.S.S.F.D.    a.G.S.S.S.S.S.S.G.Z.6.    D.S.S.F.x.
+     :X3X<X<X<X<X<X<X<X<X<X",
"<X<X<X<X<X<X7XW.  A.G.F.G.f.    P K.S.S.S.S.S.S.G.Z.w.q.g.G.S.S.D.P.
+     qX<X<X<X<X<X<X<X<X<X<X",
"<X<X<X<X<X<X1X4Xo = A.G.K.!     . K.S.S.S.S.S.S.D.D.F.G.F.S.S.S.S.H.A
+     yX<X<X<X<X<X<X<X<X<X<X",
"<X<X<X<X<X<X<X6X-X  X b.U.i       9.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.G.q
+.  O yX<X<X<X<X<X<X<X<X<X<X",
"<X<X<X<X<X<X<X<XrX(     L.      W T H.F.S.S.S.S.S.S.S.S.S.S.S.S.S.F.H
+.  d qX<X<X<X<X<X<X<X<X<X<X",
"<X<X<X<X<X<X<X<X9XQ.    n.    . v.Y ! G.S.S.S.S.S.S.S.S.S.S.F.G.H.P.Z
+.  z qX<X<X<X<X<X<X<X<X<X<X",
"<X<X<X<X<X<X<X<X7X^.    v.J     6.Z.w H.S.S.S.S.S.S.S.S.S.S.m.U H 0.u
+   o.9X<X<X<X<X<X<X<X<X<X<X",
"<X<X<X<X<X<X<X<X9X'.    a.x.    ! H.f.H.S.S.S.S.S.S.S.S.S.D.G.K.  e
+   XX1X<X<X<X<X<X<X<X<X<X<X",
"<X<X<X<X<X<X<X6X0X^     6.Y.%   a C.a H.G.S.S.S.F.G.H.D.S.S.S.H.M.I.0
+ O yX<X<X<X<X<X<X<X<X<X<X<X",
"<X<X<X<X<X<X6X0Xk       U U.! p . A 0 J H.F.D.F.B.a W P.P.P.H.l.C w
+ ' 0X<X<X<X<X<X<X<X<X<X<X<X",
"<X<X<X<X<X6X6Xt         Z P.Z.  &       f.H.F.H.a # S * * X         .
+ <X6X<X<X<X<X<X<X<X<X<X<X<X",
"<X<X<X<X6X1X4   V @     w L.H.f.        i F.f.P.x.l.U.S.S.I.T.I     ]
+ qX<X<X<X<X<X<X<X<X<X<X<X<X",
"<X<X<X0X#X,     <.*.    O P.S.H.Q         u   H H e P.F.F.l.X a p   X
+X6X<X<X<X<X<X<X<X<X<X<X<X<X",
"4X4X4X X3 @ b   4.4.<     P.D.F.H.a               X 8.H.G.W   Y . e y
+X<X<X<X<X<X<X<X<X<X<X<X<X<X",
">Xr.:.:.\$.1.3.  4.,.+     A.D.S.G.A.w                 l.K.U.R     j.7
+X<X<X<X<X<X<X<X<X<X<X<X<X<X",
"%.>.<.<.<.<.1.c <         v.F.S.S.G.G.A             6 H d.m.P #   9X<
+X<X<X<X<X<X<X<X<X<X<X<X<X<X",
"@ B V @.&.2.2.#.          f.G.D.S.S.D.K.W         * X       0.q _ qX<
+X<X<X<X<X<X<X<X<X<X,X<X<X<X",
"          v #.n     @.-.7 E H.D.S.S.S.F.H.i.                L Y :X4X<
+X<X<X<X<X<X<X<X<X<X<X<X<X<X",
"      v .         < 4.1.<.9 S.G.D.S.S.S.D.H.m.Y             d.2X6X<X<
+X<X<X<X<X<X<X<X<X<X<X<X<X<X",
"    B 4.3.,.#.b     3.,.<.D y H.F.S.S.S.S.D.F.K.F.p.0.0.s.= +X6X<X<X<
+X<X<X<X<X<X<X<X<X<X<X<X<X<X",
"n   b 3.<.,.<.2.<.1 #.<.<.1.O h A.K.D.S.S.S.S.S.F.G.P.P.H   *X4X<X<X<
+X<X<X<X<X<X<X<X<X<X<X<X<X<X",
"N     m 2.<.,.,.<.2.5 4.3.<.%.    ~ b.U.K.P.P.K.P.D.d.u     .X7XwX9X<
+X<X<X<X<X<X<X<X<X<X<X<X<X<X",
"        5 ,.2.,.,.2.b + .               o & 8 p 8           =.+.< e.q
+X0X<X<X<X<X<X<X<X<X<X<X<X<X",
"            #.<.<.2.c     ;.;.b 1 5                     x     \$.M 2 +
+ ` rX6X<X<X<X<X<X<X<X<X<X<X"
};
end-of-xpm

return \$xpm;

} # end icon #}}}2
```sub greyCubeLogo { #{{{2

my \$xpm = <<'end-of-xpm';
/* XPM */
static char *qb3_greyCubeLogo[] = {
/* columns rows colors chars-per-pixel */
"128 128 149 2",
"   c black",
".  c #2D2D2D",
"X  c gray21",
"o  c #15064C",
"O  c #1D0867",
"+  c #220A7B",
"@  c #5D0000",
"#  c #7D0000",
"\$  c #7E075E",
"%  c #7C5301",
"&  c #484848",
"*  c gray33",
"=  c #5B5B5B",
"-  c #626262",
";  c #6C6C6C",
":  c #747474",
">  c #7B7B7B",
",  c #270B8B",
"<  c #2B0C99",
"1  c #2E0DA6",
"2  c #310EB1",
"3  c #340FBB",
"4  c #3710C5",
"5  c #3A11CE",
"6  c #3C11D7",
"7  c #3E12DF",
"8  c #4013E7",
"9  c #4313EE",
"0  c #4514F6",
"q  c #4715FD",
"w  c #6744FA",
"e  c #8A0000",
"r  c #9F0000",
"t  c #A90000",
"y  c #B20000",
"u  c #BA0000",
"i  c #8C5E01",
"p  c #9A6701",
"a  c #A77001",
"s  c #B27702",
"d  c #BD7E02",
"f  c #C90000",
"g  c #D30000",
"h  c #DD0000",
"j  c #D63F3F",
"k  c #E40000",
"l  c #DF064C",
"z  c #DB0867",
"x  c #D60A7B",
"c  c #D76A6A",
"v  c #DA7474",
"b  c #D97C7C",
"n  c #880CA1",
"m  c #A00DA7",
"M  c #9B10D2",
"N  c #9D12DF",
"B  c #8411E0",
"V  c #8713EE",
"C  c #9313E7",
"Z  c #AE11CE",
"A  c #A611D7",
"S  c #B510C5",
"D  c #8D7CEF",
"F  c #8774F1",
"G  c #CC0C99",
"H  c #D10B8B",
"J  c #C10EB1",
"K  c #D5559A",
"L  c #C78502",
"P  c #D08B02",
"I  c #D99102",
"U  c #E19702",
"Y  c #E99C02",
"T  c #F8A602",
"R  c #FFAB03",
"E  c #EDA33B",
"W  c #FCAA2F",
"Q  c #F9A93F",
"!  c #DFA475",
"~  c #DAA37B",
"^  c #EFA75C",
"/  c #F2A854",
"(  c #FEBA45",
")  c #EBA763",
"_  c #E8A66A",
"`  c #E3A570",
"'  c #FBC67B",
"]  c #848484",
"[  c gray54",
"{  c #959595",
"}  c #9A9A9A",
"|  c #A4A4A4",
" . c #A9A9A9",
".. c #B2B2B2",
"X. c #BEB9B9",
"o. c #9689E9",
"O. c #9A8FE6",
"+. c #9983F9",
"@. c #9E95E3",
"\$. c #A998F7",
"%. c #A8A4D6",
"&. c #B6A9F4",
"*. c #C19E8D",
"=. c #D29191",
"-. c #CFA184",
";. c #C9A089",
":. c #D5A280",
">. c #C6A8A8",
",. c #CAA2A2",
"<. c #C1BCBC",
"1. c #C4BFC0",
"2. c #C4C0BF",
"4. c #C5C1C1",
"5. c #C9C4C4",
"6. c #CBC7C8",
"7. c #CBC8C7",
"8. c #CDC9C9",
"9. c #D1CDCD",
"0. c #D3CFD0",
"q. c #D3D0CF",
"w. c #D5D2D2",
"e. c #D8D5D5",
"y. c #DCDCDC",
"u. c #CAC4EE",
"i. c #D0CBEC",
"p. c #EFD7C3",
"a. c #EDD8CA",
"s. c #E0DEDE",
"d. c #E1DFE0",
"f. c #E1E0DF",
"g. c #E4E2E2",
"h. c #E8E6E6",
"j. c #E9E7E8",
"k. c #E9E8E7",
"l. c #ECEBEB",
"z. c #F0EEEE",
"x. c #F0EFF0",
"c. c #F0F0EF",
"v. c #F4F3F3",
"b. c #F7F7F8",
"n. c #F7F8F7",
"m. c #F8F6F6",
"M. c #F8F7F8",
"N. c #F8F8F7",
"B. c #FBFAFA",
/* pixels */
"X.X.X.X.X.X.X.X.X.X.X.X.X.X.X...<.>.<.X.X.X.X.X.X.X...>.X.X.X.X.X...<
+.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.
+<.X.X.X.X.<.>.X.X.X.X.X.X...X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X
+.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.>.X.",
"X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.<...X.X.X.X.X.X.X.X.<.<.X.X.X.X.X.X.X
+.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.
+X.X.X.X.X...<.X.X.X.X.X.X.2.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X
+.X.X.X.X.X.X.X.X.X.X.X.X.<.X.X.X.X.X.X.X.X.X.2.X.",
"X.X.X.X.X.X.X.X.X.X.X.X.<.X.<.<.X.<.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.<
+.2.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.
+X.X.X.X.X.X.X.X.X.X.X...2.X.2.X.X.X.X.X.X.X.X.<.X.<.X.X.X.X.X.X.X.X.X
+.X.X.<.X.X.2.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.",
"X.X.X.X.X.X.X.X.X.X.<.X.X.X.X.X.X.X.X.X.<.X.X.X.X.<.<.X.<.X.X.X.<.X.X
+...X.X.<.X.X.X.X.X.<.X.X.<.X.X.X.<.X.X.X.X.<.X.X.X.X.X.X.X.X.X.X.X.X.
+2.X.X.<.X.<.X.<.X.X.<.<.X.<...X.<.X.X.<.X.X.X.X.X.X.X.X.<.<.X.<.X.X.X
+.X.<.X.X.<.X.X.X.X.X.2.X.X.<.X.<.<.X.<.X.<.X.<.X.",
"<.X.X.<.X.<.X.<.<.>.<.X.<.X.<.<.X.<.X.<.X.X.X.X.<.X.<.X.X.<.X.X.X.<.X
+.X.<.X.X.<.<.X.X.X.<.X...2.X.X.<.X.<.X.<.X.X.<.X.<.X.<.X.<.2.X.<.X.X.
+<.X.X.<.X.<.X.X.X.X.<.X.X.<.<.X.<.<.X.X.<.<.X.<.X.X.X.X.X.X.<.X.X.X.<
+.X.X.<.X.X.X.2.%.2.X.X.X.X.X.<.X.<.X.<.X.X.<.X.<.",
"X.X.<.X.<.X.<.X.<...<.<.X.<.<.<.<.X.<.X.X.<.<.<.X.X.<.X.<.X.X.<.<.X.<
+.<.<.<.<.X.X.<.<.<.<.<.<.<.<.<.X.<.X.<.<.<.<.X.<.X.X.X.<.X.X.2.X.<.<.
+X.<.X.X.<.X.<.<.<.<.<.<.<.<.X.2.X.<.X.<.<.X.<.<.<.<.<.<.<.<.X.<.<.<.X
+.<.<.<.X.<.<.<.<.<.2.<.X.X.2.X.<.<.<.<.<.2.X.X.<.",
"<.<.X.<.X.<.<.<.<.<.<.<.<.<.<.<.<.<.<.X.<.<.<.X.<.<.<.<.<.X.<.<.<.<.<
+.<.X.<.X.<.<.<.<.<.<.<.<.X.<.<.X.<.<.<.<.X.<.<.<.X.<.1.<.<.<.X.2.X.<.
+<.<.2.<.<.<.X.<.<.<.X.<.<.<.<.X.<.<.<.<.<.X.<.<.X.<.<.<.<.<.<.<.<.2.<
+.X.<.<.<.<.<.<.<.<.<.<.<.X.X.X.2.X.<.<.X.<.<.<.<.",
"X.<.<.<.<.<.<.X.<.<.<.<.<.<.<.<.X.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.X.<.<
+.X.<.<.2.X.<.<.<.X.X.<.<.<.<.<.<.<.<.<.<.<.X.<.<.1.X.1.<.<.X.2.<.<.2.
+X.<.X.<.<.<.<.<.<.<.<.X.2.X.<.X.2.<.<.<.<.<.<.<.<.<.<.<.X.<.<.<.X.<.<
+.<.<.<.<.<.<.<.<.<.<.<.<.2.2.2.2.<.<.<.<.<.<.<.<.",
"<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.X.2.X
+.X.2.X.<.<.<.<.<.<.<.<.<.4.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.
+<.<.<.<.<.<.<.<.<.<.<.<.<.<.2.<.<.2.<.<.<.<.<.<.<.<.2.<.2.2.X.<.<.<.<
+.2.<.<.<.<.<.<.<.<.<.4.<.<.<.1.<.<.2.2.2.X.X.2.2.",
"<.<.<.<.<.5.<.<.<.<.<.<.<.<.<.<.<.<.2.<.2.<.<.<.<.<.<.<.<.<.<.<.2.2.2
+.2.2.2.2.X.2.<.<.<.<.<.2.4.<.<.<.<.<.<.<.2.<.2.1.1.<.<.4.<.<.5.<.<.<.
+2.<.<.<.<.2.<.<.2.5.<.2.X.2.X.<.2.2.X.<.4.<.<.2.<.<.<.2.<.2.2.1.<.<.1
+.<.2.2.<.<.<.4.<.4.<.<.<.1.<.<.1.2.<.X.2.2.2.<.<.",
"<.<.<.<.<.<.5.<.<.<.<.5.<.2.<.<.2.2.<.<.<.2.<.<.<.<.<.<.<.<.<.5.X.2.2
+.2.2.2.<.<.<.2.<.2.2.<...4.2.<.2.<.<.4.<.<.<.<.1.1.<.<.<.<.<.<.<.1.2.
+<.<.<.<.5.<.<.<.<.<.<.2.2.2.2.2.X.2.2.<.4.4.<.<.4.2.<.2.<.<.2.<.1.2.<
+.1.<.2.<.<.2.<.4.<.<.4.<.<.1.1.1.<.2.<.2.<.<.<.2.",
"<.<.<.<.<.<.<.<.5.<.<.<.<.<.5.2.2.<.2.2.2.<.<.5.<.<.<.5.5.<.<.<.2.2.2
+.2.X.2.2.2.2.2.2.<.2.2.2.2.2.<.2.2.<.2.4.2.2.<.1.1.4.<.4.4.<.5.<.<.2.
+2.5.<.<.<.<.<.5.5.2.<.<.2.2.2.2.2.2.2.<.2.<.<.4.<.2.<.2.2.<.2.2.1.<.2
+.2.2.2.1.1.4.<.<.<.4.<.1.<.4.<.2.2.2.2.X.2.<.<.2.",
"5.<.<.<.<.5.<.1.<.<.5.<.<.<.1.<.2.<.2.2.5.<.<.<.5.<.<.<.<.<.5.<.2.4.%
+.4.2.2.<.4.2.2.2.<.2.2.2.2.<.2.2.2.2.2.<.2.2.<.<.4.<.4.4.<.<.2.1.2.<.
+1.1.2.<.<.2.2.<.<.<.5.2.2.2.4.%.2.2.4.4.<.4.2.2.2.2.4.2.1.1.2.1.2.2.2
+.1.2.1.2.4.<.<.4.2.2.2.2.1.5.2.2.2.2.2.2.2.5.<.5.",
"5.<.5.1.5.<.<.5.<.5.1.<.<.5.1.<.2.2.1.1.<.<.5.<.<.<.5.<.5.<.5.<.2.2.4
+.4.4.4.4.<.2.2.4.2.2.2.2.2.2.2.4.2.2.2.4.2.2.4.4.4.<.4.4.y.y.0.2.2.2.
+2.5.<.5.5.<.<.<.5.<.<.2.2.4.2.4.2.4.2.2.4.<.4.2.4.4.2.1.1.1.4.4.1.4.2
+.1.1.1.1.4.4.4.1.2.2.1.2.1.1.2.2.2.<.5.<.2.2.5.<.",
"<.<.5.<.<.5.<.<.5.<.<.<.5.<.5.<.5.1.1.1.<.5.<.<.5.<.<.5.<.5.<.5.4.2.4
+.2.2.2.<.4.4.4.4.2.4.4.4.4.2.2.2.2.4.4.2.<.4.4.9.y.y.y.y.y.d.y.y.y.y.
+y.2.2.<.5.2.5.2.2.2.2.2.2.4.4.4.4.2.4.4.4.4.4.4.2.2.4.1.1.1.4.4.4.4.2
+.1.4.4.4.4.4.2.4.1.2.1.1.1.1.2.2.5.<.<.5.2.5.<.5.",
"5.<.<.5.5.<.5.<.<.5.5.5.<.5.<.5.2.1.2.5.<.5.5.5.<.5.5.<.5.<.5.<.4.4.2
+.4.4.4.4.4.4.4.4.2.4.2.4.4.4.2.4.4.4.4.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.
+y.y.y.y.y.9.5.5.2.5.2.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.2
+.1.4.4.4.4.4.4.2.1.5.2.5.1.5.1.2.5.2.5.<.5.<.5.<.",
"4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.1.5.1.5.4.4.4.4.4.4.4.4.4.5.4.4.4.4.4
+.4.4.4.4.4.4.4.4.4.8.4.4.4.5.w.y.y.y.y.y.y.y.y.y.f.y.y.y.y.y.y.y.y.y.
+y.y.y.y.y.y.y.f.y.y.4.4.5.5.4.4.4.4.4.2.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4
+.4.5.4.4.5.4.4.4.5.5.2.2.2.2.5.2.5.2.1.5.2.1.5.1.",
"4.4.4.4.4.4.4.4.4.5.4.4.4.5.4.4.5.1.5.2.4.5.4.4.4.4.5.4.4.1.5.4.4.4.5
+.4.4.4.5.4.4.4.4.4.8.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.d.y.y.y.y.
+y.y.y.y.y.y.y.y.y.y.y.y.y.y.w.4.4.4.4.5.4.5.4.4.4.4.5.4.4.4.4.5.4.5.4
+.4.4.4.4.4.4.5.4.5.2.5.5.5.5.2.5.2.5.5.1.1.5.1.5.",
"5.4.4.4.4.4.4.5.4.5.4.5.4.5.4.4.5.1.1.5.4.4.4.4.5.5.4.4.5.2.4.5.4.5.4
+.5.5.5.4.4.w.y.y.y.y.y.y.y.y.y.g.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.
+d.d.y.y.y.y.y.y.f.y.y.y.y.y.y.y.y.y.y.5.5.8.8.5.4.5.4.5.4.4.5.4.5.4.5
+.5.4.4.5.5.4.4.5.5.2.1.5.2.5.2.4.5.5.5.2.1.5.5.5.",
"5.5.5.4.5.5.4.5.5.4.4.5.4.4.5.4.5.5.5.1.5.4.5.5.5.4.4.5.5.4.5.4.5.4.5
+.w.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.f.y.y.y.y.y.y.y.y.y.
+y.y.y.y.y.y.f.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.w.4.4.5.5.5.5.5.5.4.4.5
+.5.5.5.5.4.5.5.4.1.5.5.5.5.5.5.5.5.1.5.5.5.1.5.5.",
"4.5.5.4.4.5.5.4.5.4.4.5.5.4.5.4.5.2.5.5.2.5.5.5.4.5.5.5.5.5.4.w.y.y.y
+.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.q q q q q q q q q q q q
+q q q q q q q d.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.4.4.5.5.5.5.5
+.4.5.4.5.5.4.5.4.5.5.5.5.5.2.2.7.5.5.5.5.5.5.1.5.",
"5.5.5.5.5.5.5.5.4.8.5.5.4.4.8.4.5.5.5.5.5.5.5.5.5.5.8.y.y.y.y.y.y.y.y
+.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.f.y.q q q q q q q q q q q q
+q q q q q q q y.y.y.y.y.g.y.y.y.f.y.y.y.g.y.y.y.y.y.y.y.y.y.y.y.w.5.5
+.7.5.5.5.5.5.5.7.5.5.5.5.5.5.5.5.5.1.5.5.6.5.5.6.",
"5.5.5.5.5.5.5.5.4.8.4.8.4.8.5.4.5.5.5.5.5.5.w.y.y.y.y.y.y.y.y.y.y.y.y
+.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.q q q q q q q q q q q q
+q q q q q q q     y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y
+.y.y.5.5.5.5.7.8.5.6.5.5.5.5.5.5.5.5.5.7.5.5.5.5.",
"5.5.5.5.5.5.5.5.5.4.8.4.8.5.5.8.5.9.d.y.y.y.y.y.y.y.y.y.y.y.y.y.y.i.k
+.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.q q q q q q q q q q q q
+q q q q q q q     y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y
+.y.y.y.y.y.y.w.8.5.5.5.7.6.5.6.7.6.6.5.6.5.6.5.5.",
"8.5.5.5.5.5.5.8.8.4.8.4.8.w.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y
+.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.q q q q q q q q q q q q
+q q q q q q q     f.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y
+.y.y.y.f.y.y.y.y.y.y.y.8.5.8.5.5.5.5.5.7.5.6.5.5.",
"5.5.5.8.8.5.5.5.8.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y
+.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.g.y.y.y.y.y.y.q q q q q q q q q q q q
+q q q q q q q     y.y.y.y.y.y.y.y.g.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.g
+.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.6.6.7.7.6.5.6.6.",
"8.5.8.5.5.5.8.5.{ } ..y.y.y.y.y.y.g.y.y.y.y.y.y.y.y.d.y.y.y.y.y.y.y.y
+.y.y.y.y.y.k.i.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.q q q q q q q q q q q q
+q q q q q q q     y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y
+.y.y.y.y.y.y.y.y.y.y.y.y.y.8.X...6.6.7.7.7.7.6.7.",
"8.5.5.8.8.8.5.8. .{ { { | 8.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.d.y.y.y
+.i.y.y.y.y.y.y.y.y.y.y.y.g.y.y.y.y.g.y.y.y.y.q q q q q q q q q q q q
+q q q q q q q     y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y
+.y.y.y.y.y.y.y.y.y.y.w.5.........6.6.6.6.6.7.6.6.",
"7.7.7.7.8.5.8.8...{ { { { { } ..i.y.y.y.y.y.y.y.y.y.g.y.y.y.y.y.y.y.y
+.k.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.g.y.y.y.y.y.q q q q q q q q q q q q
+q q q q q q q     y.y.y.g.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y
+.y.y.y.y.y.y.y.t.8.X...........4.6.8.7.7.6.7.8.7.",
"7.7.7.7.5.8.5.8.8.{ { { { { } { }  .8.y.y.y.y.y.y.y.y.y.d.y.y.y.y.y.y
+.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.q q q q q q q q q q q q
+q q q q q q q     y.y.y.y.y.y.y.y.g.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y
+.y.y.y.y.y.w.4.................q.7.8.8.8.8.8.8.6.",
"8.8.8.8.8.8.8.8.y.{ { { { { { { { { { } X.w.y.y.y.y.y.y.y.y.y.y.y.y.y
+.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.q q q q q q q q q q q q
+q q q q q q q     f.y.y.y.y.y.y.y.y.y.y.y.y.y.y.i.g.y.y.g.y.y.y.y.g.y
+.y.y.t.8.%.....................y.8.8.8.8.8.8.8.8.",
"8.8.8.8.8.8.8.8.8.{ { { { { { { { { { { { }  .9.y.y.y.y.y.y.y.y.y.y.y
+.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.q q q q q q q q q q q q
+q q q q q q q     y.y.y.y.y.y.y.y.y.y.g.y.y.y.y.g.y.y.y.y.y.y.y.y.y.y
+.q.5...........................9.8.8.8.8.8.8.8.8.",
"8.8.8.8.8.8.8.8.8.{ { { { { { { { { { { { { { { } 4.t.y.y.y.y.y.y.y.y
+.d.y.f.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.d.q q q q q q q q q q q q
+q q q q q q q     y.y.y.y.y.y.y.y.s.f.y.y.y.y.y.y.y.y.y.y.y.y.y.y.8..
+...............................9.8.9.8.8.8.8.8.8.",
"8.8.8.8.8.9.8.8.8.| { { { { { { { { { { { { { { { { { ..8.d.y.y.y.y.y
+.y.y.y.y.y.y.f.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.q q q q q q q q q q q q
+q q q q q q q     y.y.y.y.f.y.y.y.y.f.y.y.y.y.y.y.y.y.y.y.y.w.4......
+...............................9.8.8.9.8.9.8.8.9.",
"8.8.8.8.8.8.8.9.8...} { { { { { { { { { { { { { { { { { { } <.t.y.y.y
+.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.q q q q q q q q q q q q
+q q q q q q q     y.y.y.y.y.y.f.y.f.f.y.y.y.y.y.y.d.y.y.8............
+.............................1.8.9.8.9.8.8.8.8.9.",
"9.9.8.9.9.8.9.8.8.8.} { { { { { { { { { { { { { { { { { { ;.^ R R R R
+ R R R R R R 3.y.y.y.y.g.y.y.d.y.y.y.y.d.y.y.q q q q q q q q q q q q
+q q q q q q q     y.f.i.\$.q q q q q q q q q q +.u.q.X................
+.............................w.9.8.9.8.9.9.9.8.9.",
"9.8.8.9.9.9.8.9.8.y.{ { { { { { { { { { { { { { { { { ~ R R R R R R R
+ R R R R R R R R ( t.f.y.y.' R R R R R R R R R R R R R R R R R q q q
+q q q q q q q     &.q q q q q q q q q q q q q q q V K k k k k u h k k
+ ~ ,................. .......y.9.9.9.9.9.9.8.9.9.",
"9.9.9.9.9.9.9.9.q.8.{ { { { { { { { { { { { { { { ;.R R R R R R R R R
+ R R R R R R R R R R ' y.y.R R R R R R R R R R R R R R R R R R q q q
+q q q q q q q < q q q q q q q q q q q q q q q q J k k k k k k g h k k
+ k k b ......................9.9.9.9.9.9.9.9.9.9.",
"9.9.9.9.9.9.9.9.q.8.{ { { { { { { { { { { { { { ` R R R R R R R R R R
+ R R R R R R R R R R R R a.R R R R R R R R R R R R R R R R R R q q q
+q q q q q q q q q q q q q q q q q q q q q q q x k k k k k k k k k k k
+ k k k v ....................0.9.9.9.9.9.9.9.9.9.",
"9.9.9.9.9.9.8.9.q.q.| { { { { { { { { { { { { ) R R R R R R R R R R R
+ R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R     q
+q q q q q q q q q q q q q q q q q q q q q q m k k k k k k k k k k k k
+ k k k h =...................0.0.9.9.9.9.9.9.9.9.",
"9.9.q.q.9.q.9.q.q.q...{ { { { { { { { { { { _ R R R R R R R R R R R R
+ R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R     q
+q q q q q q q q q q q q q q q q q q q q q V k k k k k k k k k k k k k
+ k k k k j ................4.q.9.9.9.0.q.q.q.q.q.",
"q.q.q.q.9.9.9.q.q.q.5.{ { { { { { { { { { ~ R R R R R R R R R R R R R
+ R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R     q
+q q q q q q q q q q q q q q q q q q q q q J k k k k k k k h @ y k k k
+ k k k k h { ..............w.0.q.0.0.0.0.0.0.q.q.",
"0.0.0.0.q.0.q.q.q.q.y.{ { { { { { { { { { R R R R R R R R R R R R R R
+ R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R     q
+q q q q q q q q q q q q q q q q q q q q q z k k k k k k k e     k k k
+ k k k k k ; ..............y.q.q.0.0.0.0.w.0.q.0.",
"q.0.0.0.0.0.q.q.q.q.q.{ { { { { { { { { ^ R R R R R R R R R R R R R R
+ R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R     q
+q q q q q q q q q q q q q q q q q q q q q q n r f k k k k   O B k k k
+ k k k k f   ..............w.q.q.0.0.0.0.0.0.0.0.",
"w.0.w.0.w.q.q.w.w.w.w.{ { { { { { { { *.R R R R R R R R R R R R R R R
+ R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R     q
+q q q q q q q q q q q q q q q q q q q q q q O               6 x k k k
+ k k k k e   ..............q.q.e.w.q.0.q.w.0.w.0.",
"0.w.w.w.w.q.w.q.w.w.w. .{ { { { { { { / R R R R R R R R R R R R R R R
+ R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R     q
+q q q q q q q q q q q q q q q q q q q q q q q 8 4 ,       f k k k k k
+ k k k u   - ............X.w.q.q.w.q.e.w.w.w.w.w.",
"w.w.w.w.w.q.w.w.w.q.w...{ { { { { { { R R R R R R R R R R R R R R R R
+ R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R     q
+q q q q q q q q q q q q q q q q q q q q q q q q q q q q q H k k k k k
+ k k e     } ............2.e.0.w.e.q.w.w.0.w.e.q.",
"w.w.w.w.w.w.w.w.w.w.w.8.{ { { { { { ! R R R R R R R R R R R R R R R R
+ R R R R R s % d R R R R R R R R R R R R R R R R R R R R R R R     q
+q q q q q q q q q q q 5 O < q q q q q q q q q q q q q q q H k k k k k
+ k k t   > ..............w.0.e.q.e.w.w.w.e.w.w.e.",
"w.w.w.w.w.w.w.e.e.w.w.y.{ { { { { { R R R R R R R R R R R R R R R R R
+ R R R T           T R R R R R R R R R R R R R R R R R R R R R     q
+q q q q q q q q q q O         9 q q q q q q q q q q q q q z k k k k k
+ k k k k ,...............r.e.w.w.e.w.w.w.w.w.w.w.",
"w.w.e.w.w.e.e.w.w.w.w.w.{ { { { { { R R R R R R R R R R R R R R R R R
+ R R R               R R R R R R R R R R R R R R R R R R R R R     q
+q q q q q q q q q         :  .{ q q q q q q q q q q q q q k k k k k k
+ k k k k k >.............e.e.e.w.w.w.e.w.e.e.e.e.",
"w.e.w.w.w.e.w.e.e.w.w.w.{ { { { { *.R R R R R R R R R R R R R R R R R
+ R R a         : ] ; a R R R R R R R R R R R R R R R R R R R R     q
+q q q q q q q q 1       | ......@.q q q q q q q q q q q q C \$ @ h k k
+ k k k k k c ............w.e.e.w.e.w.e.e.w.e.w.e.",
"e.w.e.e.e.w.e.w.e.w.e.e. .{ { { { ^ R R R R R R R R R R R R R R R R R
+ R R       . { { { { { R R R R R R R R R R R R R R R R R R R R     q
+q q q q q q q q       ............q q q q q q q q q q q q q     # k k
+ k k k k k g  ...........e.w.e.e.e.e.w.e.e.w.e.e.",
"w.e.e.e.e.w.e.e.e.e.e.w.X.{ { { { R R R R R R R R R R R R R R R R R R
+ R R       { { { { { { ( R R R R R R R R R R R R R R R R R R R     q
+q q q q q q q 9     { ............w q q q q q q q q q q q q 8 8 9 k k
+ k k k k k k : ........4.e.e.e.e.e.e.e.e.e.e.w.e.",
"e.e.e.e.e.e.e.e.e.e.e.e.5.{ { { { R R R R R R R R R R R R R R R R R R
+ R I     > { { { { { { ! R R R R R R R R R R R R R R R R R R R     q
+q q q q q q q 2     ..............D q q q N G l k k k k k V q q q k k
+ k k k k k k & ........w.e.e.e.e.e.e.e.e.e.e.e.e.",
"e.e.e.e.e.e.e.e.e.e.e.e.t.{ { { { R R R R R R R R R R R R R R R R R R
+ R s     } { { { { { { ;.R R R R R R R R R R R R R R R R R R R     q
+q q q q q q q O   & ..............#.q q q x k k k k k k k Z q q A k k
+ k k k k k g   ........y.t.e.e.t.t.t.r.e.e.e.r.e.",
"e.e.e.e.e.e.e.e.t.e.r.e.t.{ { { { R R R R R R R R R R R R R R R R R R
+ R %     { { { { { { { { R R R R R R R R R R R R R R R R R R R     q
+q q q q q q q     [ ................q q q S k k k k k k k k M N k k k
+ k k k k k y   ........t.t.e.r.t.e.e.e.r.t.r.e.r.",
"r.r.e.r.e.e.t.e.e.e.t.e.e.{ { { { R R R R R R R R R R R R R R R R R R
+ R     = { { { { { { { { R R R R R R R R R R R R R R R R R R R     q
+q q q q q q q      .................q q q q k k k k k k k k k k k k k
+ k k k k k @ * ........e.e.e.e.e.t.t.r.r.t.r.r.r.",
"e.r.e.y.e.e.s.e.e.e.e.s.e.| { { { R R R R R R R R R R R R R R R R R R
+ R     : { { { { { { { { R R R R R R R R R R R R R R R R R R R     q
+q q q q q q q     ..................q q q q m k k k k k k k k k k k k
+ k k k k y   > ......X.e.e.s.y.t.t.t.t.r.t.y.r.r.",
"t.e.r.y.e.s.e.e.e.e.e.e.e.X.{ { { R R R R R R R R R R R R R R R R R R
+ R     [ { { { { { { { { R R R R R R R R R R R R R R R R R R R     q
+q q q q q q q     ..................q q q q q u k k k k k k k k k k k
+ k k k g      .......2.y.s.e.e.t.y.r.r.r.e.e.r.y.",
"t.y.t.r.e.e.s.s.r.e.s.y.e.5.{ { { R R R R R R R R R R R R R R R R R R
+ R     { { { { { { { { { R R R R R R R R R R R R R R R R R R R     q
+q q q q q q q     ..................q q q q q 6 r k k k k k k k k k k
+ k k u     > ........9.e.s.e.s.e.t.y.t.y.y.y.y.e.",
"y.r.y.e.r.y.e.e.y.s.s.e.e.y.{ { { R R R R R R R R R R R R R R R R R R
+ R     { { { { { { { { { R R R R R R R R R R R R R R R R R R R     q
+q q q q q q q     ................%.q q q q q q 1   t k k k k k k k k
+ u @     & ..........y.y.s.e.s.e.e.s.e.s.t.s.e.s.",
"t.y.r.y.e.y.s.e.s.e.y.t.s.y.{ { { R R R R R R R R R R R R R R R R R R
+ R p   { { { { { { { { ;.R R R R R R R R R R R R R R R R R R R     q
+q q q q q q q +   ................O.q q q q q q q 4
+         ............y.t.t.e.e.s.t.t.s.e.y.y.s.e.",
"y.y.t.y.y.s.e.s.e.e.s.e.e.s.{ { { R R R R R R R R R R R R R R R R R R
+ R P   { { { { { { { { ! R R R R R R R R R R R R R R R R R R R     q
+q q q q q q q 3   ................F q q q q q q q q q 3
+   1     ............y.y.e.s.s.s.y.y.t.s.e.s.e.s.",
"y.t.y.y.y.y.s.e.s.s.e.s.y.s.| { { R R R R R R R R R R R R R R R R R R
+ R R   { { { { { { { { Q R R R R R R R R R R R R R R R R R R R     q
+q q q q q q q 9   | ..............q q q q q q q q q q q q q q q q q q
+ q q     ..........X.e.s.s.s.e.e.s.s.s.e.s.s.e.s.",
"s.s.s.s.s.e.s.y.t.s.s.s.y.y.X.{ { R R R R R R R R R R R R R R R R R R
+ R R   > { { { { { { { R R R R R R R R R R R R R R R R R R R R     q
+q q q q q q q q   ] ..............q q q q q q q q q q q q q q q q q q
+ q 6     ..........5.y.y.y.s.y.s.s.s.s.e.s.e.y.s.",
"e.e.s.e.s.s.s.y.y.y.y.y.y.y.8.{ { / R R R R R R R R R R R R R R R R R
+ R R p - { { { { { { ~ R R R R R R R R R R R R R R R R R R R R     q
+q q q q q q q q 1 & ............@.q q q q q q q q q q q q q q q q q q
+ q ,     ..........e.y.y.s.y.s.y.e.s.s.s.s.s.s.s.",
"s.s.s.s.s.s.s.s.y.y.y.y.f.y.y.{ { -.R R R R R R R R R R R R R R R R R
+ R R R . { { { { { { R R R R R R R R R R R R R R R R R R R R R     q
+q q q q q q q q q   ............q q q q q q q q q q q q q q q q q q q
+ q     ; ..........f.y.y.y.s.y.y.s.s.s.e.s.e.s.s.",
"s.s.s.s.y.e.s.s.s.s.y.y.y.f.y.{ { { R R R R R R R R R R R R R R R R R
+ R R R Y { { { { { W R R R R R R R R R R R R R R R R R R R R R     q
+q q q q q q q q q 0 { ........w q q q q q q q q q q q q q q q q q q q
+ q     } ..........s.s.y.s.s.s.s.s.s.s.s.s.s.s.s.",
"s.s.e.y.s.s.d.s.s.y.s.s.y.d.y.} { { R R R R R R R R R R R R R R R R R
+ R R R R R :.*.) R R R R R R R R R R R R R R R R R R R R R R R     q
+q q q q q q q q q q q o.%.O.q q q q q q q q q q q q q q q q q q q q q
+ 2     ............s.f.y.y.f.s.s.s.s.s.s.s.s.s.s.",
"s.s.s.s.s.s.s.s.s.s.s.s.d.y.d. .{ { ! R R R R R R R R R R R R R R R R
+ R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R     q
+q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q
+       ..........X.s.f.d.g.y.s.s.s.s.f.s.s.s.s.s.",
"s.s.s.s.s.s.s.s.s.s.s.s.f.f.f.X.{ { { R R R R R R R R R R R R R R R R
+ R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R     q
+q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q 7
+     [ ..........5.d.d.d.y.s.f.s.s.f.s.f.s.s.s.s.",
"s.s.s.s.s.s.f.s.s.s.s.s.f.g.y.8.{ { { _ R R R R R R R R R R R R R R R
+ R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R     q
+q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q O
+     ............w.d.d.d.g.s.g.s.f.s.f.f.f.s.s.s.",
"d.s.f.f.g.g.s.f.d.d.d.d.f.f.d.y.{ { { { R R R R R R R R R R R R R R R
+ R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R     q
+q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q 6
+   - ............g.s.g.s.s.d.f.f.f.f.f.f.f.d.s.s.",
"s.s.h.s.f.f.s.g.g.f.d.d.g.f.d.d.{ { { { ! R R R R R R R R R R R R R R
+ R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R     q
+q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q
+    .............s.s.g.s.f.d.h.s.h.f.f.d.f.h.d.h.",
"h.f.g.s.g.f.g.s.g.f.g.f.d.d.d.g.} { { { { E R R R R R R R R R R R R R
+ R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R     q
+q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q <
+ ; ..............g.s.g.g.h.s.d.d.s.f.h.d.d.d.f.h.",
"s.h.f.s.f.g.h.s.f.g.g.f.g.d.g.g. .{ { { { { T R R R R R R R R R R R R
+ R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R     q
+q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q 4
+ ..............X.s.h.s.g.d.h.h.f.h.s.s.h.f.h.f.d.",
"g.g.g.h.g.s.s.h.g.g.g.g.g.g.g.g.X.{ { { { { : T R R R R R R R R R R R
+ R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R     q
+q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q 5       {
+ ..............5.h.g.g.h.h.d.f.d.f.d.h.d.h.d.h.d.",
"g.g.g.s.g.g.h.s.g.g.f.g.f.g.g.g.8.{ { { { { { * I R R R R R R R R R R
+ R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R     q
+q q q q q q + q q q q q q q q q q q q q q q q q q q q q q 3       > .
+...............e.h.s.g.s.f.d.h.h.h.h.d.h.h.d.d.h.",
"g.g.h.g.g.h.s.h.g.h.g.g.g.g.g.g.y.{ { { { { { { . a R R R R R R R R R
+ R R R R R R R R R R R a R R R R R R R R R R R R R R R R R R R     q
+q q q q q q     7 q q q q q q q q q q q q q q q q q q q ,       : ...
+...............y.h.g.h.g.h.h.d.h.h.f.h.f.f.h.h.f.",
"g.g.s.g.g.h.s.h.g.g.h.g.g.g.g.g.h.{ { { { { { { { .   L R R R R R R R
+ R R R R R R R R R d     R R R R R R R R R R R R R R R R R R R     q
+q q q q q 7     } , 0 q q q q q q q q q q q q q q q 1         ] .....
+...............g.g.g.h.g.d.h.h.d.h.h.f.h.j.f.h.h.",
"g.g.h.g.g.g.h.g.g.h.g.h.g.g.j.g.g.} { { { { { { { { =     i U R R R R
+ R R R R R R I %         R R R R R R R R R R R R R R R R R R R
+                ....-   2 q q q q q q q q q q 6 +           } .......
+...............h.g.g.g.h.g.h.h.g.k.g.g.h.g.g.h.g.",
"h.g.g.h.h.g.g.h.g.g.g.g.h.g.g.h.g. .{ { { { { { { { { >
+                         R R R R R R R R R R R R R R R R R R R
+              - ......} X                               { ...........
+...............h.h.h.g.h.g.h.h.g.h.k.h.g.h.h.g.h.",
"h.g.h.g.g.j.h.h.j.j.g.h.g.h.h.h.h.X.{ { { { { { { { { { { ;
+                       ; R R R R R R R R R R R R R R R R R R R     ..
+............................[                     ; | ...............
+.............5.k.j.g.h.h.g.h.h.h.h.h.h.h.h.g.h.h.",
"h.h.h.j.h.h.g.h.j.g.j.h.h.j.g.h.h.9.{ { { { { { { { { { { { } ] *
+                 = [ { { R R R R R R R R R R R R R R R R R R R     ..
+.....................................................................
+.............w.h.h.h.h.j.h.h.h.h.h.g.h.h.h.h.h.h.",
"h.h.h.h.h.h.h.h.h.h.h.h.j.h.h.h.k.g.8.{ { { { { { { { { { { { { { { {
+ { { { { { { { { { { { { R R R R R R R R R R R R R R R R R R R     ..
+.....................................................................
+...........8.k.h.j.h.j.k.j.k.k.h.j.k.k.k.h.h.h.k.",
"h.h.h.h.h.h.j.j.h.k.h.h.j.h.j.h.k.j.j.h.} { { { { { { { { { { { { { {
+ { { { { { { { { { { { { R R R R R R R R R R R R R R R R R R R     ..
+.....................................................................
+.........f.j.k.k.j.h.k.k.j.j.k.j.k.j.j.k.h.h.k.k.",
"h.j.h.h.h.j.h.k.j.h.j.j.k.k.h.k.j.j.j.j.j. .{ { { { { { { { { { { { {
+ { { { { { { { { { { { { R R R R R R R R R R R R R R R R R R R     ..
+.....................................................................
+.....X.j.j.j.j.k.j.j.j.k.j.j.j.j.k.j.k.k.j.k.k.k.",
"j.j.k.l.k.j.k.k.k.k.k.j.k.j.k.j.j.j.j.j.l.j.4.{ { { { { { { { { { { {
+ { { { { { { { { { { { { R R R R R R R R R R R R R R R R R R R     ..
+.....................................................................
+...5.j.j.j.j.l.k.j.j.k.k.j.j.l.j.j.j.j.k.l.k.k.l.",
"k.k.k.j.k.j.k.j.k.k.j.l.j.j.k.k.j.k.k.k.k.j.k.w.} { { { { { { { { { {
+ { { { { { { { { { { { { R R R R R R R R R R R R R R R R R R R     ..
+.....................................................................
+.w.j.l.j.k.l.j.j.j.l.j.j.j.l.k.l.j.l.j.l.j.j.l.j.",
"l.j.l.j.k.l.k.l.k.l.l.k.k.l.k.l.j.j.l.l.k.l.k.l.l.} { { { { { { { { {
+ { { { { { { { { { { { { R R R R R R R R R R R R R R R R R R R     ..
+....................................................................h
+.j.l.k.l.k.j.l.k.l.k.k.l.l.k.l.k.l.j.l.j.j.l.l.l.",
"l.k.j.l.l.l.l.k.l.k.l.j.l.j.l.l.l.l.k.l.j.l.j.j.l.k...{ { { { { { { {
+ { { { { { { { { { { { { R R R R R R R R R R R R R R R R R R R     ..
+.................. ......................... ...................X.j.j
+.k.l.k.l.l.l.j.j.l.k.j.l.k.l.l.l.l.l.l.l.l.j.j.l.",
"l.l.l.l.k.l.l.k.l.l.l.l.k.l.l.j.l.j.l.l.l.l.l.l.l.l.l.5.{ { { { { { {
+ { { { { { { { { { { { { R R R R R R R R R R R R R R R R R R R     ..
+..............................................................8.l.l.l
+.l.l.l.l.l.l.l.l.l.l.l.l.l.l.k.l.l.j.j.l.l.l.l.l.",
"k.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.j.l.l.l.l.l.l.l.y.} { { { { {
+ { { { { { { { { { { { { R R R R R R R R R R R R R R R R R R R     ..
+............................................................y.l.l.l.l
+.l.l.l.l.l.l.l.l.l.l.l.k.l.l.l.l.l.l.l.l.l.l.l.l.",
"l.l.l.l.l.l.l.l.k.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l. .{ { { {
+ { { { { { { { { { { { { R R R R R R R R R R R R R R R R R R R     ..
+..........................................................l.l.l.l.l.l
+.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.c.l.l.l.l.l.l.l.l.",
"l.l.l.l.l.l.l.l.l.l.l.l.z.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.z.X.{ { {
+ { { { { { { { { { { { { R R R R R R R R R R R R R R R R R R R     ..
+......................................................4.l.l.l.l.z.l.z
+.l.l.z.l.z.l.l.l.l.l.l.z.l.l.l.l.l.l.c.l.c.l.l.l.",
"l.z.l.l.l.x.l.z.l.l.x.l.l.l.l.l.l.z.l.z.l.l.z.l.z.l.l.l.z.l.l.l.w.{ {
+ { { { { { { { { { { { { R R R R R R R R R R R R R R R R R R R     ..
+....................................................q.l.z.l.z.l.l.l.z
+.z.l.l.l.z.l.z.l.z.l.z.l.l.c.c.l.l.c.l.l.l.l.l.l.",
"l.z.l.l.z.l.z.l.l.l.z.z.l.l.z.l.z.z.l.z.z.l.l.l.x.l.c.l.x.c.l.x.l.l.}
+ { { { { { { { { { { { { { {                                       ..
+................................................X.g.l.l.z.z.l.l.l.l.x
+.l.z.l.c.l.x.x.l.l.l.l.x.l.l.x.c.x.l.l.l.x.l.x.l.",
"l.z.z.l.z.z.l.z.l.z.z.l.l.x.l.z.z.l.z.l.l.l.z.z.l.x.l.l.l.l.l.x.c.l.c
+. .{ { { { { { { { { { { { {                                       ..
+..............................................X.l.l.l.z.z.z.l.x.z.z.z
+.c.l.c.l.c.l.z.l.c.x.l.x.x.l.x.l.c.l.x.l.l.c.x.c.",
"z.z.z.l.z.l.z.z.z.z.c.l.v.z.z.z.z.l.l.c.z.x.l.z.c.l.c.l.c.c.l.c.c.c.x
+.l.4.{ { { { { { { { { { { {                                       ..
+............................................5.l.l.l.v.z.l.x.z.l.z.z.l
+.l.c.x.l.z.c.x.l.c.l.c.c.c.x.x.l.c.l.c.x.z.z.x.x.",
"z.z.z.x.z.z.z.z.l.v.l.l.l.z.z.l.z.z.z.c.z.z.z.z.c.c.x.x.l.c.l.c.l.c.l
+.x.c.e.} { { { { { { { { { { { { { { { { { { { { { { { { } ..........
+..........................................e.c.l.c.c.l.z.z.z.z.x.z.z.x
+.x.x.c.x.c.z.x.x.c.x.x.c.l.x.x.x.c.x.c.x.z.c.c.l.",
"l.x.x.x.z.z.z.z.l.v.l.v.z.z.l.z.z.z.z.x.z.z.z.z.z.z.z.z.c.v.x.x.x.x.x
+.x.z.z.z.| { { { { { { { { { { { { { { { { { { { { { { { } ..........
+........................................k.v.z.c.v.l.z.c.c.x.c.x.x.x.x
+.x.x.x.x.c.x.x.x.c.c.z.c.c.c.x.x.x.x.c.z.c.c.v.x.",
"c.x.x.x.z.c.z.v.v.l.v.l.x.x.v.x.z.c.x.x.z.v.v.x.v.x.x.x.c.c.x.c.x.x.c
+.c.v.c.z.z...{ { { { { { { { { { { { { { { { { { { { { { } ..........
+....................................1.c.v.c.z.l.v.c.v.c.c.v.x.x.c.x.c
+.x.x.c.c.c.c.x.x.c.c.c.z.z.v.v.x.x.x.v.c.c.c.x.x.",
"c.c.v.x.x.v.z.c.l.v.c.z.v.l.c.c.c.z.c.x.z.z.z.z.x.z.x.c.c.z.c.c.x.x.v
+.c.z.z.c.v.c.8.{ } { { { { { { { { { { { { { { { { { { { { ..........
+..................................8.c.c.x.v.z.v.l.v.c.c.x.c.x.v.x.v.x
+.z.v.x.x.c.c.v.x.c.c.v.x.z.z.x.x.c.v.x.c.v.c.c.v.",
"c.v.c.c.x.c.z.v.v.z.v.v.z.v.v.l.v.z.v.z.z.v.v.z.c.v.z.v.c.x.v.c.v.c.x
+.z.v.c.c.c.v.c.y.} { { { { { { { { { { { { { { { { { { { { ..........
+................................y.v.c.c.z.v.c.c.v.c.c.v.x.c.v.x.x.v.c
+.c.v.c.v.x.v.x.v.v.c.c.v.v.v.v.z.c.x.v.c.x.x.v.z.",
"v.c.v.x.v.z.c.v.z.z.c.v.l.v.v.v.v.x.v.x.v.c.c.z.v.c.v.c.c.x.c.v.c.v.c
+.c.v.c.v.c.v.c.v.c. .{ { { { { { { { { { { { { { { { { { { ..........
+..............................v.v.x.v.l.v.v.v.l.v.c.v.v.x.v.v.l.v.v.x
+.c.v.x.v.v.c.c.c.x.v.v.x.z.v.v.c.v.v.c.v.v.c.v.v.",
"v.c.c.v.v.c.v.c.v.v.v.x.v.v.v.c.v.z.v.v.c.v.v.v.v.v.c.x.v.v.x.v.v.c.v
+.v.c.v.v.c.v.v.c.v.c.X.{ { { { { { { { { { { { { { { { { { ..........
+..........................4.v.v.v.v.x.v.v.v.c.v.v.v.c.x.v.c.v.v.v.v.v
+.v.v.l.v.v.c.v.v.v.x.v.v.v.v.c.v.v.x.z.v.c.v.c.v.",
"v.c.v.v.c.v.v.c.v.z.v.v.l.v.v.v.c.v.v.c.v.v.v.v.v.v.x.v.v.x.v.v.v.c.v
+.v.v.v.c.v.c.v.v.c.c.n.q.} { { { { { { { { { { { { { { { { ..........
+........................w.v.x.v.v.v.x.v.v.v.v.c.v.v.v.v.x.v.v.v.v.v.v
+.v.v.v.v.v.v.v.v.v.v.v.x.v.v.v.v.v.x.v.v.v.v.v.v.",
"x.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.c.v.v.v.v.v.v.v.v.v.v.v.v.v.v.c.v
+.v.v.v.v.v.v.v.v.v.c.v.n.l.| { { { { { { { { { { { { { { { ..........
+......................y.x.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v
+.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.",
"v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v
+.v.v.v.b.v.v.v.v.v.v.v.v.v.v. .{ { { { { { { { { { { { { { ..........
+..................%.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.c.n.v.v.v.v
+.v.v.b.v.v.v.v.v.v.v.v.v.v.m.v.v.v.v.v.v.v.v.v.v.",
"v.v.v.v.v.v.m.v.v.v.v.v.v.m.m.v.v.v.v.v.v.v.v.v.v.b.v.v.v.v.v.v.v.v.n
+.v.v.v.v.v.v.v.v.v.v.v.v.n.v.b.1.{ { { { { { { { { { { { { ..........
+................2.n.v.n.v.v.n.v.v.n.v.v.v.v.v.v.v.n.v.n.v.n.c.n.v.v.v
+.v.v.v.v.v.v.v.v.v.v.m.v.v.v.v.m.b.v.v.v.v.v.v.v.",
"v.v.b.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.m.v.v.v.v.v.m.v.v.v.v.v.v.v.v.v
+.m.v.v.v.v.b.v.v.b.v.v.n.v.v.v.m.y.} { { { { { { { { { { { ..........
+..............y.n.b.v.v.v.v.v.v.v.v.n.v.m.v.v.m.v.v.v.v.v.n.n.v.v.v.v
+.v.b.v.v.b.b.v.b.m.v.v.v.v.b.v.m.v.v.v.b.v.v.b.v.",
"b.v.v.b.v.b.v.b.v.b.b.v.m.v.m.v.m.v.m.v.m.v.b.m.v.v.v.b.v.b.v.b.m.v.m
+.v.b.v.b.v.v.v.v.b.m.v.v.v.b.v.v.m.b.| { { { { { { { { { { ..........
+............c.v.n.v.v.n.n.v.n.n.n.v.n.m.v.m.m.v.m.m.v.v.n.n.v.v.n.n.n
+.v.v.n.v.b.v.b.v.m.m.v.m.v.m.v.v.b.b.b.v.b.b.v.b.",
"v.m.v.m.v.v.v.m.m.v.m.m.v.n.v.v.b.m.v.m.v.m.v.v.v.m.m.v.m.v.m.v.m.n.v
+.v.m.m.v.v.m.v.m.n.n.v.m.m.v.m.m.v.v.v.X.{ { { { { { { { { ..........
+........<.n.v.v.v.b.n.v.m.v.v.m.v.m.v.m.m.v.m.m.v.m.m.v.n.v.n.v.n.m.m
+.m.v.v.n.n.v.m.m.v.m.m.v.m.m.m.m.v.m.m.n.v.n.v.m.",
"m.v.m.m.m.m.m.m.m.m.v.b.m.m.m.n.m.v.v.m.m.m.m.m.m.n.v.m.n.m.m.m.v.m.m
+.m.m.v.n.m.b.m.b.v.m.m.n.v.m.v.n.n.b.n.n.8.{ { { { { { { { ..........
+......8.v.v.n.b.b.b.b.m.m.m.m.m.m.m.m.m.m.v.m.m.m.m.v.m.m.m.n.m.m.m.m
+.b.n.m.m.m.n.m.m.m.m.m.m.m.m.v.m.n.m.m.m.m.n.m.n.",
"m.m.b.m.m.m.m.m.m.m.v.b.m.n.m.m.m.b.m.m.m.m.m.m.n.b.n.m.m.m.n.v.m.v.m
+.m.b.m.m.m.n.m.b.m.m.m.m.m.b.m.n.m.m.n.m.m.l.} { { { { { { ..........
+....y.n.n.n.n.b.b.v.b.m.m.N.N.m.b.m.m.b.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m
+.m.m.m.m.m.m.m.m.b.b.m.b.b.m.m.m.m.m.m.m.m.m.m.m.",
"m.m.b.b.v.m.N.N.n.m.b.m.m.m.m.m.m.b.m.m.m.m.m.m.m.m.m.b.b.b.b.b.m.m.m
+.m.m.b.b.m.b.m.b.b.m.m.m.m.m.b.m.b.m.m.m.m.b.b. .{ { { { { ..........
+X.n.n.n.n.n.B.b.b.b.b.m.m.B.b.m.b.m.m.b.m.m.m.m.m.m.m.b.b.m.m.m.m.m.m
+.b.b.m.b.m.m.b.m.b.b.b.b.b.m.m.m.m.m.b.b.b.b.m.m.",
"m.b.B.m.m.m.m.N.m.b.b.B.m.m.m.m.m.m.B.m.m.m.N.m.b.N.m.m.b.B.m.m.B.m.m
+.m.b.b.b.b.b.b.m.m.b.N.m.b.b.m.m.b.m.b.B.m.b.B.m.4.{ { { { ........2.
+B.b.B.m.B.B.b.b.N.B.b.m.N.m.b.b.b.B.b.b.b.m.b.B.m.m.m.b.m.b.N.m.b.B.m
+.b.B.m.m.B.m.b.b.B.m.m.b.B.m.B.m.b.B.N.b.b.N.N.N.",
"b.b.m.m.B.m.b.b.b.b.m.m.B.N.b.B.b.m.b.m.B.b.N.m.B.N.m.m.B.m.m.B.N.N.N
+.B.B.b.B.N.B.b.B.N.m.B.m.m.b.B.m.B.m.m.m.B.B.b.b.b.e.} { { ......w.n.
+B.b.B.N.b.b.B.N.N.b.B.m.B.B.m.B.m.B.b.b.B.m.m.m.B.B.m.B.b.b.B.m.B.m.B
+.B.b.B.N.B.b.B.m.B.b.N.m.B.b.b.m.B.b.B.b.N.N.b.B.",
"B.b.B.B.B.m.B.b.m.B.b.B.B.b.b.B.b.B.m.m.b.B.m.B.B.m.B.m.b.m.b.B.m.m.N
+.B.N.N.B.b.B.m.b.N.B.N.B.B.N.m.B.m.m.B.b.m.m.B.B.b.b.v.| { ....l.n.B.
+n.B.b.B.N.B.b.N.N.B.m.b.B.m.B.B.N.b.B.B.B.B.B.b.B.m.B.b.B.B.m.b.B.m.m
+.N.B.b.B.B.b.b.B.B.M.B.B.N.N.B.m.b.B.B.b.N.N.B.N.",
"N.B.N.m.N.B.N.m.B.B.b.B.b.B.B.b.B.B.B.B.B.N.B.N.B.N.m.B.B.B.m.B.B.B.B
+.N.B.B.B.N.m.B.B.B.N.B.N.B.B.B.N.B.B.B.B.B.B.B.N.B.B.B.b...X.B.B.B.n.
+B.b.B.N.B.N.B.B.m.B.B.b.B.B.b.B.B.B.B.B.b.B.b.B.B.B.b.B.N.B.B.b.B.B.B
+.B.m.B.B.B.N.B.B.N.B.B.m.B.B.B.B.b.B.B.B.B.B.B.B.",
"B.B.N.B.B.B.B.B.B.B.B.b.B.B.B.B.b.B.B.B.B.B.B.B.B.B.B.B.b.B.B.B.B.B.B
+.N.B.B.B.B.N.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.
+B.B.B.B.B.B.B.B.B.B.N.B.B.B.B.N.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B
+.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.",
"B.B.B.B.B.N.B.B.B.B.B.B.B.B.B.B.B.B.B.B.b.B.B.B.B.B.B.B.B.B.B.B.B.B.B
+.B.B.B.B.B.B.B.B.B.B.B.B.B.N.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.
+B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B
+.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.",
"B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B
+.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.
+B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B
+.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.",
"B.B.B.B.B.B.B.B.B.B.B.B.B.N.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B
+.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.
+B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B
+.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.",
"B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B
+.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.
+B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B
+.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.",
"B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B
+.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.
+B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B
+.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.",
"B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B
+.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.
+B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B
+.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.",
"B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B
+.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.
+B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B
+.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B."
};
end-of-xpm

} # end greyCubeLogo #}}}2

sub wilbur { #{{{2

my \$xpm = <<'end-of-xpm';
/* XPM */
static char * wilbur_xpm[] = {
"110 44 988 2",
"      c None",
".     c #C0C0C0",
"+     c #BBBAB9",
"@     c #979284",
"#     c #B0AEAA",
"\$     c #CAC4B3",
"%     c #C0C0BF",
"&     c #BFBEBE",
"=     c #827967",
">     c #C3BCAA",
",     c #BFBEBD",
"'     c #BDBDBD",
")     c #B4B3B1",
"!     c #5B4F43",
"~     c #B9B8B7",
"{     c #B5B4B2",
"]     c #898374",
"^     c #79715E",
"/     c #A09D95",
"(     c #C3C0B6",
"_     c #BBB095",
":     c #B6B1A3",
"<     c #BFBFBF",
"[     c #B2B0AE",
"}     c #493C2D",
"|     c #B7B6B5",
"1     c #B8B8B7",
"2     c #938E82",
"3     c #78715D",
"4     c #746D5A",
"5     c #A3A19C",
"6     c #C0BEBB",
"7     c #B9AF9A",
"8     c #A69D83",
"9     c #ABA598",
"0     c #B7B7B6",
"a     c #B7B7B7",
"b     c #A19B95",
"c     c #90867D",
"d     c #7C6F62",
"e     c #7B6F62",
"f     c #796E62",
"g     c #766C62",
"h     c #71685D",
"i     c #433728",
"j     c #88827C",
"k     c #A09D9A",
"l     c #A5A3A0",
"m     c #B5B4B3",
"n     c #B8B8B8",
"o     c #9D9A91",
"p     c #706956",
"q     c #706955",
"r     c #A19F9B",
"s     c #BCB6A9",
"t     c #A69D81",
"u     c #979079",
"v     c #92897A",
"w     c #7F7162",
"x     c #5A442C",
"y     c #4B3319",
"z     c #422C15",
"A     c #3C260F",
"B     c #38240E",
"C     c #34210D",
"D     c #311F0C",
"E     c #2D1D0B",
"F     c #2A1B0A",
"G     c #2B1D10",
"H     c #2B2014",
"I     c #281D13",
"J     c #291F16",
"K     c #352D25",
"L     c #73706C",
"M     c #B6B6B5",
"N     c #BEBEBE",
"O     c #BCBCBC",
"P     c #959186",
"Q     c #76715E",
"R     c #6E6755",
"S     c #6A6351",
"T     c #6B6453",
"U     c #A1A09E",
"V     c #BAB8B5",
"W     c #ACA288",
"X     c #85775E",
"Y     c #543B1F",
"Z     c #472D10",
"`     c #452C11",
" .    c #412910",
"..    c #3D270F",
"+.    c #3A250E",
"@.    c #36230D",
"#.    c #33200D",
"\$.    c #2F1E0C",
"%.    c #2B1C0B",
"&.    c #281A0A",
"*.    c #241709",
"=.    c #211508",
"-.    c #1D1207",
";.    c #191006",
">.    c #160E06",
",.    c #18130C",
"'.    c #5C5956",
").    c #BABABA",
"!.    c #908C7E",
"~.    c #746C5A",
"{.    c #6D6654",
"].    c #686150",
"^.    c #645E4D",
"/.    c #6B6657",
"(.    c #A3A3A3",
"_.    c #D4D0C8",
":.    c #FCFFFC",
"<.    c #F6F9ED",
"[.    c #F0F3EF",
"}.    c #FEFBFF",
"|.    c #EFF3F7",
"1.    c #F8F3F1",
"2.    c #E6EBE8",
"3.    c #EFEBF0",
"4.    c #EEE8E5",
"5.    c #DFE2DF",
"6.    c #E2E7E4",
"7.    c #B1AB9B",
"8.    c #60472B",
"9.    c #482C0F",
"0.    c #462C10",
"a.    c #422A10",
"b.    c #3F280F",
"c.    c #3B260F",
"d.    c #37230E",
"e.    c #301F0C",
"f.    c #291A0A",
"g.    c #251809",
"h.    c #221608",
"i.    c #1E1408",
"j.    c #1B1107",
"k.    c #170F06",
"l.    c #120C04",
"m.    c #0D0702",
"n.    c #18140F",
"o.    c #A09D94",
"p.    c #807A6A",
"q.    c #756D5A",
"r.    c #686251",
"s.    c #625C4C",
"t.    c #60584A",
"u.    c #747065",
"v.    c #A7A4A5",
"w.    c #B7B3B9",
"x.    c #B2AEB3",
"y.    c #B1ACB1",
"z.    c #A9A4A8",
"A.    c #7B7C7C",
"B.    c #787F7A",
"C.    c #C3C8CB",
"D.    c #E0DEE2",
"E.    c #EAEAE1",
"F.    c #D9D8CF",
"G.    c #D3DBDD",
"H.    c #DBD8DC",
"J.    c #D2D5D1",
"K.    c #DFD7D5",
"L.    c #D8D2D0",
"M.    c #B6B6B6",
"N.    c #B1AFA8",
"O.    c #69543A",
"P.    c #462B0F",
"Q.    c #432A10",
"R.    c #39250E",
"S.    c #36220D",
"T.    c #321F0B",
"U.    c #2E1D0A",
"V.    c #251708",
"W.    c #221507",
"X.    c #1E1306",
"Y.    c #1A0F04",
"Z.    c #1A1208",
"`.    c #1A130B",
" +    c #1C150D",
".+    c #2E2820",
"++    c #5C5747",
"@+    c #7C7360",
"#+    c #726B59",
"\$+    c #6E6754",
"%+    c #696251",
"&+    c #645E4E",
"*+    c #5F5849",
"=+    c #5F5A4B",
"-+    c #7E7C77",
";+    c #A9A6A9",
",+    c #A1A0A3",
"'+    c #656867",
")+    c #7D7C82",
"!+    c #D1CFDA",
"~+    c #D3CBCB",
"{+    c #CAC8CC",
"]+    c #C3C5C8",
"^+    c #CCCDCC",
"/+    c #C0BFC7",
"(+    c #C0BDC2",
"_+    c #C4BDC3",
":+    c #C4BEC3",
"<+    c #C5C3CC",
"[+    c #C3BFC8",
"}+    c #BFBFC7",
"|+    c #C3C1C5",
"1+    c #C0BEC2",
"2+    c #C3BFBF",
"3+    c #C3BFC7",
"4+    c #BEC1C3",
"5+    c #C2BFC7",
"6+    c #C1C0C1",
"7+    c #C2C3C3",
"8+    c #C0C5C4",
"9+    c #BFC0BF",
"0+    c #BABBBB",
"b+    c #938A7C",
"c+    c #5B472B",
"d+    c #3D250B",
"e+    c #3A2209",
"f+    c #362009",
"g+    c #311C06",
"h+    c #2D1A05",
"i+    c #2D1D09",
"j+    c #372815",
"k+    c #3A2C1C",
"l+    c #463C2D",
"m+    c #493F32",
"n+    c #554D41",
"o+    c #4E4639",
"p+    c #4F483A",
"q+    c #5D5749",
"r+    c #6C6555",
"s+    c #756E5A",
"t+    c #726B57",
"u+    c #6F6855",
"v+    c #6A6452",
"w+    c #635C4D",
"x+    c #605949",
"y+    c #5D5748",
"z+    c #646054",
"A+    c #878786",
"B+    c #AFAAAF",
"C+    c #AEA9AE",
"D+    c #655F5E",
"E+    c #5E5252",
"F+    c #CDC3C9",
"G+    c #C3BEC9",
"H+    c #C2C1C5",
"I+    c #C3C1C4",
"J+    c #C2C1C4",
"K+    c #C2C0C4",
"L+    c #C3C0C5",
"M+    c #C1C0C3",
"N+    c #C0C0C1",
"O+    c #B4B4B4",
"P+    c #C0BCB2",
"Q+    c #AFA794",
"R+    c #918771",
"S+    c #8A806B",
"T+    c #817865",
"U+    c #88826F",
"V+    c #9A9384",
"W+    c #A19C8D",
"X+    c #9D9684",
"Y+    c #857E6A",
"Z+    c #7F7862",
"`+    c #7C7662",
" @    c #766F5E",
".@    c #6F6856",
"+@    c #6B6552",
"@@    c #6B6452",
"#@    c #66614E",
"\$@    c #645D4D",
"%@    c #635C4C",
"&@    c #60594A",
"*@    c #5C5647",
"=@    c #5C5446",
"-@    c #6E6D68",
";@    c #A5A4A6",
">@    c #BAB7BB",
",@    c #AAA5AA",
"'@    c #4B5948",
")@    c #E0D8D6",
"!@    c #D0CED8",
"~@    c #C8C6CC",
"{@    c #C1C0C2",
"]@    c #BBBBBB",
"^@    c #D4D4D3",
"/@    c #FAFAFA",
"(@    c #FFFFFF",
"_@    c #FBFBF8",
":@    c #C3BDAF",
"<@    c #8D846D",
"[@    c #A29B8C",
"}@    c #E4E2DE",
"|@    c #FEFDFD",
"1@    c #FAF9F8",
"2@    c #D3D1CA",
"3@    c #898472",
"4@    c #79725D",
"5@    c #726B58",
"6@    c #6C6553",
"7@    c #655F4E",
"8@    c #625B4B",
"9@    c #5E5847",
"0@    c #5C5646",
"a@    c #595344",
"b@    c #575143",
"c@    c #565041",
"d@    c #565142",
"e@    c #585444",
"f@    c #5E5C52",
"g@    c #757576",
"h@    c #BEBCC0",
"i@    c #B5B1B6",
"j@    c #B0ABB0",
"k@    c #4F564F",
"l@    c #5D636D",
"m@    c #C1C7C5",
"n@    c #000000",
"o@    c #B3B3B3",
"p@    c #8D8D8D",
"q@    c #777777",
"r@    c #898989",
"s@    c #C7C6C2",
"t@    c #FBFBFB",
"u@    c #D8D8D8",
"v@    c #919192",
"w@    c #C2C2C2",
"x@    c #FBF9F8",
"y@    c #B6B09F",
"z@    c #F9F9F8",
"A@    c #F7F7F7",
"B@    c #ECEDED",
"C@    c #F3F3F3",
"D@    c #FCFCFD",
"E@    c #D5D5CF",
"F@    c #807965",
"G@    c #6A6352",
"H@    c #625B4A",
"I@    c #5B5545",
"J@    c #555041",
"K@    c #514C3E",
"L@    c #4D493B",
"M@    c #4B4539",
"N@    c #4C4639",
"O@    c #4E493B",
"P@    c #524D40",
"Q@    c #535047",
"R@    c #595858",
"S@    c #908F90",
"T@    c #C0BDC1",
"U@    c #B6B2B6",
"V@    c #A9A2A7",
"W@    c #6F7366",
"X@    c #E3DEED",
"Y@    c #C7CBCF",
"Z@    c #C3C0C4",
"`@    c #AFAFAF",
" #    c #6B6B6B",
".#    c #535353",
"+#    c #484848",
"@#    c #323232",
"##    c #4D4D4E",
"\$#    c #93918D",
"%#    c #C0B9A9",
"&#    c #333333",
"*#    c #191919",
"=#    c #F4F5F5",
"-#    c #E8E6E3",
";#    c #757575",
">#    c #5F5F5F",
",#    c #DDDDDD",
"'#    c #E4E3E4",
")#    c #938E81",
"!#    c #575242",
"~#    c #4F4A3C",
"{#    c #4A4537",
"]#    c #454134",
"^#    c #433F32",
"/#    c #443F33",
"(#    c #49463E",
"_#    c #484948",
":#    c #656364",
"<#    c #B6B4B7",
"[#    c #BBB7BC",
"}#    c #A2A0A5",
"|#    c #574F56",
"1#    c #697376",
"2#    c #C6C4CD",
"3#    c #7B7B7B",
"4#    c #656565",
"5#    c #AEAEAE",
"6#    c #929292",
"7#    c #29292A",
"8#    c #45423C",
"9#    c #9C9584",
"0#    c #FBFAF8",
"a#    c #212122",
"b#    c #010101",
"c#    c #1D1E1E",
"d#    c #EAE9E8",
"e#    c #EAE8E7",
"f#    c #FAFAFB",
"g#    c #E8E8E8",
"h#    c #858585",
"i#    c #797979",
"j#    c #060606",
"k#    c #999999",
"l#    c #DDDEDF",
"m#    c #99958A",
"n#    c #6C6552",
"o#    c #655E4D",
"p#    c #544E40",
"q#    c #4C4739",
"r#    c #453F34",
"s#    c #413D31",
"t#    c #3E3B2F",
"u#    c #3E3931",
"v#    c #383838",
"w#    c #888789",
"x#    c #BEBBC0",
"y#    c #A3A1A2",
"z#    c #68736E",
"A#    c #645461",
"B#    c #C3C8C1",
"C#    c #B5B5B5",
"D#    c #545454",
"E#    c #7C7C7C",
"F#    c #CDCDCD",
"G#    c #A6A6A6",
"H#    c #4B4B4B",
"I#    c #2F2F2F",
"J#    c #333433",
"K#    c #5E5A50",
"L#    c #BBB6A8",
"M#    c #C6C7C6",
"N#    c #B9B3A6",
"O#    c #B6B2A5",
"P#    c #F5F5F6",
"Q#    c #E0E0E0",
"R#    c #3A3A3A",
"S#    c #080808",
"T#    c #CBCCCA",
"U#    c #848071",
"V#    c #67604E",
"W#    c #615B4A",
"X#    c #575244",
"Y#    c #504A3C",
"Z#    c #474237",
"`#    c #423D31",
" \$    c #3F3A2F",
".\$    c #3F392E",
"+\$    c #3B3930",
"@\$    c #292A27",
"#\$    c #393939",
"\$\$    c #4F4F4F",
"%\$    c #B3B1B4",
"&\$    c #ABA6AB",
"*\$    c #D1D3D0",
"=\$    c #C7C4C8",
"-\$    c #A9A9A9",
";\$    c #3E3E3E",
">\$    c #5D5D5D",
",\$    c #727272",
"'\$    c #3D3D3D",
")\$    c #353536",
"!\$    c #414141",
"~\$    c #504F4B",
"{\$    c #797160",
"]\$    c #A09888",
"^\$    c #ABA495",
"/\$    c #A39C8A",
"(\$    c #89806B",
"_\$    c #8F8774",
":\$    c #E0DFDC",
"<\$    c #EAEAEB",
"[\$    c #9F9F9F",
"}\$    c #3C3C3C",
"|\$    c #707070",
"1\$    c #D1D1D1",
"2\$    c #A7A5A0",
"3\$    c #706857",
"4\$    c #665F4D",
"5\$    c #5D5747",
"6\$    c #4C473B",
"7\$    c #464236",
"8\$    c #413D30",
"9\$    c #3E3A2D",
"0\$    c #413C2F",
"a\$    c #33302A",
"b\$    c #282828",
"c\$    c #404040",
"d\$    c #575757",
"e\$    c #C1BFC3",
"f\$    c #5C6967",
"g\$    c #C8C6D1",
"h\$    c #C6CCCB",
"i\$    c #AAAAAA",
"j\$    c #555555",
"k\$    c #3B3B3B",
"l\$    c #424242",
"m\$    c #505050",
"n\$    c #5B5B58",
"o\$    c #6A6457",
"p\$    c #7B725D",
"q\$    c #7D7661",
"r\$    c #817B66",
"s\$    c #857D67",
"t\$    c #837C65",
"u\$    c #8D8776",
"v\$    c #C2C0BA",
"w\$    c #D7D6D5",
"x\$    c #E3E2E3",
"y\$    c #D5D4D3",
"z\$    c #A7A39B",
"A\$    c #716B59",
"B\$    c #5A5444",
"C\$    c #504B3D",
"D\$    c #4A4538",
"E\$    c #444034",
"F\$    c #403C30",
"G\$    c #3F3B31",
"H\$    c #403B31",
"I\$    c #262322",
"J\$    c #2D2D2D",
"K\$    c #494949",
"L\$    c #626262",
"M\$    c #AEA9AF",
"N\$    c #626E52",
"O\$    c #C5D5C8",
"P\$    c #C5BBCE",
"Q\$    c #515151",
"R\$    c #2B2B2B",
"S\$    c #3F3F3F",
"T\$    c #454545",
"U\$    c #525252",
"V\$    c #5E5E5E",
"W\$    c #6A6969",
"X\$    c #656156",
"Y\$    c #6E6855",
"Z\$    c #76705B",
"`\$    c #7E7662",
" %    c #817965",
".%    c #807863",
"+%    c #7C7460",
"@%    c #807865",
"#%    c #807A68",
"\$%    c #817B6B",
"%%    c #7B7563",
"&%    c #6F6654",
"*%    c #67604F",
"=%    c #4B463A",
"-%    c #464135",
";%    c #37332C",
">%    c #232322",
",%    c #363636",
"'%    c #6E6D6D",
")%    c #B4AFB4",
"!%    c #ABA7AC",
"~%    c #4F5663",
"{%    c #5F6358",
"]%    c #D2D0DB",
"^%    c #B7C9BD",
"/%    c #CDCECD",
"(%    c #828282",
"_%    c #444444",
":%    c #5F5E5E",
"<%    c #6C6B6B",
"[%    c #747473",
"}%    c #615D52",
"|%    c #635D4B",
"1%    c #6A6451",
"2%    c #736E58",
"3%    c #79725E",
"4%    c #7B725F",
"5%    c #776F5B",
"6%    c #756D59",
"7%    c #716956",
"8%    c #6E6553",
"9%    c #675F4F",
"0%    c #4D483D",
"a%    c #3C3831",
"b%    c #4A453A",
"c%    c #474336",
"d%    c #423E32",
"e%    c #3E3A2F",
"f%    c #3E3A2E",
"g%    c #423F32",
"h%    c #262522",
"i%    c #2A2A2A",
"j%    c #A9A8AA",
"k%    c #BFBEC1",
"l%    c #B6B1B6",
"m%    c #ACA8AC",
"n%    c #495951",
"o%    c #5F5B67",
"p%    c #D4CFD4",
"q%    c #C8C5CA",
"r%    c #C5C7C5",
"s%    c #C5C3C8",
"t%    c #B1B1B1",
"u%    c #686868",
"v%    c #4C4C4C",
"w%    c #626261",
"x%    c #6D6D6D",
"y%    c #757471",
"z%    c #524E41",
"A%    c #585343",
"B%    c #5E5747",
"C%    c #655D4C",
"D%    c #6D6653",
"E%    c #6C6554",
"F%    c #635D4C",
"G%    c #5E5849",
"H%    c #4D473A",
"I%    c #3C362D",
"J%    c #514C43",
"K%    c #585146",
"L%    c #463F33",
"M%    c #3B392E",
"N%    c #38362D",
"O%    c #3A372C",
"P%    c #2A2823",
"Q%    c #212121",
"R%    c #353535",
"S%    c #4D4D4D",
"T%    c #6A6A6A",
"U%    c #848484",
"V%    c #9D9D9D",
"W%    c #C0BFC1",
"X%    c #B7B3B8",
"Y%    c #ABA7AB",
"Z%    c #CCCACE",
"`%    c #CCC3C9",
" &    c #C7C5C9",
".&    c #C3C2C6",
"+&    c #A5A5A5",
"@&    c #737373",
"#&    c #6F6F6E",
"\$&    c #7B7B7C",
"%&    c #828180",
"&&    c #605D54",
"*&    c #4A4638",
"=&    c #4D4A3C",
"-&    c #544F41",
";&    c #5A5344",
">&    c #605A49",
",&    c #605A4B",
"'&    c #605A4A",
")&    c #5E5848",
"!&    c #5C5648",
"~&    c #524C40",
"{&    c #40382B",
"]&    c #503E2B",
"^&    c #644D37",
"/&    c #725C44",
"(&    c #7B654B",
"_&    c #7F684C",
":&    c #816A4F",
"<&    c #887254",
"[&    c #917859",
"}&    c #76634B",
"|&    c #6E604F",
"1&    c #5C5D5D",
"2&    c #888888",
"3&    c #ACACAC",
"4&    c #B9B6BA",
"5&    c #AEAAAF",
"6&    c #586659",
"7&    c #6E6075",
"8&    c #C6C8C5",
"9&    c #C6C3C8",
"0&    c #C3C2C5",
"a&    c #999998",
"b&    c #827F77",
"c&    c #77736B",
"d&    c #615D50",
"e&    c #4F4B3C",
"f&    c #4A4438",
"g&    c #4B4739",
"h&    c #544E41",
"i&    c #595444",
"j&    c #545042",
"k&    c #494538",
"l&    c #3F3C31",
"m&    c #322F26",
"n&    c #25231E",
"o&    c #383229",
"p&    c #54493B",
"q&    c #6C5D4B",
"r&    c #79664E",
"s&    c #7E664A",
"t&    c #957857",
"u&    c #A2835F",
"v&    c #AE8E67",
"w&    c #BB9971",
"x&    c #C6A478",
"y&    c #A19A91",
"z&    c #9F9FA0",
"A&    c #909090",
"B&    c #8E8E8E",
"C&    c #969696",
"D&    c #636363",
"E&    c #8F8F8F",
"F&    c #4C6C54",
"G&    c #5B5E5D",
"H&    c #C1CAC5",
"I&    c #BBC1C3",
"J&    c #C2C0C3",
"K&    c #A5A4A1",
"L&    c #7A776F",
"M&    c #4E4A41",
"N&    c #333029",
"O&    c #332F26",
"P&    c #312F25",
"Q&    c #332E25",
"R&    c #2C2821",
"S&    c #211E19",
"T&    c #1E1C18",
"U&    c #1A1915",
"V&    c #1D1D18",
"W&    c #24221D",
"X&    c #312F29",
"Y&    c #403D35",
"Z&    c #525047",
"`&    c #636157",
" *    c #716E63",
".*    c #5F5A4F",
"+*    c #474335",
"@*    c #4A4234",
"#*    c #534737",
"\$*    c #705D46",
"%*    c #A28664",
"&*    c #B79771",
"**    c #928F8B",
"=*    c #C3C3C3",
"-*    c #878787",
";*    c #A8A8A8",
">*    c #B0AAAF",
",*    c #4E5557",
"'*    c #777070",
")*    c #C2C0C5",
"!*    c #B9B9B9",
"~*    c #B2B2B2",
"{*    c #A7A7A7",
"]*    c #8B8B8A",
"^*    c #62615F",
"/*    c #403F3D",
"(*    c #1C1B18",
"_*    c #0E0D0C",
":*    c #0A0907",
"<*    c #0D0C0A",
"[*    c #151412",
"}*    c #23221E",
"|*    c #2E2E28",
"1*    c #3F3C34",
"2*    c #504D43",
"3*    c #5F5B51",
"4*    c #6B685C",
"5*    c #6A665C",
"6*    c #595549",
"7*    c #39362B",
"8*    c #272620",
"9*    c #181716",
"0*    c #141414",
"a*    c #1B1B1B",
"b*    c #242424",
"c*    c #45403A",
"d*    c #5C5A56",
"e*    c #676767",
"f*    c #7F7F7F",
"g*    c #959595",
"h*    c #989898",
"i*    c #717171",
"j*    c #808080",
"k*    c #919191",
"l*    c #A4A3A6",
"m*    c #71615D",
"n*    c #CEC4CA",
"o*    c #C6C4C8",
"p*    c #BFBEBF",
"q*    c #6B6B6A",
"r*    c #59595A",
"s*    c #424140",
"t*    c #33322E",
"u*    c #2F2E2B",
"v*    c #34332E",
"w*    c #3A3832",
"x*    c #413F39",
"y*    c #4B4941",
"z*    c #4F4D45",
"A*    c #403E38",
"B*    c #252321",
"C*    c #171715",
"D*    c #171717",
"E*    c #202020",
"F*    c #272727",
"G*    c #313131",
"H*    c #585858",
"I*    c #646464",
"J*    c #8C8C8C",
"K*    c #818181",
"L*    c #787878",
"M*    c #A2A2A2",
"N*    c #A9A5A8",
"P*    c #C5C5C9",
"Q*    c #C0BEC1",
"R*    c #BAB9BB",
"S*    c #B0B0B0",
"T*    c #9B9A9A",
"U*    c #7D7D7C",
"V*    c #6F6E6E",
"W*    c #2C2C2C",
"X*    c #232323",
"Y*    c #222222",
"Z*    c #434343",
"`*    c #565656",
" =    c #616161",
".=    c #A6A5A7",
"+=    c #B7B6B9",
"@=    c #BCBABD",
"#=    c #BDBBBE",
"\$=    c #BDBCBF",
"%=    c #B6B3B7",
"&=    c #A5A2A4",
"*=    c #C4BECA",
"==    c #BEBDC0",
"-=    c #A4A4A4",
";=    c #9A9A9A",
">=    c #8E8E8D",
",=    c #828181",
"'=    c #747373",
")=    c #595959",
"!=    c #4E4E4E",
"~=    c #464646",
"{=    c #6F6F6F",
"]=    c #7E7E7E",
"^=    c #868686",
"/=    c #B0AFB2",
"(=    c #B9B5BA",
"_=    c #A1A0A4",
":=    c #C4CAC0",
"<=    c #CAC9C0",
"[=    c #C0C0C6",
"}=    c #B9B8BB",
"|=    c #A1A1A1",
"1=    c #939393",
"2=    c #696969",
"3=    c #5B5B5B",
"4=    c #5A5A5A",
"5=    c #7B7A7B",
"6=    c #939294",
"7=    c #A5A3A6",
"8=    c #AAA9AB",
"a=    c #B0AFB1",
"b=    c #B2B1B3",
"c=    c #BAB6BB",
"d=    c #67765F",
"e=    c #CAC2C8",
"g=    c #8B8B8B",
"h=    c #7A7A7A",
"i=    c #8A8A8A",
"j=    c #B2B0B3",
"k=    c #C7C5CF",
"l=    c #C4C2C7",
"m=    c #C0BFC2",
"n=    c #C1BFC2",
"o=    c #A9A7AA",
"p=    c #756D56",
"q=    c #C4C4C5",
"r=    c #BBB8BC",
"s=    c #757C80",
"t=    c #D5CDCC",
"u=    c #CCC6C4",
"v=    c #CBC5C4",
"w=    c #C5C3C9",
"x=    c #C1BEC2",
"y=    c #B3AFB3",
"A=    c #BABBC4",
"B=    c #B4BCC1",
"C=    c #ACAEB4",
"D=    c #ABABAC",
"E=    c #AAABAB",
"F=    c #AEAFB0",
"G=    c #B6B5B8",
"H=    c #BFBDC2",
"I=    c #C4C2C6",
"J=    c #C3BCC1",
"K=    c #BFBCC2",
"L=    c #C3C0C2",
"M=    c #B5B7BA",
"N=    c #B7AFB8",
"P=    c #BAB9B5",
"Q=    c #B2B3B4",
"R=    c #B8B4B8",
"S=    c #B8B4B9",
"T=    c #B6B2B5",
"U=    c #B5B2B7",
"V=    c #B6B2B7",
"W=    c #B6B3B8",
"X=    c #B7B3B7",
"`=    c #ABACAC",
" -    c #999997",
".-    c #9B9E9C",
"+-    c #8D908F",
"@-    c #858887",
"#-    c #848885",
"\$-    c #848984",
"%-    c #828684",
"&-    c #828782",
"*-    c #828783",
"=-    c #838884",
"--    c #848985",
";-    c #858986",
">-    c #868B87",
",-    c #888C89",
"'-    c #898D8A",
")-    c #878B88",
"!-    c #868A86",
"~-    c #848A87",
"{-    c #858985",
"]-    c #828984",
"^-    c #858683",
"/-    c #88888A",
"(-    c #7F8282",
"_-    c #838B86",
":-    c #84877F",
"<-    c #8E908B",
"[-    c #8B8685",
"}-    c #8E9990",
"|-    c #8F8D91",
"1-    c #8C7F85",
"2-    c #7B878B",
"3-    c #8C9883",
"4-    c #867F8B",
"5-    c #848F89",
"6-    c #8F918C",
"7-    c #889193",
"8-    c #7A7E75",
"9-    c #86858B",
"0-    c #6F6E79",
"a-    c #697668",
"b-    c #727074",
"c-    c #766471",
"d-    c #726F63",
"e-    c #4E5673",
"f-    c #6C6E54",
"g-    c #646165",
"h-    c #5A474B",
"i-    c #515057",
"j-    c #676357",
"k-    c #706067",
"l-    c #55605D",
"m-    c #4A494D",
"n-    c #818682",
"o-    c #767A76",
"p-    c #626B68",
"q-    c #505658",
"r-    c #424650",
"s-    c #484643",
"t-    c #4B4651",
"u-    c #4E3D4D",
"v-    c #594B60",
"w-    c #3E4436",
"x-    c #4B453A",
"y-    c #37483E",
"z-    c #53534F",
"A-    c #424144",
"B-    c #36442F",
"C-    c #2D242E",
"
+
+
+             ",
"
+
+
+             ",
"
+
+
+             ",
"
+
+                                .
+             ",
"
+
+                                                    +
+             ",
"
+
+                                                  @ #
+             ",
"
+                                                             \$ %
+                  . &                           * = -
+             ",
"
+                                                             ; > , '
+                  ) ! ~                       { ] ^ /
+             ",
"
+                                                             ( _ : +
+          < . . . [ } | .                   1 2 3 4 5
+             ",
"
+                                                           < 6 7 8 9
+0 a a b c d e f g h i j k l m . .         n o 4 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 M P Q R S T U
+             ",
"
+                                                               V W X
+Y Z `  ...+.@.#.\$.%.&.*.=.-.;.>.,.'.).[ !.~.{.].^./.(.        _._._.
+             ",
"                              :.:.<.[.<.[.}.[.|.|.|.|.|.|.|.|.1.[.1.1
+.1.1.1.1.2.[.2.[.2.[.[.[.[.[.1.3.3.3.3.3.<.[.[.[.[.[.4.3.5.4.6.a 7.8.
+9.0.a.b.c.d.C e.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.
+             ",
"                              1.2.2.5.5.5.D.E.E.E.E.E.E.E.E.E.2.2.2.2
+.2.2.2.2.2.4.2.3.2.D.2.D.5.5.E.F.E.F.5.5.G.D.D.H.H.I.J.5.G.K.L.M.N.O.
+P.Q. ...R.S.T.U.F V.W.X.Y.Z.`. +.+++@+#+\$+%+&+*+=+-+;+>+>+>+>+,+'+)+
+             ",
"                              :.E.J.!+~+{+]+^+/+(+_+_+:+/+/+<+[+}+}+/
++/+/+/+|+(+}+1+2+1+|+[+|+[+3+3+/+1+[+_+(+1+4+2+:+5+6+7+8+9+< 0+M.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+
+             ",
"                              :.5.F+G+|+|+H+|+|+|+|+|+|+|+|+I+|+|+|+|
++|+|+J+J+|+|+|+|+|+K+L+|+K+|+|+|+K+K+|+K+|+|+|+M+N+. . . < N ).O+N P+
+Q+R+S+T+U+V+W+X+Y+Z+`+ @.@+@@@%+#@\$@%@&@*+*@=@*@-@;@>@,@y.>+>+B+'@'+
+             ",
"                              :.)@!@~@|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|
++|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+K+{@. . < < < N ]@^@/@(@
+_@:@<@[@}@|@(@1@2@3@4@5@6@7@8@9@0@a@b@c@c@d@e@f@g@h@|+1+i@>+>+j@k@l@
+             ",
"                              :.F.m@I+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+n
+@|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+K+. . o@p@q@r@a+O s@t@u@v@
+w@x@y@z@(@A@B@C@D@E@F@p G@H@I@J@K@L@M@N@O@P@Q@R@S@|+|+|+T@U@>+V@W@E+
+             ",
"                              <.X@Y@Z@|+|+K+|+|+|+|+|+n@|+|+|+n@|+|+n
+@|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+K+. `@ #.#+#@###\$#%#(@ #&#
+*#=#-#(@A@' ;#>#,#'#)#\$+].x+!#~#{#]#^#/#{#(#_#:#<#|+|+|+K+[#>+}#|#1#
+             ",
"                              }.2.2#|+|+|+K+|+|+|+|+|+|+|+|+|+n@|+|+n
+@|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+{@N 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#s#u#v#+#w#|+|+|+|+|+x#>+y#z#A#
+             ",
"                              :.E.B#L+n@|+|+n@|+|+n@|+n@|+|+n@n@n@|+n
+@|+n@n@|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+6+C#D#E#F#G#H#I#J#K#L#% h#
+M#N#O#P#Q#R#S#b#(.T#U#V#W#X#Y#Z#`# \$.\$+\$@\$#\$\$\$%\$|+|+|+|+|+T@>+&\$l@D+
+             ",
"                              :.5.*\$=\$n@|+|+n@|+|+n@|+n@|+|+|+n@|+|+n
+@n@|+|+n@|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+N+-\$;\$>\$p@,\$'\$)\$!\$~\${\$]\$^\$
+/\$(\$_\$:\$<\$[\$}\$|\$1\$2\$3\$4\$5\$p#6\$7\$8\$9\$0\$a\$b\$c\$d\$1+|+|+|+|+|+e\$>+>+A#f\$
+             ",
"                              :.[.g\$h\$n@|+n@n@|+n@|+|+n@|+|+|+n@|+|+n
+@|+|+|+n@|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+6+i\$}\$}\$j\$+#k\$l\$m\$n\$o\$p\$q\$
+r\$s\$t\$u\$v\$w\$x\$y\$z\$A\$4\$*+B\$C\$D\$E\$F\$G\$H\$I\$J\$K\$L\$e\$|+|+|+|+|+K+>+M\$N\$A#
+             ",
"                              1.3.O\$P\$n@|+n@n@|+n@|+|+n@|+|+|+n@|+|+n
+@|+|+|+n@|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+M+]@Q\$R\$k\$S\$T\$U\$V\$W\$X\$Y\$Z\$
+`\$ %.%+%@%#%\$%%%&%*%s.=%~#q#-%`# \$F\$;%>%,%.#'%1+|+|+|+|+|+K+)%!%~%{%
+             ",
"                              }.D.]%^%/%n@|+n@|+n@|+|+n@|+|+|+n@|+|+n
+@|+|+|+n@|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+K+. (%@#k\$_%U\$:%<%[%}%|%1%
+2%3%4%5%6%7%8%].9%s.0%a%b%c%d%e%f%g%h%i%c\$>#i#j%k%K+|+|+|+K+l%m%n%o%
+             ",
"                              }.5.p%q%r%n@s%|+n@|+|+|+n@|+|+|+n@|+|+n
+@|+|+|+n@|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+K+. t%u%v%D#w%x%E#y%z%A%B%
+C%D%u+E%S *%F%G%++H%I%J%K%L%M%N%O%P%Q%R%S%T%U%V%a+a W%K+K+M+X%Y%o%W@
+             ",
"                              }.5.C.Z%C.|+`% &.&|+|+|+|+|+|+|+|+|+|+|
++|+|+|+|+|+|+n@|+|+|+|+|+|+|+|+|+|+|+|+|+n@n@{@N +&@&4##&\$&%&&&*&=&-&
+;&>&F%,&'&)&!&~&{&]&^&/&(&_&:&<&[&}&|&'.1&,\$2&[\$3&5#[\$o@N . 4&5&6&7&
+             ",
"                              }.2.C.C.C.8&9&0&|+|+|+|+|+|+|+|+|+|+|+n
+@|+|+|+|+|+|+n@|+|+|+|+|+|+|+|+|+|+|+|+n@|+|+K+. N 5#a&b&c&d&e&f&g&e&
+h&!#i&j&k&l&m&n&o&p&q&r&s&t&u&v&w&x&y&z&k#A&B&C&D&l\$v%>#E&a < j@F&G&
+             ",
"                              }.5.p%Z%H&I&|+|+|+|+|+|+|+|+|+|+|+|+|+|
++|+|+|+|+|+|+n@|+|+|+|+|+|+|+|+|+|+|+|+n@|+|+|+J&< O M.K&L&M&N&O&P&Q&
+R&S&T&U&V&W&X&Y&Z&`& *.*+*@*#*\$*%*&***G#M.< =*E&,%!\$Q\$>\$x%-*;*>*,*'*
+             ",
"                              }.5.Z%g\$Z%9&)*|+|+|+|+|+|+|+n@n@n@|+|+n
+@|+|+|+n@n@n@n@|+|+|+|+|+n@n@n@|+|+n@n@n@n@n@|+|+W%' !*~*{*]*^*/*(*_*
+:*<*[*}*|*1*2*3*4*5*6*7*8*9*0*a*b*c*d*e*f*g*+&h*Q\$+#d\$L\$i*j*k*l*m*o%
+             ",
"                              :.5.Z%n*q%o*|+|+|+|+|+|+|+n@|+|+n@|+|+n
+@|+|+n@|+|+|+n@|+|+|+|+n@|+|+|+n@|+|+|+n@|+|+|+|+K+p*]@O+3&[\$A&j*q*r*
+s*t*u*v*w*x*y*z*A*B*C*0*D*a*E*F*G*}\$K\$H*I*@&f*J*B&K*L*j*J*M*~*N*G&G&
+             ",
"                              :.5.O*C.C.P*|+|+|+|+|+|+n@|+|+|+n@|+|+n
+@|+|+n@|+|+|+n@|+|+|+|+n@|+|+|+n@|+|+|+n@K+|+K+|+|+K+Q*R*S*G#T*p@U*V*
+V\$S%S\$&#W*F*b*X*Y*Y*Y*b*F*W*@##\$Z*v%`* =x%i#r@.=+=@=#=\$=Q*J&%=&=o%D+
+             ",
"                              }.5.n**=C.|+|+|+|+|+|+|+n@|+I+Z@n@|+|+n
+@|+|+n@|+|+|+n@|+|+|+|+n@|+K+|+n@|+|+|+n@|+|+|+|+|+|+|+|+==S*-=;=>=,=
+'=I*)=!=~=S\$'\$}\$k\$}\$'\$S\$_%K\$\$\$d\$>#e*{=q@]=^=/=|+|+|+|+|+|+|+(=_='*f\$
+             ",
"                              <.G.J.:=<=[=|+|+|+|+|+|+n@|+|+|+n@|+|+n
+@|+|+n@|+|+|+n@|+|+|+|+n@|+|+|+n@|+|+|+n@|+|+|+|+|+|+|+|+|+K+|+}=|=1=
+r@E#i*2=D&V\$3=3=4=3=>\$ =4# #5=6=7=8=9=0=a=b=e\$|+|+|+|+|+|+|+c=}#D+d=
+             ",
"                              }.D.g\$Z%Z%e=|+|+|+|+|+|+|+n@n@n@|+n@|+n
+@|+|+|+n@n@n@n@|+|+|+|+|+n@n@n@|+|+|+|+n@|+|+|+|+|+|+|+|+|+|+|+|+K+e\$
+f=6#g=U%f*3#i#i#L*h=E#j*U%i=j=|+|+|+|+|+|+|+|+|+|+|+|+|+|+K+(=}#7&7&
+             ",
"                              :.F.8&Z%g\$k=l=|+|+|+|+|+|+|+|+|+|+|+|+|
++|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+
+|+K+e\$m=1+1+1+1+1+1+1+m=n=e\$K+|+|+|+|+|+|+|+|+|+|+|+|+|+|+e\$l%o=p={%
+             ",
"                              :.5.8&C.8&r%q=)*|+|+|+|+|+|+|+|+|+|+|+|
++|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+
+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+K+r=>+5&s=,*
+             ",
"                              |.D.8&8&t=u=v=w=|+|+|+|+|+|+|+|+|+|+|+|
++|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+K+|+K+K+|+|+
+|+K+|+K+K+|+|+|+K+|+K+K+|+|+|+K+|+K+K+|+|+|+K+|+K+K+K+x=>@y=>+z=s=D+
+             ",
"                              :.5.u=Z%I&A=B=C=D=E=F=G=\$=|+|+|+|+|+|+|
++|+|+|+|+|+)*K+K+K+K+K+K+K+K+K+J+K+K+J+H=T@I=J=p*K=k%L=M=N=O=).a P=a
+P=Q=R=R=S=S=S=S=R=R=%=U@X%<#%=T=i@U=U@V=%=W=V=%=%=X=U@y.Y=Z=`= -B.E+
+             ",
"                              .-+-@-#-\$-%-&-&-*-*-*-*-*-=-#---;->-,-'
+-,-,-,-)-!-~-{-]-^-/-(-_-:-*-<-*-s=[-}-|-1-2-z#3-4-s=*-5-6-7-8-s=9-0-
+)+0-a-b-c-'+s=W@'+7&d-e-f-g-o%~%6&h-,*G&i-j-o%d-l@G&z#g-'+k-0-0-l-m-
+             ",
"                              *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
+-*-*-*-*-*-*-*-*-*-*-*-*-n-o-p-q-G&l-E+k@6&r-k-{%m-G&|#|#s-m-E+t-{%t-
+{%E+D+m-{%l-u-m-6&i-i-k@v-w-,*x-y-r-z-A-m-t-G&t-i-n%i-|#l-z-i-z-B-C-
+             ",
"
+
+
+             ",
"
+
+
+             ",
"
+
+
+             "};
end-of-xpm
} # end wilbur #}}}2

# END logos }}}1

# __END__  {{{1
__END__

#---+--- 1 ---+--- 2 ---+--- 3 ---+--- 4 ---+--- 5 ---+--- 6 ---+--- M
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

B<qb3>

This F<file> should be used as a skeleton for further perl-scripts
which are to be developed.

tos <_tosch_@yahoo.com>

This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.

\$Revision: 0.68 \$

=cut
# __END__ }}}1

Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://671958]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (6)
As of 2022-12-02 12:46 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
My favourite new Perl feature (in 2022) ...

Results (43 votes). Check out past polls.

Notices?