aboutsummaryrefslogtreecommitdiff
path: root/sandbox
diff options
context:
space:
mode:
Diffstat (limited to 'sandbox')
-rw-r--r--sandbox/Controls.pm224
-rw-r--r--sandbox/alledges.pl47
-rw-r--r--sandbox/allgradients.pl64
-rw-r--r--sandbox/allgradients.tcl48
-rw-r--r--sandbox/alllineshapes.pl47
-rw-r--r--sandbox/allreliefs.pl54
-rw-r--r--sandbox/allreliefs.tcl30
-rw-r--r--sandbox/bouton-down.xpm342
-rw-r--r--sandbox/bouton.xpm329
-rw-r--r--sandbox/conical.tcl18
-rw-r--r--sandbox/contours.tcl45
-rw-r--r--sandbox/controls.tcl158
-rw-r--r--sandbox/defs.tcl1097
-rw-r--r--sandbox/fvwm.xbm21
-rw-r--r--sandbox/lines.pl35
-rw-r--r--sandbox/logo.gifbin402 -> 0 bytes
-rw-r--r--sandbox/smooth.tcl34
-rw-r--r--sandbox/testarc.tcl44
-rw-r--r--sandbox/testbezier.pl190
-rw-r--r--sandbox/testbezier.tcl131
-rw-r--r--sandbox/testbitmaps.tcl86
-rw-r--r--sandbox/testicon.tcl102
-rw-r--r--sandbox/testplug.pl51
-rw-r--r--sandbox/testpoly.tcl157
-rw-r--r--sandbox/testrect.pl99
-rw-r--r--sandbox/testrelief.pl73
-rw-r--r--sandbox/testrelief.tcl45
-rw-r--r--sandbox/testshape.pl132
-rw-r--r--sandbox/testshape.tcl18
-rw-r--r--sandbox/testtext.tcl138
-rw-r--r--sandbox/testwind.tcl19
-rw-r--r--sandbox/testzinc.pl503
-rw-r--r--sandbox/textexpand.tcl6
-rw-r--r--sandbox/texture-bois1.xpm320
-rw-r--r--sandbox/texture-paper.xpm87
-rw-r--r--sandbox/trash.xbm6
-rw-r--r--sandbox/triangles.pl69
-rw-r--r--sandbox/xpenguin.pngbin10148 -> 0 bytes
-rw-r--r--sandbox/zinc.tcl284
-rw-r--r--sandbox/zinc.test154
40 files changed, 0 insertions, 5307 deletions
diff --git a/sandbox/Controls.pm b/sandbox/Controls.pm
deleted file mode 100644
index 55f6b6a..0000000
--- a/sandbox/Controls.pm
+++ /dev/null
@@ -1,224 +0,0 @@
-
-package Controls;
-
-$top = 1;
-
-sub new {
- my $proto = shift;
- my $type = ref($proto) || $proto;
- my ($zinc) = @_;
- my $self = {};
-
- $self{'zinc'} = $zinc;
- $self{'cur_x'} = 0;
- $self{'cur_y'} = 0;
- $self{'cur_angle'} = 0;
- $self{'corner_x'} = 0;
- $self{'corner_y'} = 0;
-
- $self{'tlbbox'} = $zinc->add('group', $top,
- -sensitive => 0, -visible => 0,
- -tags => 'currentbbox');
- $zinc->add('rectangle', $self{'tlbbox'}, [-3, -3, +3, +3]);
- $self{'trbbox'} = $zinc->add('group', $top,
- -sensitive => 0, -visible => 0,
- -tags => 'currentbbox');
- $zinc->add('rectangle', $self{'trbbox'}, [-3, -3, +3, +3]);
- $self{'blbbox'} = $zinc->add('group', $top,
- -sensitive => 0, -visible => 0,
- -tags => 'currentbbox');
- $zinc->add('rectangle', $self{'blbbox'}, [-3, -3, +3, +3]);
- $self{'brbbox'} = $zinc->add('group', $top,
- -sensitive => 0, -visible => 0,
- -tags => 'currentbbox');
- $zinc->add('rectangle', $self{'brbbox'}, [-3, -3, +3, +3]);
- $zinc->add('rectangle', $top, [0, 0, 1, 1],
- -linecolor => 'red', -tags => 'lasso',
- -visible => 0, -sensitive => 0);
-
- $zinc->Tk::bind('<Shift-ButtonPress-1>', [\&start_lasso, $self]);
- $zinc->Tk::bind('<Shift-ButtonRelease-1>', [\&fin_lasso, $self]);
-
- $zinc->Tk::bind('<ButtonPress-2>', sub { my $ev = $zinc->XEvent();
- my @closest = $zinc->find('closest',
- $ev->x, $ev->y);
- print "at point=$closest[0]\n" });
-
- $zinc->Tk::bind('<ButtonPress-3>', [\&press, $self, \&motion]);
- $zinc->Tk::bind('<ButtonRelease-3>', [\&release, $self]);
-
- $zinc->Tk::bind('<Shift-ButtonPress-3>', [\&press, $self, \&zoom]);
- $zinc->Tk::bind('<Shift-ButtonRelease-3>', [\&release, $self]);
-
- $zinc->Tk::bind('<Control-ButtonPress-3>', [\&press, $self, \&rotate]);
- $zinc->Tk::bind('<Control-ButtonRelease-3>', [\&release, $self]);
-
- $zinc->Tk::bind('current', '<Enter>', [\&showbox, $self]);
- $zinc->Tk::bind('current', '<Leave>', [\&hidebox, $self]);
-
- bless ($self, $type);
- return $self;
-}
-
-#
-# Controls for the window transform.
-#
-sub press {
- my ($zinc, $self, $action) = @_;
- my $ev = $zinc->XEvent();
- my $lx = $ev->x;
- my $ly = $ev->y;
-
- $self->{'cur_x'} = $lx;
- $self->{'cur_y'} = $ly;
- $self->{'cur_angle'} = atan2($ly, $lx);
- $zinc->Tk::bind('<Motion>', [$action, $self]);
-}
-
-sub motion {
- my ($zinc, $self) = @_;
- my $ev = $zinc->XEvent();
- my $lx = $ev->x;
- my $ly = $ev->y;
- my @it;
- my @res;
-
- @it = $zinc->find('withtag', 'controls');
- if (scalar(@it) == 0) {
- return;
- }
- @res = $zinc->transform($it[0], [$lx, $ly, $self->{'cur_x'}, $self->{'cur_y'}]);
- $zinc->translate('controls', $res[0] - $res[2], $res[1] - $res[3]);
- $self->{'cur_x'} = $lx;
- $self->{'cur_y'} = $ly;
-}
-
-sub zoom {
- my ($zinc, $self) = @_;
- my $ev = $zinc->XEvent();
- my $lx = $ev->x;
- my $ly = $ev->y;
- my $maxx;
- my $maxy;
- my $sx;
- my $sy;
-
- if ($lx > $self->{'cur_x'}) {
- $maxx = $lx;
- } else {
- $maxx = $self->{'cur_x'};
- }
- if ($ly > $self->{'cur_y'}) {
- $maxy = $ly
- } else {
- $maxy = $self->{'cur_y'};
- }
- $sx = 1.0 + ($lx - $self->{'cur_x'})/$maxx;
- $sy = 1.0 + ($ly - $self->{'cur_y'})/$maxy;
- $self->{'cur_x'} = $lx;
- $self->{'cur_y'} = $ly;
- $zinc->scale('controls', $sx, $sy);
-# $main::scale *= $sx;
-# main::update_transform($zinc);
-}
-
-sub rotate {
- my ($zinc, $self) = @_;
- my $ev = $zinc->XEvent();
- my $lx = $ev->x;
- my $ly = $ev->y;
- my $langle;
-
- $langle = atan2($ly, $lx);
- $zinc->rotate('controls', -($langle - $self->{'cur_angle'}));
- $self->{'cur_angle'} = $langle;
-}
-
-sub release {
- my ($zinc, $self) = @_;
- $zinc->Tk::bind('<Motion>', '');
-}
-
-sub start_lasso {
- my ($zinc, $self) = @_;
- my $ev = $zinc->XEvent();
- my $lx = $ev->x;
- my $ly = $ev->y;
- my @coords;
-
- $self->{'cur_x'} = $lx;
- $self->{'cur_y'} = $ly;
- $self->{'corner_x'} = $lx;
- $self->{'corner_y'} = $ly;
- @coords = $zinc->transform($top, [$lx, $ly]);
- $zinc->coords('lasso', [$coords[0], $coords[1], $coords[0], $coords[1]]);
- $zinc->itemconfigure('lasso', -visible => 1);
- $zinc->raise('lasso');
- $zinc->Tk::bind('<Motion>', [\&lasso, $self]);
-}
-
-sub lasso {
- my ($zinc, $self) = @_;
- my $ev = $zinc->XEvent();
- my $lx = $ev->x;
- my $ly = $ev->y;
- my @coords;
-
- $self->{'corner_x'} = $lx;
- $self->{'corner_y'} = $ly;
- @coords = $zinc->transform($top, [$self->{'cur_x'}, $self->{'cur_y'}, $lx, $ly]);
- $zinc->coords('lasso', [$coords[0], $coords[1], $coords[2], $coords[3]]);
-}
-
-sub fin_lasso {
- my ($zinc, $self) = @_;
- my $enclosed;
- my $overlapping;
-
- $zinc->Tk::bind('<Motion>', '');
- $zinc->itemconfigure('lasso', -visible => 0);
- $enclosed = join(', ', $zinc->find('enclosed',
- $self->{'cur_x'}, $self->{'cur_y'},
- $self->{'corner_x'}, $self->{'corner_y'}));
- $overlapping = join(', ', $zinc->find('overlapping',
- $self->{'cur_x'}, $self->{'cur_y'},
- $self->{'corner_x'}, $self->{'corner_y'}));
- print "enclosed=$enclosed, overlapping=$overlapping\n";
-}
-
-sub showbox {
- my ($zinc, $self) = @_;
- my @coords;
- my @it;
-
- if (! $zinc->hastag('current', 'currentbbox')) {
- @it = $zinc->find('withtag', 'current');
- if (scalar(@it) == 0) {
- return;
- }
- @coords = $zinc->transform($top, $zinc->bbox('current'));
-
- $zinc->coords($self->{'tlbbox'}, [$coords[0], $coords[1]]);
- $zinc->coords($self->{'trbbox'}, [$coords[2], $coords[1]]);
- $zinc->coords($self->{'brbbox'}, [$coords[2], $coords[3]]);
- $zinc->coords($self->{'blbbox'}, [$coords[0], $coords[3]]);
- $zinc->itemconfigure('currentbbox', -visible => 1);
- }
-}
-
-sub hidebox {
- my ($zinc, $self) = @_;
- my $ev = $zinc->XEvent();
- my $lx = $ev->x;
- my $ly = $ev->y;
- my @next;
-
- @next = $zinc->find('closest', $lx, $ly);
- if ((scalar(@next) == 0) ||
- ! $zinc->hastag($next[0], 'currentbbox') ||
- $zinc->hastag('current', 'currentbbox')) {
- $zinc->itemconfigure('currentbbox', -visible => 0);
- }
-}
-
-
diff --git a/sandbox/alledges.pl b/sandbox/alledges.pl
deleted file mode 100644
index e8893a9..0000000
--- a/sandbox/alledges.pl
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/usr/bin/perl
-# $Id$
-# these simple samples have been developped by C. Mertz mertz@cena.fr
-
-use Tk;
-use Tk::Zinc;
-use strict;
-
-my $defaultfont = '-b&h-lucida-bold-r-normal-*-*-140-*-*-p-*-iso10646-1';
-my $mw = MainWindow->new();
-my $zinc = $mw->Zinc(-width => 700, -height => 300,
-# -render => 1,
- -backcolor => "grey50", # this will be transparent in the doc
- )->pack();
-
-
-my $i = 1;
-my $x = 40;
-my $y = 40;
-foreach my $contour ( (['left'], ['right'], ['top'], ['bottom'],
- ['top', 'bottom'], ['left','right'], ['left','top'], ['contour'],
- ['oblique'], ['counteroblique'],['oblique','counteroblique']) ) {
- my $tab = $zinc->add('tabular', 1, 1, -position => [$x, $y],
- -labelformat => "a5a5+0+0",
- );
- my $contour_text = "['" . join ("','",@{$contour}) . "']";
- $zinc->itemconfigure($tab, 0,
- -text => $contour_text,
- -border => $contour,
- -alignment => "center",
- -filled => 1,
- -backcolor => "gray95",
-);
- $i++;
- if ($i == 5) {
- $x = 40;
- $y = $y + 50;
- $i = 1;
- }
- else {
- $x = $x + 160;
- }
-}
-
-
-
-MainLoop();
diff --git a/sandbox/allgradients.pl b/sandbox/allgradients.pl
deleted file mode 100644
index bd7a4d6..0000000
--- a/sandbox/allgradients.pl
+++ /dev/null
@@ -1,64 +0,0 @@
-#!/usr/bin/perl
-# $Id$
-# these simple samples have been developped by C. Mertz mertz@cena.fr and N. Banoun banoun@cena.fr
-
-use Tk;
-use Tk::Zinc;
-use strict;
-
-my ($grp,, $s, $i);
-my $defaultfont = '-b&h-lucida-bold-r-normal-*-*-140-*-*-p-*-iso10646-1';
-my $mw = MainWindow->new();
-my $zinc = $mw->Zinc(-width => 700, -height => 300,
- -render => 1,
- -backcolor => "red", # this will be transparent in the doc
- )->pack();
-
-
-$zinc->gname('black|white', 'axial 1');
-$zinc->gname('black|white/90', 'axial 2');
-$zinc->gname('black|white/30', 'axial 3');
-$zinc->gname('black|black:0/30', 'axial 4');
-$zinc->gname('white|black(-14 -20', 'radial 1');
-$zinc->gname('white:50 0 70|black 50|white 100(0 0', 'radial 2');
-$zinc->gname('white|black:80[-14 -20', 'path 1');
-$zinc->gname('white|white 30|black:80[-14 -20', 'path 2');
-
-$grp = $zinc->add('group', 1);
-$zinc->add('rectangle', $grp, [0, 0, 70, 50],
- -filled => 1,
- -fillcolor => 'white',
- );
-$zinc->add('rectangle', $grp, [0, 0, 70, 50],
- -filled => 1,
- -linewidth => 1, # to help making the background transparent with gimp!
-
- -fillcolor => 'axial 1',
- -tags => ['rect']);
-$zinc->add('text', $grp,
- -text => 'axial 1',
- -anchor => 'center',
- -position => [35, -10],
- -tags => ['txt']);
-$zinc->translate($grp, 20, 30);
-$i = 1;
-foreach $s (('axial 2', 'axial 3', 'axial 4', 'radial 1',
- 'radial 2', 'path 1', 'path 2')) {
- $grp = $zinc->clone($grp);
- $zinc->addtag("g$grp", 'withtag', "$grp*attrs"); #, $grp, 0);
- $zinc->itemconfigure(".$grp.txt",
- -text => $s);
- $zinc->itemconfigure(".$grp.rect",
- -fillcolor => $s);
- $i++;
- if ($i == 5) {
- $zinc->translate($grp, -3*100, 80);
- $i = 1;
- }
- else {
- $zinc->translate($grp, 100, 0);
- }
-}
-
-
-MainLoop();
diff --git a/sandbox/allgradients.tcl b/sandbox/allgradients.tcl
deleted file mode 100644
index eaab25b..0000000
--- a/sandbox/allgradients.tcl
+++ /dev/null
@@ -1,48 +0,0 @@
-
-lappend auto_path ..
-package require Tkzinc
-
-set defaultfont -b&h-lucida-bold-r-normal-*-*-140-*-*-p-*-iso10646-1
-zinc .zinc -width 700 -height 300 -render 1 -backcolor red
-pack .zinc
-
-
-puts start
-.zinc gname black|white {axial 1}
-#.zinc gname {=conical 70 |white|gray20 50|white} {axial 2}
-.zinc gname {=conical 70 |red|yellow 50|red} {axial 2}
-.zinc gname {=axial -50 -50 50 50|black|white} {axial 3}
-.zinc gname {=axial 30|black|black;0} {axial 4}
-.zinc gname {=radial -50 -50 50 50|white|black} {radial 1}
-.zinc gname {=radial 0 0|white;50 0 70|black 50|white 100} {radial 2}
-.zinc gname {=path -14 -20|white|black;80} {path 1}
-.zinc gname {=path -14 -20|white|white 30|black;80} {path 2}
-puts end
-
-set grp [.zinc add group 1]
-#.zinc add rectangle $grp {0 0 70 50} -filled 1 -fillcolor white
-.zinc add rectangle $grp {0 0 200 300} -filled 1 -linewidth 1 \
- -fillcolor {axial 1} -tags rect
-.zinc add text $grp -text {axial 1} -anchor center -position {35 -10} \
- -tags txt
-
-.zinc translate $grp 20 30
-
-set i 1
-foreach s {{axial 2} {axial 3} {axial 4} {radial 1}
- {radial 2} {path 1} {path 2}} {
-
- set grp [.zinc clone $grp]
- .zinc addtag "g$grp" withtag "$grp*attrs"
- .zinc itemconfigure ".$grp.txt" -text $s
- .zinc itemconfigure ".$grp.rect" -fillcolor $s
- incr i
-
- if {$i == 5} {
- .zinc translate $grp [expr -3*100] 80
- set i 1
- } else {
- .zinc translate $grp 100 0
- }
-}
-
diff --git a/sandbox/alllineshapes.pl b/sandbox/alllineshapes.pl
deleted file mode 100644
index c2bafc3..0000000
--- a/sandbox/alllineshapes.pl
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/usr/bin/perl
-# $Id$
-# these simple samples have been developped by C. Mertz mertz@cena.fr
-
-use Tk;
-use Tk::Zinc;
-use strict;
-
-my $defaultfont = '-b&h-lucida-bold-r-normal-*-*-140-*-*-p-*-iso10646-1';
-my $mw = MainWindow->new();
-my $zinc = $mw->Zinc(-width => 700, -height => 420,
-# -render => 1,
-# -backcolor => "red", # this will be transparent in the doc
- )->pack();
-
-
-my $i = 1;
-my $x = 20;
-my $y = 20;
-foreach my $lineshape ( qw(straight rightlightning leftlightning
- rightcorner leftcorner doublerightcorner
- doubleleftcorner) ) {
- my $wpt = $zinc->add('waypoint', 1, 1,
- -position => [$x, $y],
- -labelformat => "a5a5+0+0",
- -leaderanchors => '% 100x100',
- -leadershape => $lineshape,
- -labeldistance => 120,
- );
- $zinc->itemconfigure($wpt, 0,
- -text => $lineshape,
- -alignment => "center",
- );
- $i++;
- if ($i == 4) {
- $x = 20;
- $y = $y + 150;
- $i = 1;
- }
- else {
- $x = $x + 210;
- }
-}
-
-
-
-MainLoop();
diff --git a/sandbox/allreliefs.pl b/sandbox/allreliefs.pl
deleted file mode 100644
index 891a16f..0000000
--- a/sandbox/allreliefs.pl
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/usr/bin/perl
-# $Id$
-# these simple samples have been developped by C. Mertz mertz@cena.fr and N. Banoun banoun@cena.fr
-
-use Tk;
-use Tk::Photo;
-use Tk::Zinc;
-use strict;
-
-my ($grp,, $s, $i);
-my $defaultfont = '-adobe-helvetica-bold-r-normal-*-100-*-*-*-*-*-*';
-my $mw = MainWindow->new();
-my $zinc = $mw->Zinc(-width => 700, -height => 300,
- -render => 1,
- -backcolor => "red", # this will be transparent in the doc
- )->pack();
-
-
-$grp = $zinc->add('group', 1);
-$zinc->add('rectangle', $grp, [0, 0, 70, 50],
- -filled => 1,
- -fillcolor => 'tan',
- -linecolor => 'tan',
- -linewidth => 6,
- -relief => 'raised',
- -tags => ['attrs']);
-$zinc->add('text', $grp,
- -text => 'raised',
- -anchor => 'center',
- -font => $defaultfont,
- -position => [35, -10],
- -tags => ['attrs']);
-$zinc->translate($grp, 20, 30);
-$i = 1;
-foreach $s (('sunken', 'ridge', 'groove',
- 'roundraised', 'roundsunken', 'roundridge', 'roundgroove',
- 'raisedrule', 'sunkenrule')) {
- $grp = $zinc->clone($grp);
- $zinc->addtag("g$grp", 'withtag', 'attrs', $grp, 0);
- $zinc->itemconfigure("attrs && g$grp",
- -text => $s,
- -relief => $s);
- $i++;
- if ($i == 5) {
- $zinc->translate($grp, -3*100, 80);
- $i = 1;
- }
- else {
- $zinc->translate($grp, 100, 0);
- }
-}
-
-
-MainLoop();
diff --git a/sandbox/allreliefs.tcl b/sandbox/allreliefs.tcl
deleted file mode 100644
index 291a02b..0000000
--- a/sandbox/allreliefs.tcl
+++ /dev/null
@@ -1,30 +0,0 @@
-# $Id$
-# these simple samples have been developped by C. Mertz mertz@cena.fr and N. Banoun banoun@cena.fr
-
-lappend auto_path [file join [file dirname [info script]] ..]
-package require Tkzinc
-
-set defaultfont "-adobe-helvetica-bold-r-normal-*-100-*-*-*-*-*-*"
-zinc .z -width 700 -height 300 -render 1 -backcolor gray
-pack .z
-
-set grp [.z add group 1]
-.z add rectangle $grp {0 0 70 50} -filled 1 -fillcolor tan -linecolor tan \
- -linewidth 6 -relief raised -tags attrs
-.z add text $grp -text raised -anchor center -font $defaultfont \
- -position {35 -10} -tags texts
-.z translate $grp 20 30
-
-set i 1
-foreach s {sunken ridge groove roundraised roundsunken roundridge roundgroove raisedrule sunkenrule} {
- set grp [.z clone $grp]
- .z itemconfigure "$grp.texts" -text $s
- .z itemconfigure "$grp.attrs" -relief $s
- incr i
- if {$i == 5} {
- .z translate $grp [expr -3*100] 80
- set i 1
- } else {
- .z translate $grp 100 0
- }
-}
diff --git a/sandbox/bouton-down.xpm b/sandbox/bouton-down.xpm
deleted file mode 100644
index f3c41c2..0000000
--- a/sandbox/bouton-down.xpm
+++ /dev/null
@@ -1,342 +0,0 @@
-/* XPM */
-static char *on[] = {
-/* width height num_colors chars_per_pixel */
-" 90 86 249 2",
-/* colors */
-"b1 s mask c none",
-".. c #f8fcf8",
-".# c #080808",
-".a c #101010",
-".b c #181818",
-".c c #202020",
-".d c #f8f4f0",
-".e c #605858",
-".f c #484040",
-".g c #383030",
-".h c #282020",
-".i c #201818",
-".j c #302020",
-".k c #181010",
-".l c #100808",
-".m c #e0ccc0",
-".n c #806860",
-".o c #503830",
-".p c #f8e4d8",
-".q c #805848",
-".r c #c8bcb0",
-".s c #887870",
-".t c #f8dcc8",
-".u c #f0d4c0",
-".v c #d8bca8",
-".w c #605048",
-".x c #b89c88",
-".y c #b09480",
-".z c #403028",
-".A c #785848",
-".B c #f8b490",
-".C c #705040",
-".D c #885840",
-".E c #f8ece0",
-".F c #d8ccc0",
-".G c #988c80",
-".H c #c8ac98",
-".I c #584840",
-".J c #f8ccb0",
-".K c #886858",
-".L c #f8bc98",
-".M c #382820",
-".N c #a07058",
-".O c #684838",
-".P c #906048",
-".Q c #b07050",
-".R c #a06040",
-".S c #f0e4d8",
-".T c #d0c4b8",
-".U c #b0a498",
-".V c #908478",
-".W c #706058",
-".X c #c09c80",
-".Y c #a07860",
-".Z c #c89470",
-".0 c #f8b488",
-".1 c #b88460",
-".2 c #805840",
-".3 c #b07858",
-".4 c #a87050",
-".5 c #a06848",
-".6 c #986040",
-".7 c #b87048",
-".8 c #b06840",
-".9 c #f0dcc8",
-"#. c #e8d4c0",
-"## c #d0bca8",
-"#a c #b09c88",
-"#b c #f8d4b8",
-"#c c #907868",
-"#d c #e8c4a8",
-"#e c #887060",
-"#f c #d8b498",
-"#g c #c8a488",
-"#h c #705848",
-"#i c #e0b490",
-"#j c #b08c70",
-"#k c #685040",
-"#l c #c89c78",
-"#m c #f8bc90",
-"#n c #906850",
-"#o c #a07050",
-"#p c #b87850",
-"#q c #b07048",
-"#r c #a86840",
-"#s c #f8e4d0",
-"#t c #e0ccb8",
-"#u c #d8c4b0",
-"#v c #c0ac98",
-"#w c #f8dcc0",
-"#x c #a08c78",
-"#y c #d8bca0",
-"#z c #988470",
-"#A c #f8cca8",
-"#B c #786050",
-"#C c #987860",
-"#D c #d8ac88",
-"#E c #d0a480",
-"#F c #604838",
-"#G c #b08460",
-"#H c #584030",
-"#I c #785840",
-"#J c #d09c70",
-"#K c #c89468",
-"#L c #c08c60",
-"#M c #b07850",
-"#N c #906040",
-"#O c #a87048",
-"#P c #a06840",
-"#Q c #f0d4b8",
-"#R c #e0c4a8",
-"#S c #d0b498",
-"#T c #c8ac90",
-"#U c #c0a488",
-"#V c #b09478",
-"#W c #e0bc98",
-"#X c #a08468",
-"#Y c #c09c78",
-"#Z c #f8c498",
-"#0 c #907058",
-"#1 c #886850",
-"#2 c #806048",
-"#3 c #f8bc88",
-"#4 c #a07858",
-"#5 c #b88458",
-"#6 c #b07040",
-"#7 c #f8d4b0",
-"#8 c #e8c4a0",
-"#9 c #d8b490",
-"a. c #d0ac88",
-"a# c #f8cca0",
-"aa c #c8a480",
-"ab c #b89470",
-"ac c #b08c68",
-"ad c #f8c490",
-"ae c #d0a478",
-"af c #a88460",
-"ag c #c89c70",
-"ah c #c09468",
-"ai c #987050",
-"aj c #b88c60",
-"ak c #f8bc80",
-"al c #906848",
-"am c #b08458",
-"an c #a87850",
-"ao c #886040",
-"ap c #a07048",
-"aq c #e0dcd0",
-"ar c #a09c90",
-"as c #807870",
-"at c #e8dcc8",
-"au c #e0d4c0",
-"av c #c8bca8",
-"aw c #c0b4a0",
-"ax c #605850",
-"ay c #a89c88",
-"az c #f0dcc0",
-"aA c #a09480",
-"aB c #887868",
-"aC c #403830",
-"aD c #b09c80",
-"aE c #685848",
-"aF c #907860",
-"aG c #605040",
-"aH c #705840",
-"aI c #483828",
-"aJ c #f8f4e8",
-"aK c #b8b4a8",
-"aL c #b0aca0",
-"aM c #989488",
-"aN c #787068",
-"aO c #f8ecd8",
-"aP c #f0e4d0",
-"aQ c #706860",
-"aR c #d8ccb8",
-"aS c #d0c4b0",
-"aT c #b8ac98",
-"aU c #585048",
-"aV c #b0a490",
-"aW c #504840",
-"aX c #f8e4c8",
-"aY c #988c78",
-"aZ c #e0ccb0",
-"a0 c #d8c4a8",
-"a1 c #908470",
-"a2 c #c8b498",
-"a3 c #c0ac90",
-"a4 c #b8a488",
-"a5 c #f8dcb8",
-"a6 c #786858",
-"a7 c #e8cca8",
-"a8 c #706050",
-"a9 c #a89478",
-"b. c #e0c4a0",
-"b# c #d8bc98",
-"ba c #a08c70",
-"bb c #d0b490",
-"bc c #988468",
-"bd c #c8ac88",
-"be c #302820",
-"bf c #c0a480",
-"bg c #b89c78",
-"bh c #887058",
-"bi c #e0bc90",
-"bj c #584838",
-"bk c #b09470",
-"bl c #806850",
-"bm c #a88c68",
-"bn c #f8cc98",
-"bo c #786048",
-"bp c #504030",
-"bq c #c8a478",
-"br c #987858",
-"bs c #b89468",
-"bt c #886848",
-"bu c #c8c4b8",
-"bv c #888478",
-"bw c #686058",
-"bx c #484038",
-"by c #282018",
-"bz c #c8bca0",
-"bA c #a89c80",
-"bB c #e8d4b0",
-"bC c #d8c4a0",
-"bD c #c8b490",
-"bE c #b8a480",
-"bF c #a08c68",
-"bG c #e0d4b8",
-"bH c #f0e4c8",
-"bI c #d8ccb0",
-"bJ c #706048",
-"bK c #e0dcc8",
-"bL c #c0bca8",
-"bM c #807868",
-"bN c #f8f4e0",
-"bO c #d8d4c0",
-"bP c #787060",
-"bQ c #f0ecd8",
-"bR c #e8e4d0",
-"bS c #c8c4b0",
-"bT c #b0ac98",
-"bU c #f8fcf0",
-"bV c #f8fce8",
-"bW c #505048",
-"bX c #484840",
-"bY c #303028",
-"bZ c #282820",
-"b0 c #181810",
-"b2 c #000000",
-/* pixels */
-"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1.0a#.J#waO.E.................E.p#w#ba#adb1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1ad#A.taJ...d....#.bG#D#D#D#D#D#D#D#9#.bG........aJ#s#7bnb1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1#baO......#t#D#L.7.8.8.8.8.8#r.8.8.8.8.8.8.8.8.7#L#DbG......#s#Ab1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1a##s.d..aJb.#L.8.8#r#r#r#r#r#r#r.8#r.8#r.8#r#6.8#6.8#6#6.8.8.8#Kb.aJ...d#w#3b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1#m#sbU..bG#J#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#O#r#O#r#O.8#q.8.8.8#J#.....#s#Zb1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1#m.t....b..7.8#r#r#r#r.R.R#P.R.R#P.R#P#P#P#P.5#P#P.5#P.5#P.5#r#O#r#O#O#O#O#q#q#q#pb.....aX#mb1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1a5.d..b..7#r#r#r.R.R.R.R.R#P.6.6#P.6.6.6.P.R.6.6al#P.5.6.5#Pal.5al#P.5#P#r#O#O#O#6#q#q#p#d..aJ#bb1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1a#aJ...9#5#r#r#r.R.R#P.R.6.6.6.6.6#N#N#N.P#N#N.Pal.6.6.P#Nal.P.P.Pal.5.Pal.5al.5#O#O#O#q#q#q#q#KaP...Ea#b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1#7.daJae#r#r#r.R.R#P.6.6.6.6#N#N#Naoaoaoaoaobtaoaoaoaobtbt.Pbt.P.P.P.P.Pal.P.Palalalal.5ap#O#q#q#q#q#DaJ.d#wb1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1#3.t...9#p#r#r#r.R#P.6.6.6#N#Naoaoao.2.Dbt.q.2.q.2.2.q.q.q.q.2.2#2.2#2#2#2.qbtbtal.Palalalai#o#o#o.4.Q#p#M#LaP..#sa#b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1ak.E..b.#r#r.R.R.R.6.6.6#Naoao.D.D.2.q.q#I#I#I#F.z.M.ib0.#.#.#.#.#.#.#b0.i.MaI#F.q.q#2bt.P.Palalal.5ap#O.4#M#M#p#d...E.Bb1b1b1b1b1b1b1b1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1b1b1b1b1b1b1a#aJ.d.Z#r#r.R#P.R.6.6#Nao.D.D.2.2#2.2#I.O.zby.#.#.#.#aC.gaQaQ.WaQbw.WaQ.gaC.#.#.#.#byaC.C#2#1bt#n#naiai#o#o.4#M#M#M#E..aJ#mb1b1b1b1b1b1b1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1b1b1b1b1b1a#.daJ.Z#r#r.R#P.6.6#N#N.Dao.2.2.q#I#IaI.i.#.#.caUbv.UaRaRaR#uaSaS#uaSaS##aS#####a.saW.c.#.#.i.o.q.qbt#nalai#o#o.4#M#M#p#EaJ.da#b1b1b1b1b1b1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1b1b1b1b1a#.daJ#p#r#P.R.R.6.6#Naoao.2.2#2#IaH.M.a.#b0.e.UaRaRaRaRaR.TaR.TaS#uaSaS#uaS##aS###########aax.a.#.a.z.A#1bt#n#nai#o#oan#M#MahaJ.d#Zb1b1b1b1b1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1b1b1b1ad.E..#p#r.R#P.R.6#N#Nao.D.2.q.2#I.z.l.#bYbv.FaRaRaRaRaRaRaRaR#u.TaR.TaRaSaSaSaS##aS########bzbzbzaBbe.#.laI#2#1#n#nai#o.4an.3#pah...E#3b1b1b1b1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1b1b1b1.E...Z#r#P#r.R.6#N#N.D.2.2.2#I#Hb0.#.caV.FaRaRaR.F.TaR.FaR.TaR.FaR.TaR.TaR#uaSbIaSaSaS########bzbz#Sbz#x.i.#b0#F#1#n#naiai.4an.3#p#E...Eb1b1b1b1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1b1b1.t..ae#r#r#r.6.6#Nao.D#2.2.A#Ibe.#.aas.F.TaR.F.T.FaR.FaR.F.FaR.FaR.FaRaRaRaRaRaR.TbIaS##aS##########bz#Sbz#SbP.k.#.M#2#1#nai#o#4anam#p#i..aXb1b1b1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1b1#A..b.#r#r#P.6.6#Naoao.2.2#I.Ob0.#.faSaRaRaR.F.F.FbO.F.FbO.FbO.FbKbOauauauau.m.maR#taR#ubIaSaS######bz##bz#Sa2a2a3bx.#.b#h#1#nai#o#4.3am#5bB...Jb1b1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1a#.d.9#r#r#P.R.6#N#N.D#2.2.A#F.#.#as.F.F.F.F.F.F.FbO.FbObObKbKbKaubRbRbRatbKatbKat#.bK#.aRaRaRbIaS######bzbz#Sbz#Sa2.Ha6.#.l#k#n#0br#o#4.3am#L.S.dadb1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1aO..#5#r#r.R.6#N#Nbt.2.2#IaI.l.baLaRaR.F.F.FbO.FbObObObKbKbRbRbRbR.p.S.S.S.p.S#saPaPaPaP#.auau#tbIbI##a0####bz#Sbz#Sa2.Ha9.a.lbx#n#0br#4#4.3#5ah..aOb1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1#7..#D#r#r#Pal.6.Pao.2.2.qaC.#.cbTaR.F.FaR.F.FbO.FbKbKbKbRbR.E.E.E.SaO.EaOaObQaObQ.p.S#saPaPbH.9bH#tbGbI#ua0#####Sa2a2a2a2a2a9be.#bp#nbr.N#4am.1.1b....Jb1b1b1b1b1b1b1",
-"b1b1b1b1b1b1ad.d.S#6#r#P#P.6#Nao.q.2bo#H.#bYbSaR.F.F.F.FbObObObK.SbR.S.E.E.E.E.E.E.E.EbQ.EaOaO.SbQ#saPaPaPaPbH.9.9.9#taZ#ta0bzbzbza2#SbD.H#T#UbZ.#aG#0br.Nafam.1#L.EaJbnb1b1b1b1b1b1",
-"b1b1b1b1b1b1#w..ah#r#r#P.6.P#Nbt.2#2#F.#.baSaR.F.FaRbObObOaqaq.S.E.E.E.E.E.EbN.EbN.E.E.E.EbQ.EbQaObQ.paP#saPaP.9.9#.az#.#.aZa0.vbz#Sa2a2a2#Ta3a4.a.l#k#0br#4af.1aj#E..#wb1b1b1b1b1b1",
-"b1b1b1b1b1ad.dbG.8#r.5.R.P#Nao.2.q#k.a.bbT.FaR.F.F.FbO.FbKbRbR.E.E.EbNaJbNbNaJbNaJbNbN.EbN.EaOaO.SaO.S#saPaPaP.9bH.9#.az#Q#.aZaZ#ybz#S#S#TbD#Tbda9.a.kblbrbr#4#Gaj#LaP.d#mb1b1b1b1b1",
-"b1b1b1b1b1#b..#L#r#r#P.6.Pao.q#2#I.i.#aMaR.T.F.F.FbObKaq.S.E.EaJbNaJaJ.EaJaJaJaJaJaJaJbN.E.E.E.E.EbQaObQaP#saPaPbH.9bHaz#.#QbGbG#R.vbza2a2.H#T#TbdaF.#.h.Kbr.Yaf#Gaj#l..a5b1b1b1b1b1",
-"b1b1b1b1b1aJ.9.8#r.5.5al#Nbt#2.2.z.#.eaRaR.FbO.FbObKbRbR.E.EaJbNaJaJaJaJaJaJaJaJaJaJ.EaJbNbN.E.EbQaO.pbQ.p.SaPaP.9bH.9#.az#.#Q#QbGa0#R#S#SbD#T#T#Ua3aG.#aCbrbraf#Gaj#L.SaJb1b1b1b1b1",
-"b1b1b1b1.J..#J#r#O#P.6#Nbt.q.2#k.lbYaR.FaR.F.FbObKbR.E.E.EaJ.EaJaJaJaJaJaJaJaJaJaJaJaJaJaJ.EbN.E.E.EbQaO.S#saP#sbH.9.9az#.azbG#QbG.JbB#y#Sa2#Ta3#Tbd#U.h.l#Bbr.Yafajah#W..#Ab1b1b1b1",
-"b1b1b1b1#saJ.8#O#r.5al.Pbt.q.Aby.#bTaRaR.F.F.FbObK.S.E.EaJbNaJaJaJaJaJaJaJaJaJaJaJaJaJaJaJaJ.EbN.EbQ.E.SaOaP.paPaP.9bHazaz#.azbG#QbBbB.vbz#SbD#T#Ubd#gba.#.M#0.Yaf#GbsahaJaOb1b1b1b1",
-"b1b1b1#m..#R#q#r.5.6.P.Pbt#2bj.#aUaR.F.T.F.F.FbKbR.E.EaJ.EaJaJaJaJaJ.daJbU.d.d.dbU.daJaJaJbNaJ.E.E.EaOaO.SaOaPaPaPbH.9.9#.az.u#Q#tbBbBa7#y#S#T#T#T#U#Ubdbx.##k#C.Yaf.1ah.u..adb1b1b1",
-"b1b1b1#b..ah#r#O.5al.Pbt.q.A.i.a.raR.TaRbO.FbKbR.E.E.EbNaJaJaJaJaJbU.dbV.d.dbV.dbV.dbVaJaJaJaJbNbN.E.EbQaO.S.paPaPaPbH.9az#.azbG#QbBbB#dbB#y#SbD#T#Ubd#Ubg.k.c#0.Ybmacaha....Jb1b1b1",
-"b1b1b1aOaJ.8#q#r.5al.Pbt.q#F.#aQaRaRaR.F.FbObKbR.E.EbNaJaJaJaJaJbUbUbU.dbUbV.dbU.dbUaJ.daJaJ.EaJ.E.EbQ.E.SaOaPaP#s.9.9atazaz#.#QbG#tbB#dbB#y#S#Tbd#UbdbfbfaE.#bo.YbmacbsahaJaXb1b1b1",
-"b1b1b1.dbB.8#O.5.5al.Pbt.Abe.#aw.TaR.F.TbObKbR.p.E.EbN.EaJaJaJ.dbUbU.dbV.d..bUbU..bUaJbUaJaJaJaJbN.E.E.EbQbQ.paPaPaPbH.9#.az#.#Q#QbBbB#d#R#Rb#bD#Tbd#U#Ubfba.#bY#C.Yacbsab.9.db1b1b1",
-"b1b1a#..#D#q#O#O.5.Pbt#2#I.laU.TaR.TaR.F.F.mbR.E.E.EaJaJaJaJaJaJ.dbUbU.dbU..bU....bU....aJaJaJaJ.EbN.E.E.paO.S#saPaP.9bH.9azaz#.#Q#t#tbBa7#R#ybb#T#Ubd#Ubfaabx.lbh#Xacahab#d..#Ab1b1",
-"b1b1#A..#L#q#O#Oalal.P#2aC.#.GaR.TaR.FbOaubR.EbQ.EbN.EbNaJaJaJ.dbV.d..bUbU........bU..bU.daJaJaJbN.E.E.EaObQ.paPaPaPbH.9az#.#.#QbG.JbB#dbB#db.#SbD#Tbdbfbfbfbh.#.I#Cbmababa...#7b1b1",
-"b1b1#b..#6#q#O.5alalbt.qby.baR.TaRaR.TbObObR.S.E.EbNaJaJaJaJaJaJ.dbUbUbU..............bUbUaJaJaJ.EbN.EbQ.EbQ.S#saPaP.9.9atazazbG#QbGbBbB#d#Rb.b#bbbd#U#Ubf.Xbf.abe#Xbmababae..#bb1b1",
-"b1b1.p.S.7#q#O.4ai.P#1#2.#aUaSaRaRaR.FbKbR.p.EaObN.EbNaJaJaJ.daJbUbU....bU............bUbUbUaJaJaJ.E.E.EbQ.pbQ.S#saP.9bHaz#.az#QbG.JbB#dbB#db.b.#S#Tbd#Ubfbf#Ybp.lbcbmababagaJaOb1b1",
-"b1b1aO#..7.Q.4.5al#nbt#F.#.saSaR.TaR.F.mbRaObQ.E.E.EaJaJaJaJaJbV.d.......................daJaJaJ.EbNbQ.EaObQ#saPaPaP.9.9ataz#..ubG#tbBaZa7#Rb.b.#9#Tbdbfbf.Xbf#B.#blbaab#Y#laP.Eb1b1",
-"b1b1..#d#p#q.4ap#o.PbtaC.#awaS#u.TaR.FauatbQ.EaO.EbN.EaJaJaJaJ.dbV.dbU..................bUaJaJaJbNbN.E.EbQaO.S.paP.9bH.9az#.azbG#QbBbB#da7#db.b.#S#Tbd#Ubfbf#Yba.#bjbmab#Y#l.9.db1b1",
-"b1b1..#9#p#M.4#oai#n#2.j.##uaSaR.TaRaRbObR.SaO.EbN.EaJbNaJaJaJbU.dbU....................bUbUaJaJ.E.E.E.EbQ.pbQaPaP.9.9ataz#.azbG#QbBbB#d#R#Rb.b.#9#Tbdbfbf.X#Y#Y.#bYbabg#YbqbG..b1b1",
-"b1b1..#i#p#M.4#oai#n#2by.gaSaS#u.TaRauat.S.pbQaO.EbN.EaJaJaJaJaJbU....................bU.daJaJaJbNbN.EbQaO.S.paP#saPbHazat#Q.u#Q#tbB#dbBa7#db.b.#Wbbbd#gbfbf#Ybf.M.hbaab#Yaa#Q..b1b1",
-"b1b1..b##p#M#M.4al#nbl.kbxaSaSaSaRaR.FataOaOaObQ.E.EbNaJaJaJaJaJaJbUbVbU................bU.daJ.EaJ.E.E.EaObQ#saPaP.9.9atazazbG#Q#tbBbB#R#d#R#Wb.#Wbbbdbf.Xbf#Y#YaC.kbabg#Yaa#Q..b1b1",
-"b1b1..#W#p#pan#oai#nbt.#.WaS#u#u.TaRauataP.SaO.E.E.E.E.EaJaJaJaJaJaJ.dbUbUbU....bUbUbUbUbUaJaJbN.E.EbQaObQ.paPaPaP.9bH.9#.azbG#Q#tbB#dbBa7b.b.b.#Wbbbd#U#Ybf#Y#Y#k.#babgbf#EbG..b1b1",
-"b1b1..#W#p#M#M#oai#nbl.#aQaSaSaSbIaR.Fat.paO.SaObQ.EbNbN.EaJaJaJaJaJaJ.daJbUbUaJ.dbUbU.daJaJaJ.EbN.EaObQ.pbQ#saP.9bH.9az#.az#QbG.JbB#d#R#Rb.b.#W#Wbb#gbfbf#Ybg#YaG.#babg.X#Eaz..b1b1",
-"b1b1..#W#p#Man.4ai#n#1b2.WaS##aSaSaR#tataP.SaOaOaO.EbQ.EbN.EaJaJaJaJaJaJaJaJ.daJaJaJaJaJaJbNbN.E.EbQ.EbQ.paPaP#saP.9.9azaz#.bG#QbBbBbB#d#db.b.#W#Wbbbdbfbf#Ybf#YaG.#a9bEaaaa.u..b1b1",
-"b1b1.daZ#p#5.3#o#o#nbl.#.W##aSaSaS#u.FataP#saP.SbQbQ.E.E.EbN.E.EbNaJaJaJaJaJaJaJaJaJaJaJaJaJ.E.E.EbQaOaObQ#saP.9bHazataz#.#Q#Q#tbBaZa7#R#R#Wb.#W#Wbb#gbfbf#Ybgbf#k.#babEbfa..9.db1b1",
-"b1b1.p.9#5#pan.4br#n#1.#.WaS##aSaSaRaR#.aP.SaPaO.paOaO.EbQ.E.EbN.E.EaJbNaJaJaJaJbNbN.EbN.E.E.E.EbQaObQ.S#saPaPaP.9.9.9az#.#QbGbBbB#da7#db.b.b.b##Wa.aabf.X#Y#Y#YaEb2a9.X#Ua..E.pb1b1",
-"b1b1aO.E#p#5.3#oai#n#1.#.W##aS##aS#uaRataP#saP.SaObQ.pbQ.EbQ.E.E.EbN.E.E.EbN.EbN.EaJ.E.E.EbQaObQaObQ.paPaPaPaP.9.9ataz#.bGaz#t.JaZa7#R#Rb.#W#W#W#9bbaabf#Ybg#Y#YaG.#a9bE#ga.aJ.pb1b1",
-"b1b1#b..#p#5#4#4.Nbr#1.abx####aS##aSaRau.9aP#saP.S.pbQbQ.paObQ.E.E.EbN.EbN.E.E.E.E.EbN.E.EaO.EbQ.paJbQ#s#saPbHbH.9az#.az#QbGbBbB#dbB#db.b.b.#W#W#9a.aabf#Ybfbgbf.z.ba9bE#ga...#wb1b1",
-"b1b1#7..#l#p#5an#o#0#1by.g######aS#ubIau.9aP#saP#saP.S.pbQbQaObQbQ.EbQ.E.E.E.EbN.E.EbQbQaObQ.SaObQaPaOaPbHaPbH.9atazazbG#..J#tbBa7#R#db.b.#Wb##W#9a.aabfbg#Y#YaabY.ha9#Ubdbz..#Ab1b1",
-"b1b1ad..#i#5am#4#4br.Kbe.#######aS##aSaRau.9aPaPaP#sbQ#s.S.pbQ.SaOaObQ.EbQaObQbQbQbQaOaOaO.SaO.paPaO#saP#sbH.9bHazaz#.#Q#Q#tbBa7a7#db.b.#W#W#W#9bbaabf#Y#Y#Y#Ybf.#aCbAa4bdaz...Lb1b1",
-"b1b1b1.d#.#5.3#4#4br#1aC.#a3#########u#ubG.9.9.9aPaPaPaPaOaP.SaObQ.SaOaOaObQ.SaOaO.pbQ.S.SaOaPaP#saPaPaXbHbH.9az#.#.#QbGbGbBbB#d#R#Rb.b.#W#W#W#9a.aabf#Ybg#Ybf#X.#aU.y#U#T.p.db1b1b1",
-"b1b1b1#saJ#5am.3#4br#0#h.#bM########aSbI#t.9bH.9.9aP#saPaP#saP#s.S.p.S.S.S.pbQ.S.SaO.p#sbQaP#saPaPbHaPbHbHbHazazaz#.#QbG.JbB#dbB#R#8b.#W#W#W#9#Wa.aa#Ybf#Ybgbf#B.##e#a#Ubb.d#sb1b1b1",
-"b1b1b1.J..aa#5#G#4br#0.K.laWbz#########ubG#..9.9bH.9.9aPaPaPaPaP#saPaP#saOaP.paP.paPaPaP#saPaPbHaPbHbHbH.9azazazbGazbB#tbBa7aZ#db.b.b.#W#Wb##9#9#Ebf#Y#Y#Ybfaabx.aa9a4#T##...Jb1b1b1",
-"b1b1b1.0..bB#5#G#4#4#0#1bZb0bzbz#########ubGaz#..9.9bH.9.9aP#saPaPaP#saPaPaPaPaPaPaP#saPaPaPbHaP.9.9.9.9azazaz#..ubB#tbB#dbB#R#db.b.#W#W#W#9bia.aa#Y#YbE#Y#Ybf.kbYbAa4#T.p...0b1b1b1",
-"b1b1b1b1.paJ.1#G#G#4br.Kbx.#a1bz##bC####bI#taz.9azat.9bH.9.9.9.9aPaPaP#saPaP#saPaPaP.9bH.9.9.9.9.9.9#.az#.#.#.#QbBbG.JbBbB#d#Rb.b.b.#Wb##9#W#9#Ebf#Ybf#Ybfbfbh.#ax#aa3#TbU#sb1b1b1b1",
-"b1b1b1b1#A..#i.1af#4#Cbrbl.l.Ibzbz##bC#####uaZ#.azaz#.azatbHbH.9.9.9.9.9.9.9.9.9.9bH.9.9bH.9at.9az#.azazazbGazbG#QbBbB#d#d#R#8b.#W#W#W#W#9#9a.aa#Y#Y#Y#YbfbfaC.aaY.x#v.9..#Ab1b1b1b1",
-"b1b1b1b1b1.E.Saj#Gaf#4#0.KbY.#.x#Sbzav#######taz#.#.az.9az#.azat.9.9bHbH.9bH.9bH.9.9.9at.9bHaz#.azaz#.azbG#Q#tbBbB#dbBa7#Rb.b.b.b.b##W#9bi#D#Ebfbfbg#Y#Ybfbk.#aCbAaV#TaJaJb1b1b1b1b1",
-"b1b1b1b1b1#b..bq#G#G.Y#C#0aE.#a8bz#SbzbzbC##a0aZbGaz#.#.#.azatazazazat.9#.az#.az#.azataz#.az#.azaz#.azbG#QbG#QbB#dbBa7#R#db.b.#W#W#W#9#9#9a.bf#Y#Y#Y#YbfaaaE.#aBaVa3##..#bb1b1b1b1b1",
-"b1b1b1b1b1.0.daP.1#Gafbrbr.Kby.a#vbz#Sbzbz##a0aZ.u#Q#.azaz#.az#.azatazazazataz#.az#.az#.azaz#.#.bG#QbG#QbB#QbB#dbB#d#R#Rb.b.#W#W#W#9#W#9#D#Ebf#Y#Ybgbfbfbg.abZayaVa2aJ.d#3b1b1b1b1b1",
-"b1b1b1b1b1b1#b..#g#Gaf.Y#CaFaE.#aW#Sbz#S#Sbz####aZbG#QbG#Q#.az#.az.u#.#.az#.az#.az#.azbGazbG#Q#Q#QbGbBbBbB#dbB#d#R#Ra7#Wb.#W#W#W#9#9#9#Da.bf#Y#Ybf#Ybfaabx.#aNaV.H##..#wb1b1b1b1b1b1",
-"b1b1b1b1b1b1.0.d.Ebs#Gaf.Y#Cbhbe.#bA#Sbzbz#Sbzbz.vaZ#QbG#QbG#QbG#QbGaz#Q#.#Q#.#QbG#QbG#QbG#QbGbGbB#QbBbB#dbBa7#Ra7b.b.b.#W#W#Wb##9bi#Da.bf#Y#Y#Y#Ybfbfbm.#.gaya3aw.d.d.Bb1b1b1b1b1b1",
-"b1b1b1b1b1b1b1.J..#dbsafaf#CaF#B.a.ha2.H#Sbz#Sbz#ya0bB#QbG#QbG#QbG.u#QbG#QbG#QbG#QbG#QbG#QbBbB.JbBbB#d#dbB#R#R#db.b.b.#W#W#W#9#9bi#D#9#Eaa#Y#Y#Ybfbfaa.h.a.VaVaw.p..#Ab1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1aO..#Yacbm.Y#CaFbx.#.wa2a2a2a2#Sbz#ya0#RbBbBbB#t#QbGbG#QbG#QbG#Q#tbBbBbBbB#tbBaZ#d#dbB#R#R#db.b.b.b.#W#Wb#b#bi#9#Da.aabf#Y#Ybfbfbfaabj.#axaV#vav..#sb1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1#m.d.Sbsacbm.Y#CaF.h.##ca2a2a2a2#Sbzbz#y.vbB.JbBbB.JbBbBbBbBbBbB.JbBbB#dbB#d#dbBa7#R#Ra7b.b.b.b.#W#W#W#W#9bi#9#Da.bfbq#Y#Ybgbf#Ybfbh.#.gayaTbLaJ.d.Lb1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1b1#7...9bsbmbmbcbcbh.k.aa9.Ha2.Ha2#S#S#Sbz#ya0#dbBaZ#dbB#dbB#dbBaZ#d#dbB#dbB#d#R#R#d#db.b.b.#W#W#W#Wb##9#9#9a.a.bf#Ybf#Y#Y#Ybfaaba.a.baMaTaw.E...Jb1b1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1b1b1aX..#dbsbm#X#X#ca8.a.a#UbD.HbD.Ha2a2#Sbz#S.va7#dbB#dbBaZ#dbB#da7aZ#d#R#R#R#R#8b.b.b.b.#W#W#W#Wb##9bi#9a.aabf#Y#Y#Y#Ybfbfaabg.a.a.saTaw.p...tb1b1b1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1b1b1b1.E..a3#jac#X#XbcaG.#bZ#U#T#T.HbD.Ha2#S#S#S#y#y#y#R#d#d#R#R#R#R#d#Ra7#8b.b.b.b.#W#W#W#W#Wb##9bia.a.a.aa#Y#Y#Y#Ybgbfbfbfbg.h.#bMbTawbu...Eb1b1b1b1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1b1b1b1.L.E.d.Xabbabmbcbc.I.#.h#x#T#T#T#T#T#TbDa2#S#S#S#y#yb.a7#8#Rb.b.b.#Wb.b.#W#W#W#Wb##Wb##9bibba.aabfbf#Y#Ybgbf#Ybf#YbfbF.i.#bwaLaw.r.d.E.0b1b1b1b1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1b1b1b1b1.0.d.dbfab#jba#Xbc.I.l.aba#U#T#T#Ta3#T#T#TbD#TbDbDb##S#S#fb.#Wb.b.#W#Wb.#W#W#W#Wa.bbbba.aaaabfbf#Ybgbf#Y#Ybfbfbfbm.a.abwbTaw.rbU.d.Lb1b1b1b1b1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1b1b1b1b1b1bn.d.d.Hbkbkba#X#za6.a.#a8bda3#U#Tbda3#Ta3#T#T#TbbbDbbbD#9#Sbbbbbbbbbbbbbbbbbbbdbdaaaabfbf#Y#Y#Y#Y#Y#YbfbfaabJ.#.abvaLbLbu.d.d#mb1b1b1b1b1b1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1b1b1b1b1b1b1#AaJ...H#Vbkbaba#z.n.i.#aCbEbd#U#Ubd#Ubd#Ubd#U#Tbd#Tbd#TbDbb#Tbd#Tbdbd#gbdaabf.Xbfbf#Y#Y#Ybg#Y#YbfbfbfbgbY.#.c.Gawawbu..aJ#mb1b1b1b1b1b1b1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1#ZbN..bHbg#V#Vbabaa1aC.#.aa8bd#Ubda3bda3bdbd#U#U#U#Ubd#g#Uaa#gbf#gbfbfbfbf.X#Y#Y#Ybg#Y#Ybf#Ybfbf#YbJ.a.#.f.UaKbLaJ...p.0b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1#m.t...Ebf#V#Va9ba#x.W.i.#.i#c#Ubf#Ubf#U#U#U#U#Ubf#Ubfbf#Ubfbfbf.Xbf.Xbf#Y#Ybgbf#Ybfbg#Ybfbf#C.i.#.hasawaK.r.d...t.0b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1#A...d.ubEaDa9a9#xaY.I.l.#bea6bfbfbfbfbfbfbfbfbfbfbfbfbfbf.Xbf#Y#Y#Y#Ybgbf#Ybg#Ybfbfbl.h.#.a.e.UaKbLaJbUbU#7b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1#Z.E..bQa3bEaDaDbAa9a1bxb0.#.a.I#Xbfbfbfbfbf.Xbf.X#Y.X#Y#Y#Y#Ybg#Ybg#Y#Ybfbf#Xbj.a.#.bbWaraKbLbu.d...E#Zb1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1#w.d..aPa3bEaDaDbA#xaA.wbZ.#.#.ibp#B#X#Y#Y#Y#Ybg#Ybg#Ybg#Y#Ybf#Ybcblbp.b.#.#bYbwaLaLbL.r.d..aJ#bb1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1#Z#s.....pa3.xa4#a#aayaAa1aUbY.#.#.#.#bebYaGaGaGaGaG#kaGbYbe.#.#.#.#.gaxaMaLaKbLbuaJ....aX#mb1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1a#aX.....Eaz#UaVa4#a#aayayayaNax.fbY.h.#.#.#.#.#.#.#.hbYbX.easaLaLaLbL.rbN.d....#sadb1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1ad.t.d...daOava3a3aTaTaTaVaVaV.UaV.UbTbTbTbTaLaLaLaLaLaw.r.r.rbu.dbU...daX#Zb1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1#7#s......aJ.pavbzbzbzawbzavavavav.ravavav.raS.TbuaJ.d......#s#7b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1ad#A.t.E........aJaJaO.E.E.E.EaJ.EaJ.d.d........aJ#s#A#Zb1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1#3a##b#w.p.E...........d.....EaO#w#wa##3b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1",
-"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1",
-};
diff --git a/sandbox/bouton.xpm b/sandbox/bouton.xpm
deleted file mode 100644
index ea8065f..0000000
--- a/sandbox/bouton.xpm
+++ /dev/null
@@ -1,329 +0,0 @@
-/* XPM */
-static char *on[] = {
-/* width height num_colors chars_per_pixel */
-" 90 86 236 2",
-/* colors */
-".b s mask c none",
-".. c #f8fcf8",
-".# c #f8fcf0",
-".a c #f8fce8",
-".c c #f8f4f0",
-".d c #f8f4e8",
-".e c #f8f4e0",
-".f c #f8ece0",
-".g c #f8ecd8",
-".h c #f8ecd0",
-".i c #f8e4d8",
-".j c #f8e4d0",
-".k c #f8e4c8",
-".l c #f8dcc8",
-".m c #f8dcc0",
-".n c #f8dcb8",
-".o c #f8d4b0",
-".p c #f8ccb0",
-".q c #f8cca8",
-".r c #f8cca0",
-".s c #f8cc98",
-".t c #f8c498",
-".u c #f8c490",
-".v c #f8bc98",
-".w c #f8bc90",
-".x c #f8bc88",
-".y c #f8bc80",
-".z c #f8b490",
-".A c #f8b488",
-".B c #f0ecd8",
-".C c #f0e4d8",
-".D c #f0e4d0",
-".E c #f0e4c8",
-".F c #f0dcc8",
-".G c #f0dcc0",
-".H c #f0d4b8",
-".I c #f0d4b0",
-".J c #f0ccb0",
-".K c #f0cca8",
-".L c #e8e4d0",
-".M c #e8dcc8",
-".N c #e8d4b8",
-".O c #e8d4b0",
-".P c #e8ccb8",
-".Q c #e8ccb0",
-".R c #e8cca8",
-".S c #e8c4a8",
-".T c #e8c4a0",
-".U c #e8c498",
-".V c #e8bc98",
-".W c #e0c4a8",
-".X c #e0c4a0",
-".Y c #e0c498",
-".Z c #e0bc98",
-".0 c #e0bc90",
-".1 c #e0b488",
-".2 c #e0b480",
-".3 c #e0ac88",
-".4 c #e0ac80",
-".5 c #d8d4c0",
-".6 c #d8bca0",
-".7 c #d8bc98",
-".8 c #d8b498",
-".9 c #d8b490",
-"#. c #d8b488",
-"## c #d8ac88",
-"#a c #d8ac80",
-"#b c #d8ac78",
-"#c c #d8a478",
-"#d c #d8a470",
-"#e c #d89c70",
-"#f c #d0c4b0",
-"#g c #d0bca8",
-"#h c #d0bca0",
-"#i c #d0b498",
-"#j c #d0b490",
-"#k c #d0ac88",
-"#l c #d0a480",
-"#m c #d0a478",
-"#n c #d0a470",
-"#o c #d09c70",
-"#p c #d09c68",
-"#q c #d09468",
-"#r c #d09460",
-"#s c #c8bcb0",
-"#t c #c8bca8",
-"#u c #c8b498",
-"#v c #c8a480",
-"#w c #c89c70",
-"#x c #c89468",
-"#y c #c88c60",
-"#z c #c88c58",
-"#A c #c88458",
-"#B c #c88450",
-"#C c #c0ac98",
-"#D c #c0ac90",
-"#E c #c0a478",
-"#F c #c09c78",
-"#G c #c08c68",
-"#H c #c08c60",
-"#I c #c08458",
-"#J c #c08450",
-"#K c #c07850",
-"#L c #c07848",
-"#M c #c07048",
-"#N c #b8b4a0",
-"#O c #b8aca0",
-"#P c #b8a490",
-"#Q c #b8a488",
-"#R c #b8a480",
-"#S c #b89c80",
-"#T c #b89470",
-"#U c #b88c60",
-"#V c #b87848",
-"#W c #b87048",
-"#X c #b87040",
-"#Y c #b86840",
-"#Z c #b09c80",
-"#0 c #b09470",
-"#1 c #b08c68",
-"#2 c #b07850",
-"#3 c #b06840",
-"#4 c #a8a490",
-"#5 c #a88c68",
-"#6 c #a87858",
-"#7 c #a87050",
-"#8 c #a86840",
-"#9 c #a08c70",
-"a. c #a07050",
-"a# c #a07048",
-"aa c #a06038",
-"ab c #989488",
-"ac c #989480",
-"ad c #988c80",
-"ae c #988c78",
-"af c #988460",
-"ag c #987860",
-"ah c #987858",
-"ai c #986848",
-"aj c #986038",
-"ak c #985838",
-"al c #908470",
-"am c #908468",
-"an c #906040",
-"ao c #906038",
-"ap c #905838",
-"aq c #888478",
-"ar c #887870",
-"as c #887868",
-"at c #887060",
-"au c #887058",
-"av c #886850",
-"aw c #886848",
-"ax c #885030",
-"ay c #807060",
-"az c #807058",
-"aA c #806858",
-"aB c #806850",
-"aC c #805838",
-"aD c #787070",
-"aE c #787068",
-"aF c #787060",
-"aG c #786860",
-"aH c #786048",
-"aI c #785840",
-"aJ c #785030",
-"aK c #784830",
-"aL c #706860",
-"aM c #706058",
-"aN c #706050",
-"aO c #705848",
-"aP c #705840",
-"aQ c #705038",
-"aR c #704830",
-"aS c #704828",
-"aT c #686060",
-"aU c #686058",
-"aV c #686050",
-"aW c #685850",
-"aX c #685848",
-"aY c #685840",
-"aZ c #684028",
-"a0 c #605048",
-"a1 c #605040",
-"a2 c #604838",
-"a3 c #604028",
-"a4 c #585048",
-"a5 c #584840",
-"a6 c #584838",
-"a7 c #583820",
-"a8 c #504840",
-"a9 c #504038",
-"b. c #504030",
-"b# c #503828",
-"ba c #503020",
-"bb c #503018",
-"bc c #484840",
-"bd c #484038",
-"be c #484030",
-"bf c #483828",
-"bg c #483020",
-"bh c #403838",
-"bi c #403830",
-"bj c #403828",
-"bk c #403028",
-"bl c #403020",
-"bm c #383830",
-"bn c #383030",
-"bo c #383028",
-"bp c #382820",
-"bq c #382018",
-"br c #382010",
-"bs c #302828",
-"bt c #302820",
-"bu c #302818",
-"bv c #302018",
-"bw c #302010",
-"bx c #301810",
-"by c #282828",
-"bz c #282820",
-"bA c #282020",
-"bB c #282018",
-"bC c #281810",
-"bD c #201818",
-"bE c #201810",
-"bF c #201008",
-"bG c #181818",
-"bH c #181810",
-"bI c #181010",
-"bJ c #181008",
-"bK c #180808",
-"bL c #100808",
-"bM c #080808",
-"bN c #080800",
-"bO c #080000",
-"bP c #000000",
-/* pixels */
-".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.A.r.p.m.g.f.................f.i.m.n.r.u.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.u.q.l.d.........P.N##############.8.N.N.........d.j.o.s.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.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.i.......P###I#L#3#3#3#3#3#3#3#Y#3#X#Y#X#3#Y#L#y##.N.......j.q.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.r.j.c...d.X#x#3#3#3#3#3#3#3#X#3#X#X#X#3#X#X#3#X#X#X#W#X#X#X#Y#q.X.d...c.m.x.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.w.j.#...N#o#3#3#3#3#3#3#3#X#X#3#X#X#3#X#X#X#X#X#W#X#W#W#X#X#W#W#X#W#X#Y#m.N.....j.t.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.w.l.....X#K#3#3#3#3#3#3#Y#X#X#X#3#X#X#W#X#W#X#W#W#W#X#W#X#W#W#W#W#W#V#V#M#V#W#M#I.X.....k.w.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.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.c...X#W#3#3#3#3#3#X#3#X#X#3#X#X#W#X#W#X#W#X#W#W#W#V#L#V#L#V#L#V#L#V#L#W#L#W#L#V#W#M#J.W...d.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.r.d...F#I#3#3#3#3#3#X#3#X#X#3#X#WaxaZbbbCbFbPbPbPbPbPbPbPbFbxbaaZap#L#L#L#K#L#L#K#L#L#K#L#K#M#q.D...f.r.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.o.c.d#m#3#3#3#3#3#X#X#3#X#XaaaZbrbPbPbPbPbibmaEaFaFaGaFaGaGbmbmbPbPbPbPbqaZ#8#K#K#K#K#K#L#K#L#K#K#M##.d.c.m.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.x.l...F#J#3#3#3#3#Y#X#X#3#XaSbCbPbPbDa4ad#t.E.D.F.E.F.F.F.F.G.G.G.G.G#Nala4bGbPbPbCaJ#J#J#J#J#J#J#J#K#J#K#x.D...j.r.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.y.f...X#3#3#3#3#X#X#3#X#8a7bKbPbIaU#t.D.j.D.D.j.F.D.F.E.F.E.F.F.G.G.G.N.G.G.H.N#CaWbLbPbJa3#W#J#K#J#J#J#J#J#K#J.Q...f.z.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.b.b.b.b.b.b.b.r.d.c#o#3#3#3#3#X#3#X#Xa3bObPbsac.D.j.D.j.D.j.D.D.j.D.j.D.E.F.E.M.F.M.G.G.N.G.N.H.N.N.OalbAbPbMaR#I#A#I#B#I#J#J#K#K#a...d.w.b.b.b.b.b.b.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.b.b.b.b.b.b.r.c.d#o#3#3#3#3#X#X#XaxbFbPbD#N.D.i.D.D.j.D.D.i.D.j.D.j.D.D.D.D.E.F.E.F.M.G.F.N.G.G.N.N.N.Q.O#ZbHbPbEan#A#I#I#A#A#I#A#I#a.d.c.r.b.b.b.b.b.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.b.b.b.b.b.r.c.d#J#3#3#3#X#X#3#XbabPbIaq.D.i.j.D.D.g.B.i.B.i.g.C.i.D.j.D.j.D.D.D.E.F.F.F.G.G.G.N.N.H.N.Q.Q.Q.QaybLbPba#z#A#z#I#B#I#B#I#q.d.c.t.b.b.b.b.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.b.b.b.b.u.f..#J#3#3#3#X#X#XaabEbPbc.M.D.g.D.B.g.g.C.i.B.i.g.B.i.g.C.C.j.D.j.D.D.D.F.E.F.M.G.G.N.G.N.N.N.Q.Q.R.R.6bebPbE#2#A#z#z#z#z#A#I#p...f.w.b.b.b.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.b.b.b.b.f..#o#3#3#X#X#X#WapbNbPaq.j.C.j.B.i.C.C.B.g.g.g.B.g.g.B.i.B.g.C.i.D.j.j.D.D.F.E.F.M.G.G.N.G.N.N.N.Q.Q.W.R.WaybPbNa##z#I#z#I#z#z#A##...f.b.b.b.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.b.b.b.l..#l#3#3#X#3#X#WaSbNbL#s.j.D.g.B.i.B.g.g.i.g.B.f.g.f.f.g.g.g.C.g.B.i.C.D.j.D.D.F.E.F.F.M.G.N.G.N.N.O.Q.Q.R.R.S#QbMbMaC#y#y#z#y#I#z#A.0...k.b.b.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.b.b.q...X#3#3#X#X#X#XaSbPbD#s.j.B.B.i.C.g.f.g.f.B.f.f.f.f.B.f.B.f.f.g.B.i.B.i.C.D.j.D.D.F.F.F.G.G.G.N.H.N.N.Q.Q.R.W.W.T#SbAbPaC#y#z#y#z#y#y#z.Q...p.b.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.b.r.c.F#W#X#X#3#X#WaxbPby.M.D.B.i.i.B.g.f.B.f.f.f.f.f.B.f.f.f.f.f.B.f.g.B.g.B.g.D.C.j.D.D.F.E.M.G.N.G.N.N.N.Q.Q.W.R.W.W.X.8bBbPai#y#y#y#z#z#y#y.C.c.u.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.b.g..#J#3#X#3#W#XakbMbL.M.j.g.C.B.g.f.B.f.f.f.f.f.f.e.f.e.e.f.e.f.f.f.f.f.g.C.g.g.D.D.j.D.E.F.F.M.F.N.G.N.H.N.Q.Q.R.W.R.X.X#jbMbM#7#p#r#q#y#y#y#o...g.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.o..###X#3#X#X#X#3bJbL#s.D.D.C.i.g.g.B.f.f.e.f.e.e.d.f.d.f.d.e.d.e.f.e.f.B.f.f.B.C.B.i.D.D.D.E.F.G.F.G.G.N.N.N.O.Q.R.R.W.X.Z.X#SbLbJ#H#x#r#q#r#r#r.X...p.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.u.c.C#V#3#X#X#W#VbCbP#4.h.D.g.g.B.f.B.f.f.f.f.e.d.d.f.d.e.d.d.d.d.d.e.f.e.f.f.B.f.g.g.i.D.j.D.D.E.M.G.F.N.G.N.N.Q.O.W.Q.X.S.X.X.ZambPbl#q#p#q#q#x#q#q.f.d.s.b.b.b.b.b.b",
-".b.b.b.b.b.b.m..#x#Y#X#W#W#WaZbPaT.j.C.g.C.B.g.B.f.f.f.e.e.d.f.d.d.d.d.d.d.d.d.d.d.d.f.e.f.f.B.g.C.B.j.C.D.D.F.F.F.G.N.G.N.H.P.Q.Q.W.S.W.X.Z.Z.Ya1bPaQ#p#p#q#p#q#x##...m.b.b.b.b.b.b",
-".b.b.b.b.b.u.c.N#X#X#X#X#W#8bNbs.h.D.j.C.g.i.f.g.f.f.e.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.e.f.e.f.f.g.B.C.j.D.j.D.F.F.M.G.N.G.N.N.Q.Q.R.W.T.X.X.Z.Z.ZbBbM#U#q#p#q#p#q#q.D.c.w.b.b.b.b.b",
-".b.b.b.b.b.n..#y#X#W#W#W#LbrbP#t.D.j.C.g.C.f.B.f.e.f.d.f.f.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.e.f.f.B.f.g.g.C.D.D.D.E.F.G.F.G.N.N.N.O.Q.Q.R.W.X.X.X.Z.7#FbPb##p#o#p#q#p#q#a...n.b.b.b.b.b",
-".b.b.b.b.b.d.F#3#W#X#W#LaxbPa4.D.D.D.g.C.g.B.f.f.f.e.f.d.d.d.d.d.d.c.#.d.c.c.#.c.d.d.d.f.d.e.f.f.g.B.C.B.j.D.D.F.F.M.F.N.G.N.N.Q.O.W.R.W.X.X.Z.Z.Z.9a9bPa.#o#p#o#o#p#q.C.d.b.b.b.b.b",
-".b.b.b.b.p..#o#W#X#W#V#VbwbI.N.C.j.C.g.C.g.f.g.f.e.d.d.d.d.d.c.#.c.a.c.#.c.a.c.a.c.d.d.d.e.f.e.f.f.B.g.i.D.j.D.E.F.F.G.N.G.N.H.Q.Q.Q.R.W.T.X.Z.7.Z.9#kbMbu#e#e#o#p#o#p.Z...q.b.b.b.b",
-".b.b.b.b.j.d#X#X#W#V#MajbPaE.D.D.D.i.B.g.B.f.f.f.f.e.d.d.d.d.#.#.#.c.#.d.#.c.#.c.a.d.d.d.d.d.f.f.f.g.B.B.i.D.D.D.F.E.M.G.N.G.N.N.Q.R.Q.W.X.X.X.Z.Z.9.0aXbP#6#d#e#e#e#o#p.c.g.b.b.b.b",
-".b.b.b.w...W#W#X#L#V#LbgbP#f.D.j.D.h.C.i.f.B.f.f.d.f.d.d.d.d.#.c.#.d.#...#.#...#.c.#.d.d.d.d.e.f.f.f.C.g.C.j.D.D.F.F.G.G.G.N.N.O.Q.Q.W.T.W.Z.X.Z.7.0.9#FbPbf#c#n#n#o#e#o.H...u.b.b.b",
-".b.b.b.n..#x#X#L#W#V#WbOa4.D.j.D.C.i.C.g.B.f.f.e.e.d.d.d.c.d.c.#.#.c.#...#.....#.#...d.d.d.d.f.f.f.f.B.g.D.D.D.D.E.M.G.F.N.N.N.P.Q.Q.R.W.X.X.X.Z.Z.9.9.9b.bM#w#c#c#e#d#o.0...p.b.b.b",
-".b.b.b.i.d#X#V#V#L#KaKbP#4.j.F.D.j.B.g.g.f.g.f.f.d.d.d.d.d.d.#.c.#.#.c.........#...#.d.c.d.d.e.f.e.B.g.C.g.C.j.D.F.F.M.G.N.G.N.Q.O.Q.R.W.X.X.Z.7.Z.9.0#.agbPaw#c#m#c#m#e#o.c.k.b.b.b",
-".b.b.b.c.Q#W#M#V#L#KbqbL.F.D.D.j.C.i.C.B.g.f.e.f.e.d.d.d.d.d.c.a.#...#.............#.#.d.d.d.d.f.f.f.g.B.C.j.D.D.F.E.G.G.N.G.N.P.Q.Q.R.S.W.X.X.Z.Z.9.9.9#.bMbk#c#c#c#c#c#c.F.c.b.b.b",
-".b.b.r..#a#V#V#L#K#JbMa4.F.l.D.D.j.B.g.g.f.B.f.d.f.d.d.d.c.a.c.....................#...#.d.d.f.e.f.f.C.g.i.D.D.D.F.F.M.G.G.N.N.O.Q.Q.R.W.X.X.Z.Z.Z.9.0#.#.b.bM#b#a#c#c#c#n.S...q.b.b",
-".b.b.q..#x#M#L#K#KaobPae.E.D.D.j.C.g.i.f.g.f.e.f.d.d.d.d.c.d.#...#...................d.d.d.e.d.f.f.f.g.B.C.j.D.D.E.M.G.G.N.G.N.Q.O.W.R.S.W.Z.X.Z.7.0.9#.#.avbP#1#a#c#a#b#c.0...o.b.b",
-".b.b.n..#X#L#K#K#JaRbP#f.F.F.k.D.D.D.B.B.g.f.f.e.e.d.d.d.d.#.c.a.#...................#.c.d.d.f.e.f.B.B.i.B.D.D.F.F.F.G.G.N.N.N.Q.Q.Q.R.W.X.X.Z.Z.7.9.9#.###FbPaH.4#a#a#c#a#c...n.b.b",
-".b.b.i.C#L#L#L#J#JbgbP.F.E.D.D.D.i.j.i.C.B.g.f.f.d.f.d.d.d.d.#.......................#.#.d.d.e.f.e.f.B.g.C.j.D.D.F.F.G.G.N.N.H.Q.Q.R.W.S.X.X.Z.Z.Z.0.9#.###.bPb..3#a.4#a#a#c.d.f.b.b",
-".b.b.i.N#L#K#K#J#Kbwbn.G.F.F.F.D.D.D.B.i.g.f.e.f.e.d.d.d.c.a.c.#...................#.#.d.d.e.d.f.f.g.g.C.i.D.D.F.E.G.M.N.G.N.N.O.Q.Q.R.W.X.X.Y.Z.9.9#..9#a#.bpbt.2.1#a.4#a#a.D.g.b.b",
-".b.b...Q#K#K#J#J#AbJbd.G.E.F.D.j.j.B.i.g.g.B.f.f.e.d.d.d.d.d.d.#.#.#.................#.c.d.d.e.f.f.B.B.g.D.j.D.E.F.M.G.G.N.N.P.Q.Q.R.W.S.Z.X.Z.Z.7.0#.#.###.bkbH.1#..1.1.4#a.F.c.b.b",
-".b.b...9#K#J#J#K#IbPaG.F.F.E.E.D.D.j.D.g.C.f.f.f.e.f.d.d.d.d.d.d.#.#.#.#.....#.#.#.#.#.d.d.f.f.f.B.f.g.C.j.D.D.F.F.G.G.N.N.N.P.O.Q.W.R.X.X.Z.7.Z.9.9.9#.###aaYbP.1.1.1#..2##.H...b.b",
-".b.b...0#K#J#J#A#AbPaL.G.F.F.F.j.D.i.D.g.g.B.g.f.f.f.e.e.d.d.d.d.d.d.d.a.#.a.c.#.#.c.d.d.e.e.f.e.g.B.i.B.D.j.F.E.M.F.G.G.N.H.Q.Q.R.R.W.X.X.X.Z.7.0.9#.###.##aYbP.0.1.1.1#..2.N...b.b",
-".b.b...8#J#J#J#I#AbPaL.G.G.E.F.F.j.D.j.C.i.g.B.f.B.f.f.f.e.d.d.d.d.d.d.c.d.d.d.d.d.d.d.d.d.f.f.B.f.i.B.j.D.D.D.F.F.G.G.N.N.N.Q.Q.Q.W.S.X.X.Z.Z.0.9.9#.#.#a#.aYbP.0.0.1.1.1#..H...b.b",
-".b.b...Z#K#J#I#A#zbPaL.G.G.G.F.E.D.j.D.D.D.C.g.B.f.f.e.e.f.f.f.d.d.d.d.d.d.d.d.d.d.e.d.f.f.f.f.B.g.B.C.j.D.D.E.F.M.G.G.N.N.P.Q.Q.R.R.W.Z.X.Z.Z.7.9#.#.######aYbP.0.0.0.0.1.1.N...b.b",
-".b.b...Z#K#A#A#A#IbPaG.G.G.G.M.F.F.D.D.j.i.B.g.g.g.f.B.f.f.e.e.f.d.e.d.d.d.d.e.f.e.d.f.f.e.B.g.g.C.g.j.D.D.F.F.F.G.G.N.N.N.O.Q.W.R.W.X.X.Z.Z.7.0.9.9#.###a#.aYbP.Z.0.0.0.1.0.G...b.b",
-".b.b...Z#J#I#I#z#zbPaG.N.G.G.F.E.F.F.D.D.D.j.B.i.B.B.f.B.f.f.f.e.f.d.f.f.e.f.e.d.f.f.f.f.B.f.B.B.g.D.D.D.D.E.F.M.G.G.G.N.N.Q.Q.Q.W.S.X.X.Z.Z.9.9.9#.#.#a#.##aPbP.V.Z.0.0.0.3.G...b.b",
-".b.b.c.Q#I#B#z#z#zbJbd.G.N.G.G.F.E.F.F.D.j.C.j.C.g.i.B.f.B.f.f.f.f.f.f.e.f.f.f.f.f.f.f.B.f.g.g.d.j.C.j.D.D.M.F.G.G.G.N.N.N.Q.R.R.R.W.Z.X.Z.Z.7.0#.#.#a###.#.bjbI.U.Z.V.Z.0.0.F.c.b.b",
-".b.b.i.M#I#z#I#z#ybvbn.G.N.G.G.G.F.F.F.j.D.D.D.B.D.B.B.i.B.g.B.f.B.f.f.f.f.e.f.f.B.g.B.g.g.C.B.D.B.j.D.E.E.F.M.G.G.N.N.N.Q.Q.Q.S.W.X.X.Z.Z.7.9.9.9#.#.#a###.bpbo.Y.V.Z.Z.Z.0.f.i.b.b",
-".b.b.g.f#J#A#z#y#zbgbP.N.G.N.G.G.G.M.E.F.D.E.j.D.j.i.C.g.C.B.g.g.B.f.B.g.B.B.B.B.g.B.g.C.B.i.j.i.j.D.k.E.F.F.G.G.N.G.N.Q.Q.Q.W.W.T.X.Z.Z.Z.9.0#.#.#####.#.#.bPa6.T.U.Y.V.Z.0.d.i.b.b",
-".b.b.n..#A#I#z#y#yaQbP#h.N.G.N.G.G.G.F.F.F.D.D.D.D.D.j.D.g.C.B.i.B.g.g.B.i.B.g.g.C.i.B.i.D.D.D.D.D.k.E.E.E.G.G.G.N.N.N.O.Q.R.R.W.X.Y.X.Z.7.0.9.9#.###a###.#0bPay.T.T.U.Y.V.Z...m.b.b",
-".b.b.p..#m#z#z#z#y#7bPal.N.N.G.N.N.G.G.F.F.F.F.j.D.D.D.j.D.j.C.C.i.C.C.i.B.i.C.C.g.D.i.D.D.j.D.E.D.E.E.E.G.G.G.N.N.N.Q.Q.Q.R.W.T.X.X.7.Z.0.8#.#.#.#a#.#..1aubP#R.T.T.X.T.U.Q...q.b.b",
-".b.b.u...8#z#y#y#r#qbNa4.N.N.N.N.G.M.G.G.G.F.E.F.F.D.D.D.D.D.D.h.D.D.g.D.i.D.C.h.D.j.D.D.j.D.D.D.E.F.E.G.G.G.N.N.N.N.Q.Q.R.W.W.X.X.Z.Z.Z.9.9#.#.#a#.###..9b.bM.K.S.T.T.U.Y.G...v.b.b",
-".b.b.b.c.N#z#z#y#r#qblbL.N.H.N.G.N.G.N.M.G.M.F.F.E.F.E.D.j.D.j.D.D.j.D.D.D.D.j.D.D.D.D.D.E.F.F.F.F.E.G.G.G.N.G.N.P.Q.Q.R.W.R.X.Z.Z.Z.7.9.0.9#.#####a#.#..1bMa9.K.R.T.S.T.T.C.c.b.b.b",
-".b.b.b.j.d#y#y#y#q#qaIbPae.N.N.N.G.N.G.N.G.G.G.M.F.E.F.F.F.F.D.D.D.D.D.D.D.D.D.D.F.D.F.D.F.E.M.G.G.G.G.G.N.N.N.Q.O.Q.R.R.W.X.X.X.Z.Z.0.7.9#.#.###a#.#.#.agbPam.K.R.K.T.S.T.c.j.b.b.b",
-".b.b.b.p..#a#z#q#r#p#ybMa5.Q.P.N.N.N.N.G.N.G.G.G.G.G.F.E.F.E.F.F.F.F.F.F.F.F.F.F.E.F.F.F.F.F.F.G.G.M.N.N.N.N.O.P.Q.Q.R.W.T.X.X.Z.Z.7.9.9#.#.#.#a#.###..0bfbM.X.Q.K.R.R.T.H...p.b.b.b",
-".b.b.b.A...N#y#r#q#p#pb#bP#u.Q.P.N.G.N.N.G.N.N.N.G.M.G.G.G.M.F.E.F.E.F.E.F.E.F.F.F.F.G.M.G.G.G.G.G.N.G.G.N.N.Q.Q.R.R.W.W.X.X.Z.Z.Z.9.0.9#.#####.###..1#EbPa5.J.Q.Q.S.K.K.C...A.b.b.b",
-".b.b.b.b.j.d#r#q#p#q#p#6bPaM.O.Q.Q.N.N.N.N.G.N.F.N.G.N.M.M.G.G.M.F.F.G.G.G.G.G.G.M.G.G.G.G.G.G.N.N.G.N.Q.P.Q.Q.Q.R.W.S.X.X.Z.Z.7.9.0.9#.#.###a###.#..9aObP#D.I.Q.J.Q.R.S.#.j.b.b.b.b",
-".b.b.b.b.q...0#x#q#p#o#pbubL.6.Q.Q.Q.N.H.N.N.G.N.G.N.G.G.N.G.G.G.G.G.M.G.M.G.G.G.G.G.G.G.N.N.N.G.N.N.Q.N.Q.R.Q.R.W.T.X.Z.X.Z.Z.0.7.9#.#.###.#.#a#..1#kbMbn.H.I.I.O.J.Q.G...q.b.b.b.b",
-".b.b.b.b.b.d.C#q#p#q#p#eahbPa8.W.Q.Q.Q.Q.N.N.N.N.N.G.N.N.G.N.N.G.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.Q.N.Q.R.Q.R.R.W.W.X.X.X.Z.Z.7.9.9#.#.###.#a###.#..0b.bP#Q.H.H.O.I.R.J.d.d.b.b.b.b.b",
-".b.b.b.b.b.n..###p#p#o#e#db#bP#P.R.W.Q.Q.Q.Q.P.H.N.N.N.N.G.N.G.N.N.G.G.G.G.N.G.N.N.N.N.N.N.N.N.Q.Q.Q.Q.Q.R.W.W.X.X.X.Z.Z.Z.9.9.0#.#.###.#a###.#..0#TbPa4.G.H.N.H.J.I.G...n.b.b.b.b.b",
-".b.b.b.b.b.A.c.F#q#o#p#e#o#GbMbz.R.Q.W.Q.Q.O.Q.Q.Q.N.N.H.N.N.N.N.G.N.N.N.N.N.N.N.G.N.N.P.Q.Q.Q.Q.Q.R.R.W.W.S.X.X.Z.Z.Z.Z.9.Z.9#..9###.#a#.#.#..1.0bDbM.W.G.H.H.H.N.I.d.d.w.b.b.b.b.b",
-".b.b.b.b.b.b.n...0#p#o#d#n#caIbPa0.W.R.W.R.Q.Q.O.Q.Q.Q.Q.Q.P.N.P.N.P.N.P.N.P.P.Q.Q.Q.Q.O.Q.Q.R.Q.R.W.R.S.X.X.X.Z.X.Z.7.9.0.9#..9#.#a#.###a#.#..0a2bPar.G.G.N.G.H.H.F.c.m.b.b.b.b.b.b",
-".b.b.b.b.b.b.A.c.d#p#e#o#c#c#bbkbP#9.W.R.W.R.W.R.Q.Q.Q.O.Q.O.Q.Q.Q.Q.Q.Q.Q.O.Q.O.Q.Q.Q.Q.R.Q.W.R.W.R.X.X.X.X.Y.Z.Z.Z.9.0.9#.#.#.#a#.#a#.#.#..0afbPbc.G.G.G.G.G.H.H.c.c.z.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.p...S#e#o#c#c#c#obIbM#Q.W.W.W.R.W.R.W.Q.R.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.R.Q.R.W.R.W.W.S.X.X.X.X.X.Z.Z.Z.7.9.0.9#..9#.#a#.#####.#..0#TbMbG.N.l.G.G.G.H.G.g...q.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.b.i..###d#c#n#a#c#1bLbM.7.T.W.W.S.W.R.W.R.W.R.Q.W.R.Q.W.R.R.W.R.R.W.R.W.R.W.R.X.X.X.X.Z.Z.Z.Z.7.9.0.9.9#..9#.#a###.#a#.#..0#kbMbL#g.k.l.F.G.G.G.F...j.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.b.w.c.B#c#c#c#c#a.2ahbPbB#i.X.X.X.W.W.S.W.W.W.R.S.W.R.R.W.R.W.W.W.S.W.S.X.X.X.X.X.Z.X.Z.Z.7.Z.0.7.9#..9#.###a#.###a#.#..0#lbBbP#O.j.E.k.l.F.G.G.d.c.v.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.b.b.o...N#m#c#c#a#a.1aubPbB#S.X.X.X.X.X.X.T.W.X.W.T.W.W.W.S.X.S.X.X.X.Z.X.X.X.Z.Z.Z.Z.Z.7.0.9.9#..9#.#.#.#a#.#a#.#.#..0#TbHbPac.j.E.j.k.E.l.G.f...p.b.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.b.b.b.j...R#c#b#a#a.3.1aubLbM#Z.Z.X.Z.X.X.X.X.X.X.X.Y.X.Y.X.X.X.Y.X.X.X.Z.Z.Z.Z.Z.7.Z.9.0.9.9#..9#.#.###a###.###.#..0#TbMbLac.j.D.j.l.D.k.l.g...l.b.b.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.b.b.b.b.f...W#c.4#a.1#a.1#TbMbPaA.Z.Z.X.Z.Z.X.Z.X.Z.X.X.X.Z.X.Z.X.Z.Z.Z.Z.Z.7.Z.7.0.9.9.9.9#..9#.#####a#.#a#.#.#..0aNbPbI#s.g.j.j.j.D.k.D.g...f.b.b.b.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.b.b.b.b.v.f.c.0#a.4.1.1.1.1#vbBbPbi#j.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.7.Z.Z.7.Z.7.Z.9.9.0.8.0.9#.#.#.#.#a#.#a#.###.#..0#lbpbPbs.5.g.j.h.j.D.j.E.j...f.A.b.b.b.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.b.b.b.b.b.A.c.c.Z#a.2#..0.1.0.Va1bPbMaB.7.Z.7.Z.Z.7.Z.Z.7.Z.7.Z.Z.9.Z.9.0.9.0.9.9#.#.#.#.#.#####.#a###.#.#..1aBbMbPaL.g.g.g.g.j.h.j.j.i...d.v.b.b.b.b.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.b.b.b.b.b.b.t.c.c.R#..1.1.0.0.0.Y#0bAbPbI#9.0.9.9.0.9.9.0.9.0.9.9.0.9.9.9.9#..9#.#.###.#####a#.#a#.#.#.#.#5bIbPbs#N.f.g.g.h.i.g.j.h.f.c.d.v.b.b.b.b.b.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.b.b.b.b.b.b.b.q.d...Q.1.1.0.0.Z.V.Z.TazbLbPbBat.0.9.9.0.9.9.9.9.9.9#..9#..9#.#.#.###.###a#.###a#.#.#.aubBbPbIaq.e.f.g.g.g.g.g.h.D.f...d.v.b.b.b.b.b.b.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.t.f...F.1.0.0.Z.Z.U.U.T.7aNbHbPbMa2#0.9#..9#.#.#.#..9#.#.###.###a#.#a#.###a#.#.#0a2bMbPbDaD.L.f.g.f.g.f.g.g.i.g.d...i.A.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.w.k...f.Z.0.0.Y.Z.T.T.S.K.KambobPbPbIb.au#0#.#.#.#a#.###a#.#a###.###a#0aub.bIbPbPbhab.e.f.g.g.f.g.f.g.g.g.g.c...l.A.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.q...c.G.Z.V.U.Y.T.T.T.R.K.J#hatbdbPbPbPbPbtbtaYaYaYaYaYaYaYbtbtbPbPbPbPbcad.5.e.g.f.g.g.f.g.g.g.f.g.d.c...o.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.t.f...C.Q.Y.T.T.S.K.R.R.Q.O.I.H.H#PasaVbibtbPbPbPbPbPbPbPbsbiaTaq#N.f.e.g.f.g.f.g.f.g.f.g.f.g.e.c...f.u.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.m.c...D.R.T.T.T.K.R.J.Q.I.N.H.H.G.G.F.l.k.j.j.j.j.j.g.g.g.g.g.g.g.f.g.f.g.g.f.g.f.g.f.e.d...d.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.t.j.....D.Q.S.R.K.Q.Q.I.I.H.H.H.G.G.G.F.l.E.j.D.j.j.j.i.g.g.g.f.g.f.g.f.g.g.f.g.e.d.....k.w.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.r.k.....f.G.R.J.Q.I.N.H.H.G.G.G.G.l.E.j.E.j.D.h.j.g.h.g.g.g.f.g.g.f.g.f.e.#.c...k.u.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.u.m.c...c.B.G.I.J.H.H.G.H.G.G.l.l.k.k.j.j.j.j.h.i.g.g.g.g.f.g.e.c.#...c.k.s.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.o.j.......d.C.E.G.G.G.G.G.E.l.D.D.j.D.h.j.g.i.g.f.d.#.....#.i.o.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.u.q.k.f...c.....d.d.g.f.f.f.f.e.f.d.c.d.......#.d.j.o.t.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.w.r.n.m.i.f.....#.........c.f.g.l.n.r.w.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b",
-".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b",
-};
diff --git a/sandbox/conical.tcl b/sandbox/conical.tcl
deleted file mode 100644
index 63dd7c0..0000000
--- a/sandbox/conical.tcl
+++ /dev/null
@@ -1,18 +0,0 @@
-
-lappend auto_path ..
-package require Tkzinc
-
-set defaultfont -b&h-lucida-bold-r-normal-*-*-140-*-*-p-*-iso10646-1
-zinc .zinc -width 700 -height 500 -render 1
-pack .zinc
-
-
-.zinc gname {=radial 0 0 |white|gray30} test1
-.zinc gname {=conical 70 |white|gray30 50 50|white} test2
-
-set grp [.zinc add group 1]
-#.zinc add rectangle $grp {0 0 70 50} -filled 1 -fillcolor white
-.zinc add rectangle $grp {60 60 360 360} -filled 1 -linewidth 1 \
- -fillcolor test2 -tags rect
-
-.zinc add rectangle $grp {140 140 280 280} -filled 1 -fillcolor gray
diff --git a/sandbox/contours.tcl b/sandbox/contours.tcl
deleted file mode 100644
index ce6d3ac..0000000
--- a/sandbox/contours.tcl
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/local/bin/wish -f
-
-load ../tkzinc3.2.so
-package require Img
-
-set top 1
-set lw 8
-
-set r [zinc .r -backcolor gray -relief sunken]
-pack .r -expand t -fill both
-.r configure -width 800 -height 500
-.r scale $top 1 -1
-#.r configure -drawbboxes t
-set view [.r add group $top -tags controls]
-#set poly [.r add curve $view "50 -150 300 -150 300 -300 50 -300 50 -150" \
-# -closed t -fillcolor tan]
-set poly [.r add curve $view "50 -150 50 -300 300 -300 300 -150 50 -150" \
- -closed t -fillcolor tan -linecolor tan -linewidth 2 -relief raised]
-.r scale $poly 2.0 2.0
-.r translate $poly -60 150
-set rect [.r add rectangle $view "50 -200 100 -50"]
-set ellipse [.r add arc $view "150 -200 300 -350"]
-set arc [.r add arc $view "-25 -150 125 -300"]
-.r scale $arc 2.0 2.0
-.r translate $arc -60 150
-
-set mp [.r add curve $view "" \
- -linecolor yellow -fillcolor tan -fillpattern AlphaStipple8 \
- -markercolor red -tags "poly" -linewidth $lw -filled t -closed t]
-
-.r contour $mp add $poly
-.r contour $mp addhole $ellipse
-.r contour $mp addhole $rect
-.r contour $mp add $arc
-
-.r itemconfigure $mp -relief raised -visible t
-.r lower $mp
-
-#.r remove $arc $ellipse $rect $poly
-.r remove $rect $arc $ellipse
-
-#.r itemconfigure $poly -relief raised -linewidth 8
-
-# "50 -200 100 -200 100 -50 50 -50 50 -200"
-source "controls.tcl"
diff --git a/sandbox/controls.tcl b/sandbox/controls.tcl
deleted file mode 100644
index d865020..0000000
--- a/sandbox/controls.tcl
+++ /dev/null
@@ -1,158 +0,0 @@
-set tlbbox [.r add group $top -sensitive f -visible f -tags currentbbox]
-.r add rectangle $tlbbox "-3 -3 +3 +3"
-set trbbox [.r add group $top -sensitive f -visible f -tags currentbbox]
-.r add rectangle $trbbox "-3 -3 +3 +3"
-set blbbox [.r add group $top -sensitive f -visible f -tags currentbbox]
-.r add rectangle $blbbox "-3 -3 +3 +3"
-set brbbox [.r add group $top -sensitive f -visible f -tags currentbbox]
-.r add rectangle $brbbox "-3 -3 +3 +3"
-.r add rectangle $top "0 0 1 1" -linecolor red -tags "lasso" -visible f -sensitive f
-
-#
-# Controls for the window transform.
-#
-proc press {lx ly action} {
- global x y angle
- set x $lx
- set y $ly
- set angle [expr atan2($y, $x)]
- bind .r "<Motion>" "$action %x %y"
-}
-
-proc motion {lx ly} {
- global x y
- set it [.r find withtag controls]
- if {$it != ""} {
- set it [.r group [lindex $it 0]]
- }
- set res [.r transform $it "$lx $ly $x $y"]
- set nx [lindex $res 0]
- set ny [lindex $res 1]
- set ox [lindex $res 2]
- set oy [lindex $res 3]
- .r translate controls [expr $nx - $ox] [expr $ny - $oy]
- set x $lx
- set y $ly
-}
-
-proc zoom {lx ly} {
- global x y
-
- if {$lx > $x} {
- set maxx $lx
- } else {
- set maxx $x
- }
- if {$ly > $y} {
- set maxy $ly
- } else {
- set maxy $y
- }
- set sx [expr 1.0 + double($lx - $x)/$maxx]
- set sy [expr 1.0 + double($ly - $y)/$maxy]
- set x $lx
- set y $ly
- .r scale controls $sx $sy
-}
-
-proc rotate {lx ly} {
- global angle
-
- set langle [expr atan2($ly, $lx)]
- .r rotate controls [expr -($langle-$angle)]
- set angle $langle
-}
-
-proc release {} {
- bind .r "<Motion>" ""
-}
-
-proc start_lasso {lx ly} {
- global top x y cx cy
- set x $lx
- set y $ly
- set cx $lx
- set cy $ly
- set coords [.r transform $top "$x $y"]
- set fx [lindex $coords 0]
- set fy [lindex $coords 1]
- .r coords lasso "$fx $fy $fx $fy"
- .r itemconfigure lasso -visible t
- .r raise lasso
- bind .r "<Motion>" "lasso %x %y"
-}
-
-proc lasso {lx ly} {
- global top x y cx cy
- set cx $lx
- set cy $ly
- set coords [.r transform $top "$x $y $lx $ly"]
- set fx [lindex $coords 0]
- set fy [lindex $coords 1]
- set fcx [lindex $coords 2]
- set fcy [lindex $coords 3]
- .r coords lasso "$fx $fy $fcx $fcy"
-}
-
-proc fin_lasso {} {
- global x y cx cy
-
- bind .r "<Motion>" ""
- .r itemconfigure lasso -visible f
-# puts "x=$x, y=$y, cx=$cx, cy=$cy"
- puts "enclosed='[.r find enclosed $x $y $cx $cy]', overlapping='[.r find overlapping $x $y $cx $cy]'"
-}
-
-proc getrect {x y} {
- list [expr $x-3] [expr $y-3] [expr $x+3] [expr $y+3]
-}
-
-proc showbox {} {
- global top tlbbox trbbox blbbox brbbox
-
- if { ! [.r hastag current currentbbox]} {
- if {[catch {.r find withtag current} item] } {
- return
- }
- set coords [.r transform $top [.r bbox current]]
- set xo [lindex $coords 0]
- set yo [lindex $coords 1]
- set xc [lindex $coords 2]
- set yc [lindex $coords 3]
-
- .r coords $tlbbox "$xo $yo"
- .r coords $trbbox "$xc $yo"
- .r coords $brbbox "$xc $yc"
- .r coords $blbbox "$xo $yc"
- .r itemconfigure currentbbox -visible t
- }
-}
-
-proc hidebox {lx ly} {
- set next [.r find closest $lx $ly]
- if {[llength $next] > 1} {
- set next [lindex $next 0]
- }
- if { $next == "" || ! [.r hastag $next currentbbox] ||\
- [.r hastag current currentbbox]} {
- .r itemconfigure currentbbox -visible f
- }
-}
-
-
-bind .r "<ButtonPress-1>" "start_lasso %x %y"
-bind .r "<ButtonRelease-1>" fin_lasso
-
-bind .r "<ButtonPress-2>" {puts "at point='[.r find closest %x %y]'"}
-
-bind .r "<ButtonPress-3>" "press %x %y motion"
-bind .r "<ButtonRelease-3>" release
-
-bind .r "<Shift-ButtonPress-3>" "press %x %y zoom"
-bind .r "<Shift-ButtonRelease-3>" release
-
-bind .r "<Control-ButtonPress-3>" "press %x %y rotate"
-bind .r "<Control-ButtonRelease-3>" release
-
-.r bind current "<Enter>" showbox
-.r bind current "<Leave>" {hidebox %x %y}
diff --git a/sandbox/defs.tcl b/sandbox/defs.tcl
deleted file mode 100644
index a2e55cd..0000000
--- a/sandbox/defs.tcl
+++ /dev/null
@@ -1,1097 +0,0 @@
-# defs.tcl --
-#
-# This file contains support code for the Tcl/Tk test suite.It is
-# It is normally sourced by the individual files in the test suite
-# before they run their tests. This improved approach to testing
-# was designed and initially implemented by Mary Ann May-Pumphrey
-# of Sun Microsystems.
-#
-# Copyright (c) 1990-1994 The Regents of the University of California.
-# Copyright (c) 1994-1996 Sun Microsystems, Inc.
-# Copyright (c) 1998-1999 by Scriptics Corporation.
-# All rights reserved.
-#
-# RCS: @(#) $Id$
-
-# Initialize wish shell
-
-if {[info exists tk_version]} {
- tk appname tktest
- wm title . tktest
-} else {
-
- # Ensure that we have a minimal auto_path so we don't pick up extra junk.
-
- set auto_path [list [info library]]
-}
-
-# create the "tcltest" namespace for all testing variables and procedures
-
-namespace eval tcltest {
- set procList [list test cleanupTests dotests saveState restoreState \
- normalizeMsg makeFile removeFile makeDirectory removeDirectory \
- viewFile bytestring set_iso8859_1_locale restore_locale \
- safeFetch threadReap]
- if {[info exists tk_version]} {
- lappend procList setupbg dobg bgReady cleanupbg fixfocus
- }
- foreach proc $procList {
- namespace export $proc
- }
-
- # setup ::tcltest default vars
- foreach {var default} {verbose b match {} skip {}} {
- if {![info exists $var]} {
- variable $var $default
- }
- }
-
- # Tests should not rely on the current working directory.
- # Files that are part of the test suite should be accessed relative to
- # ::tcltest::testsDir.
-
- set originalDir [pwd]
- set tDir [file join $originalDir [file dirname [info script]]]
- cd $tDir
- variable testsDir [pwd]
- cd $originalDir
-
- # Count the number of files tested (0 if all.tcl wasn't called).
- # The all.tcl file will set testSingleFile to false, so stats will
- # not be printed until all.tcl calls the cleanupTests proc.
- # The currentFailure var stores the boolean value of whether the
- # current test file has had any failures. The failFiles list
- # stores the names of test files that had failures.
-
- variable numTestFiles 0
- variable testSingleFile true
- variable currentFailure false
- variable failFiles {}
-
- # Tests should remove all files they create. The test suite will
- # check the current working dir for files created by the tests.
- # ::tcltest::filesMade keeps track of such files created using the
- # ::tcltest::makeFile and ::tcltest::makeDirectory procedures.
- # ::tcltest::filesExisted stores the names of pre-existing files.
-
- variable filesMade {}
- variable filesExisted {}
-
- # ::tcltest::numTests will store test files as indices and the list
- # of files (that should not have been) left behind by the test files.
-
- array set ::tcltest::createdNewFiles {}
-
- # initialize ::tcltest::numTests array to keep track fo the number of
- # tests that pass, fial, and are skipped.
-
- array set numTests [list Total 0 Passed 0 Skipped 0 Failed 0]
-
- # initialize ::tcltest::skippedBecause array to keep track of
- # constraints that kept tests from running
-
- array set ::tcltest::skippedBecause {}
-
- # tests that use thread need to know which is the main thread
-
- variable ::tcltest::mainThread 1
- if {[info commands testthread] != {}} {
- puts "Tk with threads enabled is known to have problems with X"
- set ::tcltest::mainThread [testthread names]
- }
-}
-
-# If there is no "memory" command (because memory debugging isn't
-# enabled), generate a dummy command that does nothing.
-
-if {[info commands memory] == ""} {
- proc memory args {}
-}
-
-# ::tcltest::initConfig --
-#
-# Check configuration information that will determine which tests
-# to run. To do this, create an array ::tcltest::testConfig. Each
-# element has a 0 or 1 value. If the element is "true" then tests
-# with that constraint will be run, otherwise tests with that constraint
-# will be skipped. See the README file for the list of built-in
-# constraints defined in this procedure.
-#
-# Arguments:
-# none
-#
-# Results:
-# The ::tcltest::testConfig array is reset to have an index for
-# each built-in test constraint.
-
-proc ::tcltest::initConfig {} {
-
- global tcl_platform tcl_interactive tk_version
-
- catch {unset ::tcltest::testConfig}
-
- # The following trace procedure makes it so that we can safely refer to
- # non-existent members of the ::tcltest::testConfig array without causing an
- # error. Instead, reading a non-existent member will return 0. This is
- # necessary because tests are allowed to use constraint "X" without ensuring
- # that ::tcltest::testConfig("X") is defined.
-
- trace variable ::tcltest::testConfig r ::tcltest::safeFetch
-
- proc ::tcltest::safeFetch {n1 n2 op} {
- if {($n2 != {}) && ([info exists ::tcltest::testConfig($n2)] == 0)} {
- set ::tcltest::testConfig($n2) 0
- }
- }
-
- set ::tcltest::testConfig(unixOnly) \
- [expr {$tcl_platform(platform) == "unix"}]
- set ::tcltest::testConfig(macOnly) \
- [expr {$tcl_platform(platform) == "macintosh"}]
- set ::tcltest::testConfig(pcOnly) \
- [expr {$tcl_platform(platform) == "windows"}]
-
- set ::tcltest::testConfig(unix) $::tcltest::testConfig(unixOnly)
- set ::tcltest::testConfig(mac) $::tcltest::testConfig(macOnly)
- set ::tcltest::testConfig(pc) $::tcltest::testConfig(pcOnly)
-
- set ::tcltest::testConfig(unixOrPc) \
- [expr {$::tcltest::testConfig(unix) || $::tcltest::testConfig(pc)}]
- set ::tcltest::testConfig(macOrPc) \
- [expr {$::tcltest::testConfig(mac) || $::tcltest::testConfig(pc)}]
- set ::tcltest::testConfig(macOrUnix) \
- [expr {$::tcltest::testConfig(mac) || $::tcltest::testConfig(unix)}]
-
- set ::tcltest::testConfig(nt) [expr {$tcl_platform(os) == "Windows NT"}]
- set ::tcltest::testConfig(95) [expr {$tcl_platform(os) == "Windows 95"}]
-
- # The following config switches are used to mark tests that should work,
- # but have been temporarily disabled on certain platforms because they don't
- # and we haven't gotten around to fixing the underlying problem.
-
- set ::tcltest::testConfig(tempNotPc) [expr {!$::tcltest::testConfig(pc)}]
- set ::tcltest::testConfig(tempNotMac) [expr {!$::tcltest::testConfig(mac)}]
- set ::tcltest::testConfig(tempNotUnix) [expr {!$::tcltest::testConfig(unix)}]
-
- # The following config switches are used to mark tests that crash on
- # certain platforms, so that they can be reactivated again when the
- # underlying problem is fixed.
-
- set ::tcltest::testConfig(pcCrash) [expr {!$::tcltest::testConfig(pc)}]
- set ::tcltest::testConfig(macCrash) [expr {!$::tcltest::testConfig(mac)}]
- set ::tcltest::testConfig(unixCrash) [expr {!$::tcltest::testConfig(unix)}]
-
- # Set the "fonts" constraint for wish apps
-
- if {[info exists tk_version]} {
- set ::tcltest::testConfig(fonts) 1
- catch {destroy .e}
- entry .e -width 0 -font {Helvetica -12} -bd 1
- .e insert end "a.bcd"
- if {([winfo reqwidth .e] != 37) || ([winfo reqheight .e] != 20)} {
- set ::tcltest::testConfig(fonts) 0
- }
- destroy .e
- catch {destroy .t}
- text .t -width 80 -height 20 -font {Times -14} -bd 1
- pack .t
- .t insert end "This is\na dot."
- update
- set x [list [.t bbox 1.3] [.t bbox 2.5]]
- destroy .t
- if {[string match {{22 3 6 15} {31 18 [34] 15}} $x] == 0} {
- set ::tcltest::testConfig(fonts) 0
- }
-
- # Test to see if we have are running Unix apps on Exceed,
- # which won't return font failures (Windows-like), which is
- # not what we want from ann X server (other Windows X servers
- # operate as expected)
-
- set ::tcltest::testConfig(noExceed) 1
- if {$::tcltest::testConfig(unixOnly) && \
- [catch {font actual "\{xyz"}] == 0} {
- puts "Running X app on Exceed, skipping problematic font tests..."
- set ::tcltest::testConfig(noExceed) 0
- }
- }
-
- # Skip empty tests
-
- set ::tcltest::testConfig(emptyTest) 0
-
- # By default, tests that expost known bugs are skipped.
-
- set ::tcltest::testConfig(knownBug) 0
-
- # By default, non-portable tests are skipped.
-
- set ::tcltest::testConfig(nonPortable) 0
-
- # Some tests require user interaction.
-
- set ::tcltest::testConfig(userInteraction) 0
-
- # Some tests must be skipped if the interpreter is not in interactive mode
-
- set ::tcltest::testConfig(interactive) $tcl_interactive
-
- # Some tests must be skipped if you are running as root on Unix.
- # Other tests can only be run if you are running as root on Unix.
-
- set ::tcltest::testConfig(root) 0
- set ::tcltest::testConfig(notRoot) 1
- set user {}
- if {$tcl_platform(platform) == "unix"} {
- catch {set user [exec whoami]}
- if {$user == ""} {
- catch {regexp {^[^(]*\(([^)]*)\)} [exec id] dummy user}
- }
- if {($user == "root") || ($user == "")} {
- set ::tcltest::testConfig(root) 1
- set ::tcltest::testConfig(notRoot) 0
- }
- }
-
- # Set nonBlockFiles constraint: 1 means this platform supports
- # setting files into nonblocking mode.
-
- if {[catch {set f [open defs r]}]} {
- set ::tcltest::testConfig(nonBlockFiles) 1
- } else {
- if {[catch {fconfigure $f -blocking off}] == 0} {
- set ::tcltest::testConfig(nonBlockFiles) 1
- } else {
- set ::tcltest::testConfig(nonBlockFiles) 0
- }
- close $f
- }
-
- # Set asyncPipeClose constraint: 1 means this platform supports
- # async flush and async close on a pipe.
- #
- # Test for SCO Unix - cannot run async flushing tests because a
- # potential problem with select is apparently interfering.
- # (Mark Diekhans).
-
- if {$tcl_platform(platform) == "unix"} {
- if {[catch {exec uname -X | fgrep {Release = 3.2v}}] == 0} {
- set ::tcltest::testConfig(asyncPipeClose) 0
- } else {
- set ::tcltest::testConfig(asyncPipeClose) 1
- }
- } else {
- set ::tcltest::testConfig(asyncPipeClose) 1
- }
-
- # Test to see if we have a broken version of sprintf with respect
- # to the "e" format of floating-point numbers.
-
- set ::tcltest::testConfig(eformat) 1
- if {[string compare "[format %g 5e-5]" "5e-05"] != 0} {
- set ::tcltest::testConfig(eformat) 0
- }
-
- # Test to see if execed commands such as cat, echo, rm and so forth are
- # present on this machine.
-
- set ::tcltest::testConfig(unixExecs) 1
- if {$tcl_platform(platform) == "macintosh"} {
- set ::tcltest::testConfig(unixExecs) 0
- }
- if {($::tcltest::testConfig(unixExecs) == 1) && \
- ($tcl_platform(platform) == "windows")} {
- if {[catch {exec cat defs}] == 1} {
- set ::tcltest::testConfig(unixExecs) 0
- }
- if {($::tcltest::testConfig(unixExecs) == 1) && \
- ([catch {exec echo hello}] == 1)} {
- set ::tcltest::testConfig(unixExecs) 0
- }
- if {($::tcltest::testConfig(unixExecs) == 1) && \
- ([catch {exec sh -c echo hello}] == 1)} {
- set ::tcltest::testConfig(unixExecs) 0
- }
- if {($::tcltest::testConfig(unixExecs) == 1) && \
- ([catch {exec wc defs}] == 1)} {
- set ::tcltest::testConfig(unixExecs) 0
- }
- if {$::tcltest::testConfig(unixExecs) == 1} {
- exec echo hello > removeMe
- if {[catch {exec rm removeMe}] == 1} {
- set ::tcltest::testConfig(unixExecs) 0
- }
- }
- if {($::tcltest::testConfig(unixExecs) == 1) && \
- ([catch {exec sleep 1}] == 1)} {
- set ::tcltest::testConfig(unixExecs) 0
- }
- if {($::tcltest::testConfig(unixExecs) == 1) && \
- ([catch {exec fgrep unixExecs defs}] == 1)} {
- set ::tcltest::testConfig(unixExecs) 0
- }
- if {($::tcltest::testConfig(unixExecs) == 1) && \
- ([catch {exec ps}] == 1)} {
- set ::tcltest::testConfig(unixExecs) 0
- }
- if {($::tcltest::testConfig(unixExecs) == 1) && \
- ([catch {exec echo abc > removeMe}] == 0) && \
- ([catch {exec chmod 644 removeMe}] == 1) && \
- ([catch {exec rm removeMe}] == 0)} {
- set ::tcltest::testConfig(unixExecs) 0
- } else {
- catch {exec rm -f removeMe}
- }
- if {($::tcltest::testConfig(unixExecs) == 1) && \
- ([catch {exec mkdir removeMe}] == 1)} {
- set ::tcltest::testConfig(unixExecs) 0
- } else {
- catch {exec rm -r removeMe}
- }
- }
-}
-
-::tcltest::initConfig
-
-
-# ::tcltest::processCmdLineArgs --
-#
-# Use command line args to set the verbose, skip, and
-# match variables. This procedure must be run after
-# constraints are initialized, because some constraints can be
-# overridden.
-#
-# Arguments:
-# none
-#
-# Results:
-# ::tcltest::verbose is set to <value>
-
-proc ::tcltest::processCmdLineArgs {} {
- global argv
-
- # The "argv" var doesn't exist in some cases, so use {}
- # The "argv" var doesn't exist in some cases.
-
- if {(![info exists argv]) || ([llength $argv] < 2)} {
- set flagArray {}
- } else {
- set flagArray $argv
- }
-
- if {[catch {array set flag $flagArray}]} {
- puts stderr "Error: odd number of command line args specified:"
- puts stderr " $argv"
- exit
- }
-
- # Allow for 1-char abbreviations, where applicable (e.g., -match == -m).
- # Note that -verbose cannot be abbreviated to -v in wish because it
- # conflicts with the wish option -visual.
-
- foreach arg {-verbose -match -skip -constraints} {
- set abbrev [string range $arg 0 1]
- if {([info exists flag($abbrev)]) && \
- ([lsearch -exact $flagArray $arg] < \
- [lsearch -exact $flagArray $abbrev])} {
- set flag($arg) $flag($abbrev)
- }
- }
-
- # Set ::tcltest::workingDir to [pwd].
- # Save the names of files that already exist in ::tcltest::workingDir.
-
- set ::tcltest::workingDir [pwd]
- foreach file [glob -nocomplain [file join $::tcltest::workingDir *]] {
- lappend ::tcltest::filesExisted [file tail $file]
- }
-
- # Set ::tcltest::verbose to the arg of the -verbose flag, if given
-
- if {[info exists flag(-verbose)]} {
- set ::tcltest::verbose $flag(-verbose)
- }
-
- # Set ::tcltest::match to the arg of the -match flag, if given
-
- if {[info exists flag(-match)]} {
- set ::tcltest::match $flag(-match)
- }
-
- # Set ::tcltest::skip to the arg of the -skip flag, if given
-
- if {[info exists flag(-skip)]} {
- set ::tcltest::skip $flag(-skip)
- }
-
- # Use the -constraints flag, if given, to turn on constraints that are
- # turned off by default: userInteractive knownBug nonPortable. This
- # code fragment must be run after constraints are initialized.
-
- if {[info exists flag(-constraints)]} {
- foreach elt $flag(-constraints) {
- set ::tcltest::testConfig($elt) 1
- }
- }
-}
-
-::tcltest::processCmdLineArgs
-
-
-# ::tcltest::cleanupTests --
-#
-# Remove files and dirs created using the makeFile and makeDirectory
-# commands since the last time this proc was invoked.
-#
-# Print the names of the files created without the makeFile command
-# since the tests were invoked.
-#
-# Print the number tests (total, passed, failed, and skipped) since the
-# tests were invoked.
-#
-
-proc ::tcltest::cleanupTests {{calledFromAllFile 0}} {
- set tail [file tail [info script]]
-
- # Remove files and directories created by the :tcltest::makeFile and
- # ::tcltest::makeDirectory procedures.
- # Record the names of files in ::tcltest::workingDir that were not
- # pre-existing, and associate them with the test file that created them.
-
- if {!$calledFromAllFile} {
-
- foreach file $::tcltest::filesMade {
- if {[file exists $file]} {
- catch {file delete -force $file}
- }
- }
- set currentFiles {}
- foreach file [glob -nocomplain [file join $::tcltest::workingDir *]] {
- lappend currentFiles [file tail $file]
- }
- set newFiles {}
- foreach file $currentFiles {
- if {[lsearch -exact $::tcltest::filesExisted $file] == -1} {
- lappend newFiles $file
- }
- }
- set ::tcltest::filesExisted $currentFiles
- if {[llength $newFiles] > 0} {
- set ::tcltest::createdNewFiles($tail) $newFiles
- }
- }
-
- if {$calledFromAllFile || $::tcltest::testSingleFile} {
-
- # print stats
-
- puts -nonewline stdout "$tail:"
- foreach index [list "Total" "Passed" "Skipped" "Failed"] {
- puts -nonewline stdout "\t$index\t$::tcltest::numTests($index)"
- }
- puts stdout ""
-
- # print number test files sourced
- # print names of files that ran tests which failed
-
- if {$calledFromAllFile} {
- puts stdout "Sourced $::tcltest::numTestFiles Test Files."
- set ::tcltest::numTestFiles 0
- if {[llength $::tcltest::failFiles] > 0} {
- puts stdout "Files with failing tests: $::tcltest::failFiles"
- set ::tcltest::failFiles {}
- }
- }
-
- # if any tests were skipped, print the constraints that kept them
- # from running.
-
- set constraintList [array names ::tcltest::skippedBecause]
- if {[llength $constraintList] > 0} {
- puts stdout "Number of tests skipped for each constraint:"
- foreach constraint [lsort $constraintList] {
- puts stdout \
- "\t$::tcltest::skippedBecause($constraint)\t$constraint"
- unset ::tcltest::skippedBecause($constraint)
- }
- }
-
- # report the names of test files in ::tcltest::createdNewFiles, and
- # reset the array to be empty.
-
- set testFilesThatTurded [lsort [array names ::tcltest::createdNewFiles]]
- if {[llength $testFilesThatTurded] > 0} {
- puts stdout "Warning: test files left files behind:"
- foreach testFile $testFilesThatTurded {
- puts "\t$testFile:\t$::tcltest::createdNewFiles($testFile)"
- unset ::tcltest::createdNewFiles($testFile)
- }
- }
-
- # reset filesMade, filesExisted, and numTests
-
- set ::tcltest::filesMade {}
- foreach index [list "Total" "Passed" "Skipped" "Failed"] {
- set ::tcltest::numTests($index) 0
- }
-
- # exit only if running Tk in non-interactive mode
-
- global tk_version tcl_interactive
- if {[info exists tk_version] && !$tcl_interactive} {
- exit
- }
- } else {
-
- # if we're deferring stat-reporting until all files are sourced,
- # then add current file to failFile list if any tests in this file
- # failed
-
- incr ::tcltest::numTestFiles
- if {($::tcltest::currentFailure) && \
- ([lsearch -exact $::tcltest::failFiles $tail] == -1)} {
- lappend ::tcltest::failFiles $tail
- }
- set ::tcltest::currentFailure false
- }
-}
-
-
-# test --
-#
-# This procedure runs a test and prints an error message if the test fails.
-# If ::tcltest::verbose has been set, it also prints a message even if the
-# test succeeds. The test will be skipped if it doesn't match the
-# ::tcltest::match variable, if it matches an element in
-# ::tcltest::skip, or if one of the elements of "constraints" turns
-# out not to be true.
-#
-# Arguments:
-# name - Name of test, in the form foo-1.2.
-# description - Short textual description of the test, to
-# help humans understand what it does.
-# constraints - A list of one or more keywords, each of
-# which must be the name of an element in
-# the array "::tcltest::testConfig". If any of these
-# elements is zero, the test is skipped.
-# This argument may be omitted.
-# script - Script to run to carry out the test. It must
-# return a result that can be checked for
-# correctness.
-# expectedAnswer - Expected result from script.
-
-proc ::tcltest::test {name description script expectedAnswer args} {
- incr ::tcltest::numTests(Total)
-
- # skip the test if it's name matches an element of skip
-
- foreach pattern $::tcltest::skip {
- if {[string match $pattern $name]} {
- incr ::tcltest::numTests(Skipped)
- return
- }
- }
- # skip the test if it's name doesn't match any element of match
-
- if {[llength $::tcltest::match] > 0} {
- set ok 0
- foreach pattern $::tcltest::match {
- if {[string match $pattern $name]} {
- set ok 1
- break
- }
- }
- if {!$ok} {
- incr ::tcltest::numTests(Skipped)
- return
- }
- }
- set i [llength $args]
- if {$i == 0} {
- set constraints {}
- } elseif {$i == 1} {
-
- # "constraints" argument exists; shuffle arguments down, then
- # make sure that the constraints are satisfied.
-
- set constraints $script
- set script $expectedAnswer
- set expectedAnswer [lindex $args 0]
- set doTest 0
- if {[string match {*[$\[]*} $constraints] != 0} {
-
- # full expression, e.g. {$foo > [info tclversion]}
-
- catch {set doTest [uplevel #0 expr $constraints]}
-
- } elseif {[regexp {[^.a-zA-Z0-9 ]+} $constraints] != 0} {
-
- # something like {a || b} should be turned into
- # $::tcltest::testConfig(a) || $::tcltest::testConfig(b).
-
- regsub -all {[.a-zA-Z0-9]+} $constraints \
- {$::tcltest::testConfig(&)} c
- catch {set doTest [eval expr $c]}
- } else {
-
- # just simple constraints such as {unixOnly fonts}.
-
- set doTest 1
- foreach constraint $constraints {
- if {![info exists ::tcltest::testConfig($constraint)]
- || !$::tcltest::testConfig($constraint)} {
- set doTest 0
-
- # store the constraint that kept the test from running
-
- set constraints $constraint
- break
- }
- }
- }
- if {$doTest == 0} {
- incr ::tcltest::numTests(Skipped)
- if {[string first s $::tcltest::verbose] != -1} {
- puts stdout "++++ $name SKIPPED: $constraints"
- }
-
- # add the constraint to the list of constraints the kept tests
- # from running
-
- if {[info exists ::tcltest::skippedBecause($constraints)]} {
- incr ::tcltest::skippedBecause($constraints)
- } else {
- set ::tcltest::skippedBecause($constraints) 1
- }
- return
- }
- } else {
- error "wrong # args: must be \"test name description ?constraints? script expectedAnswer\""
- }
- memory tag $name
- set code [catch {uplevel $script} actualAnswer]
- if {$code != 0 || [string compare $actualAnswer $expectedAnswer] != 0} {
- incr ::tcltest::numTests(Failed)
- set ::tcltest::currentFailure true
- if {[string first b $::tcltest::verbose] == -1} {
- set script ""
- }
- puts stdout "\n==== $name $description FAILED"
- if {$script != ""} {
- puts stdout "==== Contents of test case:"
- puts stdout $script
- }
- if {$code != 0} {
- if {$code == 1} {
- puts stdout "==== Test generated error:"
- puts stdout $actualAnswer
- } elseif {$code == 2} {
- puts stdout "==== Test generated return exception; result was:"
- puts stdout $actualAnswer
- } elseif {$code == 3} {
- puts stdout "==== Test generated break exception"
- } elseif {$code == 4} {
- puts stdout "==== Test generated continue exception"
- } else {
- puts stdout "==== Test generated exception $code; message was:"
- puts stdout $actualAnswer
- }
- } else {
- puts stdout "---- Result was:\n$actualAnswer"
- }
- puts stdout "---- Result should have been:\n$expectedAnswer"
- puts stdout "==== $name FAILED\n"
- } else {
- incr ::tcltest::numTests(Passed)
- if {[string first p $::tcltest::verbose] != -1} {
- puts stdout "++++ $name PASSED"
- }
- }
-}
-
-# ::tcltest::dotests --
-#
-# takes two arguments--the name of the test file (such
-# as "parse.test"), and a pattern selecting the tests you want to
-# execute. It sets ::tcltest::matching to the second argument, calls
-# "source" on the file specified in the first argument, and restores
-# ::tcltest::matching to its pre-call value at the end.
-#
-# Arguments:
-# file name of tests file to source
-# args pattern selecting the tests you want to execute
-#
-# Results:
-# none
-
-proc ::tcltest::dotests {file args} {
- set savedTests $::tcltest::match
- set ::tcltest::match $args
- source $file
- set ::tcltest::match $savedTests
-}
-
-proc ::tcltest::openfiles {} {
- if {[catch {testchannel open} result]} {
- return {}
- }
- return $result
-}
-
-proc ::tcltest::leakfiles {old} {
- if {[catch {testchannel open} new]} {
- return {}
- }
- set leak {}
- foreach p $new {
- if {[lsearch $old $p] < 0} {
- lappend leak $p
- }
- }
- return $leak
-}
-
-set ::tcltest::saveState {}
-
-proc ::tcltest::saveState {} {
- uplevel #0 {set ::tcltest::saveState [list [info procs] [info vars]]}
-}
-
-proc ::tcltest::restoreState {} {
- foreach p [info procs] {
- if {[lsearch [lindex $::tcltest::saveState 0] $p] < 0} {
- rename $p {}
- }
- }
- foreach p [uplevel #0 {info vars}] {
- if {[lsearch [lindex $::tcltest::saveState 1] $p] < 0} {
- uplevel #0 "unset $p"
- }
- }
-}
-
-proc ::tcltest::normalizeMsg {msg} {
- regsub "\n$" [string tolower $msg] "" msg
- regsub -all "\n\n" $msg "\n" msg
- regsub -all "\n\}" $msg "\}" msg
- return $msg
-}
-
-# makeFile --
-#
-# Create a new file with the name <name>, and write <contents> to it.
-#
-# If this file hasn't been created via makeFile since the last time
-# cleanupTests was called, add it to the $filesMade list, so it will
-# be removed by the next call to cleanupTests.
-#
-proc ::tcltest::makeFile {contents name} {
- set fd [open $name w]
- fconfigure $fd -translation lf
- if {[string index $contents [expr {[string length $contents] - 1}]] == "\n"} {
- puts -nonewline $fd $contents
- } else {
- puts $fd $contents
- }
- close $fd
-
- set fullName [file join [pwd] $name]
- if {[lsearch -exact $::tcltest::filesMade $fullName] == -1} {
- lappend ::tcltest::filesMade $fullName
- }
-}
-
-proc ::tcltest::removeFile {name} {
- file delete $name
-}
-
-# makeDirectory --
-#
-# Create a new dir with the name <name>.
-#
-# If this dir hasn't been created via makeDirectory since the last time
-# cleanupTests was called, add it to the $directoriesMade list, so it will
-# be removed by the next call to cleanupTests.
-#
-proc ::tcltest::makeDirectory {name} {
- file mkdir $name
-
- set fullName [file join [pwd] $name]
- if {[lsearch -exact $::tcltest::filesMade $fullName] == -1} {
- lappend ::tcltest::filesMade $fullName
- }
-}
-
-proc ::tcltest::removeDirectory {name} {
- file delete -force $name
-}
-
-proc ::tcltest::viewFile {name} {
- global tcl_platform
- if {($tcl_platform(platform) == "macintosh") || \
- ($::tcltest::testConfig(unixExecs) == 0)} {
- set f [open $name]
- set data [read -nonewline $f]
- close $f
- return $data
- } else {
- exec cat $name
- }
-}
-
-#
-# Construct a string that consists of the requested sequence of bytes,
-# as opposed to a string of properly formed UTF-8 characters.
-# This allows the tester to
-# 1. Create denormalized or improperly formed strings to pass to C procedures
-# that are supposed to accept strings with embedded NULL bytes.
-# 2. Confirm that a string result has a certain pattern of bytes, for instance
-# to confirm that "\xe0\0" in a Tcl script is stored internally in
-# UTF-8 as the sequence of bytes "\xc3\xa0\xc0\x80".
-#
-# Generally, it's a bad idea to examine the bytes in a Tcl string or to
-# construct improperly formed strings in this manner, because it involves
-# exposing that Tcl uses UTF-8 internally.
-
-proc ::tcltest::bytestring {string} {
- encoding convertfrom identity $string
-}
-
-# Locate tcltest executable
-
-if {![info exists tk_version]} {
- set tcltest [info nameofexecutable]
-
- if {$tcltest == "{}"} {
- set tcltest {}
- }
-}
-
-set ::tcltest::testConfig(stdio) 0
-catch {
- catch {file delete -force tmp}
- set f [open tmp w]
- puts $f {
- exit
- }
- close $f
-
- set f [open "|[list $tcltest tmp]" r]
- close $f
-
- set ::tcltest::testConfig(stdio) 1
-}
-catch {file delete -force tmp}
-
-# Deliberately call the socket with the wrong number of arguments. The error
-# message you get will indicate whether sockets are available on this system.
-
-catch {socket} msg
-set ::tcltest::testConfig(socket) \
- [expr {$msg != "sockets are not available on this system"}]
-
-#
-# Internationalization / ISO support procs -- dl
-#
-
-if {[info commands testlocale]==""} {
-
- # No testlocale command, no tests...
- # (it could be that we are a sub interp and we could just load
- # the Tcltest package but that would interfere with tests
- # that tests packages/loading in slaves...)
-
- set ::tcltest::testConfig(hasIsoLocale) 0
-} else {
- proc ::tcltest::set_iso8859_1_locale {} {
- set ::tcltest::previousLocale [testlocale ctype]
- testlocale ctype $::tcltest::isoLocale
- }
-
- proc ::tcltest::restore_locale {} {
- testlocale ctype $::tcltest::previousLocale
- }
-
- if {![info exists ::tcltest::isoLocale]} {
- set ::tcltest::isoLocale fr
- switch $tcl_platform(platform) {
- "unix" {
-
- # Try some 'known' values for some platforms:
-
- switch -exact -- $tcl_platform(os) {
- "FreeBSD" {
- set ::tcltest::isoLocale fr_FR.ISO_8859-1
- }
- HP-UX {
- set ::tcltest::isoLocale fr_FR.iso88591
- }
- Linux -
- IRIX {
- set ::tcltest::isoLocale fr
- }
- default {
-
- # Works on SunOS 4 and Solaris, and maybe others...
- # define it to something else on your system
- #if you want to test those.
-
- set ::tcltest::isoLocale iso_8859_1
- }
- }
- }
- "windows" {
- set ::tcltest::isoLocale French
- }
- }
- }
-
- set ::tcltest::testConfig(hasIsoLocale) \
- [string length [::tcltest::set_iso8859_1_locale]]
- ::tcltest::restore_locale
-}
-
-#
-# procedures that are Tk specific
-#
-
-if {[info exists tk_version]} {
-
- # If the main window isn't already mapped (e.g. because the tests are
- # being run automatically) , specify a precise size for it so that the
- # user won't have to position it manually.
-
- if {![winfo ismapped .]} {
- wm geometry . +0+0
- update
- }
-
- # The following code can be used to perform tests involving a second
- # process running in the background.
-
- # Locate the tktest executable
-
- set ::tcltest::tktest [info nameofexecutable]
- if {$::tcltest::tktest == "{}"} {
- set ::tcltest::tktest {}
- puts stdout \
- "Unable to find tktest executable, skipping multiple process tests."
- }
-
- # Create background process
-
- proc ::tcltest::setupbg args {
- if {$::tcltest::tktest == ""} {
- error "you're not running tktest so setupbg should not have been called"
- }
- if {[info exists ::tcltest::fd] && ($::tcltest::fd != "")} {
- cleanupbg
- }
-
- # The following code segment cannot be run on Windows prior
- # to Tk 8.1b3 due to a channel I/O bug (bugID 1495).
-
- global tcl_platform
- set ::tcltest::fd [open "|[list $::tcltest::tktest -geometry +0+0 -name tktest] $args" r+]
- puts $::tcltest::fd "puts foo; flush stdout"
- flush $::tcltest::fd
- if {[gets $::tcltest::fd data] < 0} {
- error "unexpected EOF from \"$::tcltest::tktest\""
- }
- if {[string compare $data foo]} {
- error "unexpected output from background process \"$data\""
- }
- fileevent $::tcltest::fd readable bgReady
- }
-
- # Send a command to the background process, catching errors and
- # flushing I/O channels
-
- proc ::tcltest::dobg {command} {
- puts $::tcltest::fd "catch [list $command] msg; update; puts \$msg; puts **DONE**; flush stdout"
- flush $::tcltest::fd
- set ::tcltest::bgDone 0
- set ::tcltest::bgData {}
- tkwait variable ::tcltest::bgDone
- set ::tcltest::bgData
- }
-
- # Data arrived from background process. Check for special marker
- # indicating end of data for this command, and make data available
- # to dobg procedure.
-
- proc ::tcltest::bgReady {} {
- set x [gets $::tcltest::fd]
- if {[eof $::tcltest::fd]} {
- fileevent $::tcltest::fd readable {}
- set ::tcltest::bgDone 1
- } elseif {$x == "**DONE**"} {
- set ::tcltest::bgDone 1
- } else {
- append ::tcltest::bgData $x
- }
- }
-
- # Exit the background process, and close the pipes
-
- proc ::tcltest::cleanupbg {} {
- catch {
- puts $::tcltest::fd "exit"
- close $::tcltest::fd
- }
- set ::tcltest::fd ""
- }
-
- # Clean up focus after using generate event, which
- # can leave the window manager with the wrong impression
- # about who thinks they have the focus. (BW)
-
- proc ::tcltest::fixfocus {} {
- catch {destroy .focus}
- toplevel .focus
- wm geometry .focus +0+0
- entry .focus.e
- .focus.e insert 0 "fixfocus"
- pack .focus.e
- update
- focus -force .focus.e
- destroy .focus
- }
-}
-
-# threadReap --
-#
-# Kill all threads except for the main thread.
-# Do nothing if testthread is not defined.
-#
-# Arguments:
-# none.
-#
-# Results:
-# Returns the number of existing threads.
-
-if {[info commands testthread] != {}} {
- proc ::tcltest::threadReap {} {
- testthread errorproc ThreadNullError
- while {[llength [testthread names]] > 1} {
- foreach tid [testthread names] {
- if {$tid != $::tcltest::mainThread} {
- catch {testthread send -async $tid {testthread exit}}
- update
- }
- }
- }
- testthread errorproc ThreadError
- return [llength [testthread names]]
- }
-} else {
- proc ::tcltest::threadReap {} {
- return 1
- }
-}
-
-# Need to catch the import because it fails if defs.tcl is sourced
-# more than once.
-
-catch {namespace import ::tcltest::*}
-return
diff --git a/sandbox/fvwm.xbm b/sandbox/fvwm.xbm
deleted file mode 100644
index 82c76c4..0000000
--- a/sandbox/fvwm.xbm
+++ /dev/null
@@ -1,21 +0,0 @@
-#define fvwm_width 58
-#define fvwm_height 26
-static char fvwm_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xfc, 0x1b, 0xd8, 0xc0, 0xc0, 0xe6, 0x38, 0x00, 0xfc, 0x1b, 0xcc, 0xe0,
- 0x60, 0xf7, 0x7d, 0x00, 0x30, 0x18, 0xcc, 0xe0, 0x60, 0xb3, 0x6d, 0x00,
- 0x30, 0x38, 0xc6, 0xf1, 0x31, 0x9b, 0x67, 0x00, 0x30, 0x30, 0x86, 0xb1,
- 0x31, 0xcf, 0x73, 0x00, 0x38, 0x30, 0x83, 0x99, 0x99, 0xc7, 0x31, 0x00,
- 0x38, 0x30, 0x83, 0x99, 0x99, 0xc3, 0x30, 0x00, 0x18, 0xb0, 0x81, 0x8d,
- 0x8d, 0xc1, 0x30, 0x00, 0x18, 0xb0, 0x81, 0x8d, 0x8d, 0xc1, 0x30, 0x00,
- 0x1c, 0xf0, 0x80, 0x87, 0xc7, 0xe0, 0x38, 0x00, 0x1c, 0x60, 0x00, 0x03,
- 0xc3, 0x60, 0x18, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00};
diff --git a/sandbox/lines.pl b/sandbox/lines.pl
deleted file mode 100644
index 5e7fc6e..0000000
--- a/sandbox/lines.pl
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/usr/bin/perl -w
-
-use Tk;
-use Tk::Zinc;
-
-$mw = MainWindow->new();
-
-$top = 1;
-$zinc = $mw->Zinc(-render => 1,
- -borderwidth => 0,
- -highlightthickness => 0,
- -relief => 'sunken',
- -takefocus => 1,
-# -tile => $papier
- );
-$zinc->pack(-expand => 1, -fill => 'both');
-$zinc->configure(-width => 500, -height => 500);
-
-print "coucou\n";
-$view = $zinc->add('group', $top, -tags => "controls");
-$mp3 = $zinc->add('curve', $view, [20, 280, 100, 430, 200, 430],
- -linewidth => 9,
- -closed => 0,
- -linestyle => 'dashed',
- -joinstyle => 'round',
-# -firstend => [3, 12, 8],
-# -lastend => "12 12 8",
- -capstyle => 'round',
- -linecolor => 'red:100');
-
-$mw->Tk::bind('<p>', sub { print "perfs: ", join(',', $zinc->monitor()), "\n" });
-$mw->Tk::bind('<t>', sub { $zinc->remove($mp3); });
-$mw->Tk::bind('<q>', sub { exit(0); });
-$zinc->focusFollowsMouse();
-MainLoop();
diff --git a/sandbox/logo.gif b/sandbox/logo.gif
deleted file mode 100644
index ce78abd..0000000
--- a/sandbox/logo.gif
+++ /dev/null
Binary files differ
diff --git a/sandbox/smooth.tcl b/sandbox/smooth.tcl
deleted file mode 100644
index 9260f7b..0000000
--- a/sandbox/smooth.tcl
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/usr/local/bin/wish -f
-
-load ../tkzinc3.2.so
-package require Img
-
-set top 1
-set points "50 -150 100 -50 270 -130 220 -200 200 -180 180 -300 140 -320 70 -300"
-set lw 3
-
-set r [zinc .r -backcolor gray -relief sunken]
-pack .r -expand t -fill both
-.r configure -width 800 -height 500
-.r scale $top 1 -1
-#.r configure -drawbboxes t
-set view [.r add group $top -tags controls]
-
-
-set smooth [.r smooth $points]
-set fit [.r fit $points 0.1]
-
-
-set mp [.r add curve $view $smooth \
- -linecolor yellow -fillcolor tan -fillpattern AlphaStipple8 \
- -tags "bezier" -linewidth $lw]
-set mp2 [.r add curve $view $fit \
- -linecolor yellow -fillcolor tan -fillpattern AlphaStipple8 \
- -tags "bezier" -linewidth $lw]
-set poly [.r add curve $view $points -marker AtcSymbol9]
-set poly2 [.r add curve $view $points -marker AtcSymbol9]
-
-.r translate $mp2 300 0
-.r translate $poly2 300 0
-
-source "controls.tcl"
diff --git a/sandbox/testarc.tcl b/sandbox/testarc.tcl
deleted file mode 100644
index b48b537..0000000
--- a/sandbox/testarc.tcl
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/usr/local/bin/wish -f
-
-load ../tkzinc3.2.so
-package require Img
-
-set top 1
-
-#image create photo logo -file logo.gif
-#image create photo papier -file texture-paper.xpm
-#image create photo penguin -file xpenguin.png
-#image create photo papier -file texture-paper.xpm
-
-set r [zinc .r -backcolor gray -relief sunken -render 0]
-pack .r -expand t -fill both
-.r configure -width 800 -height 500
-#.r configure -drawbboxes t
-.r scale $top 1 -1
-set view [.r add group $top -tags "controls"]
-.r translate $view 200 -200
-set view2 [.r add group $top]
-.r translate $view2 300 -200
-
-set arc [.r add arc $view "50 -10 200 -100" -filled t -closed t -pieslice t \
- -fillcolor "white|darkslateblue" -linewidth 1 \
- -startangle 0 -extent 120]
-#set arc [.r add arc $view "50 -10 200 -100" -filled t -closed t -pieslice t -fillcolor "#ff0000|#00ff00" -linewidth 0]
-#.r add arc $view "60 -20 190 -90" -filled t -closed t -pieslice t -fillcolor "white|darkslateblue" -linewidth 1 -linecolor white
-
-#set arc2 [.r clone $arc -linecolor red -firstend "8 10 5"]
-#.r rotate $arc2 10
-#.r translate $arc2 100 -100
-
-#.r add icon $view2 -image penguin
-set cliparc [.r add arc $view "-100 100 100 -100" -filled t \
- -fillcolor tan ]
-.r lower $cliparc
-#.r rotate $cliparc 20 0 0
-#.r translate $cliparc 100 -40
-#.r itemconfigure $view2 -clip $cliparc
-bind .r <1> ".r rotate $cliparc [expr 3.14/3] 0 0"
-source "controls.tcl"
-.r bind $cliparc <1> {puts a}
-puts "[ .r bind $cliparc <1> ]\n"
-
diff --git a/sandbox/testbezier.pl b/sandbox/testbezier.pl
deleted file mode 100644
index 82948fc..0000000
--- a/sandbox/testbezier.pl
+++ /dev/null
@@ -1,190 +0,0 @@
-#!/usr/bin/perl -w
-
-
-use Tk;
-use Tk::Zinc;
-use Controls;
-use Tk::Photo;
-require Tk::PNG;
-
-
-$top = 1;
-$lw = 8;
-$arrow = [8, 10, 6];
-
-#
-# Cap, Filled, Border, Relief, Title
-#
-@show = (
- ['round', 0, 1, 'flat', 'CapRound'],
- ['butt', 0, 1, 'flat', 'CapButt'],
- ['projecting', 0, 1, 'flat', 'CapProjecting'],
- ['round', 0, 1, 'sunken', 'Sunken'],
- ['round', 0, 1, 'raised', 'Raised'],
- ['round', 0, 1, 'groove', 'Groove'],
- ['round', 0, 1, 'ridge', 'Ridge'],
- ['round', 1, 1, 'roundsunken', 'RoundSunken'],
- ['round', 1, 1, 'roundraised', 'RoundRaised'],
- ['round', 1, 1, 'roundgroove', 'RoundGroove'],
- ['round', 1, 1, 'roundridge', 'RoundRidge'],
- ['round', 1, 1, 'sunkenrule', 'SunkenRule'],
- ['round', 1, 1, 'raisedrule', 'RaisedRule'],
- ['round', 1, 0, 'flat', 'Fill'],
- ['round', 1, 1, 'flat', 'FillBorder']);
-
-$mw = MainWindow->new();
-#$logo = $mw->Photo(-file => "logo.gif");
-$papier = $mw->Photo(-file => "texture-paper.xpm");
-
-$zinc = $mw->Zinc(-render => 1,
- -lightangle => 120,
- -borderwidth => 0,
- -highlightthickness => 0,
- -relief => 'sunken',
- -takefocus => 1,
- -backcolor => 'red'
- # -tile => $papier
- );
-$zinc->pack(-expand => 1, -fill => 'both');
-$zinc->configure(-width => 500, -height => 500);
-$zinc->scale($top, 1, -1);
-
-$view = $zinc->add('group', $top,
- -tags => 'controls');
-$clipbez = $zinc->add('bezier', $view, [20, -20,
- 890, -20,
- 890, -900,
- 20, -400],
- -linewidth => 0,
- -filled => 1,
- -fillcolor => 'tan');
-#$zinc->itemconfigure($view,
-# -clip => $clipbez);
-
-#
-# Create the model
-#
-$model = $zinc->add('group', $view);
-$mp = $zinc->add('bezier', $model, [50, -150,
- 100, -50,
- 270, -130,
- 220, -200,
- 200, -180,
- 180, -300,
- 140, -160,
- 70, -300],
- -fillcolor => 'tan',
- -tags => 'bezier',
- -linewidth =>$lw);
-#$zinc->add('rectangle', $model, [50, -150, 100, -50]);
-@bbox = $zinc->bbox($mp);
-@bbox = $zinc->transform($model, \@bbox);
-$x = ($bbox[2] + $bbox[0]) / 2;
-$y = $bbox[1] + 5;
-$zinc->add('text', $model,
- -text => 'CapRound',
- -color => 'blue',
- -alignment => 'center',
- -anchor => 's',
- -tags => 'title',
- -position => [$x, $y]);
-
-#
-# Now clone for each variation on the polygon
-#
-$col = 0;
-$row = 0;
-foreach $current (@show) {
- ($cap, $filled, $border, $relief, $title) = @{$current};
- $grp = $zinc->clone($model);
- $zinc->translate($grp, $col * 240, $row * (-290 - (2 * $lw)));
- $zinc->itemconfigure($zinc->find('withtag', "$grp*bezier"),
- -capstyle => $cap,
- -filled => $filled,
- -linewidth => $border ? $lw : 0,
- -relief => $relief,
- -linecolor => $relief eq 'flat' ? 'yellow' : 'tan');
- $zinc->itemconfigure($zinc->find('withtag', "$grp*title"),
- -text => $title);
- $col++;
- if ($col >= 4) {
- $col = 0;
- $row++;
- }
-}
-
-#
-# Suppress the model
-#
-$zinc->remove($model);
-
-my @coords = (
-10, 0, 40, 0, 70, 0,
-70, 0, 80, 0, 80, 10,
-80, 10, 80, 40, 80, 70,
-80, 70, 80, 80, 70, 80,
-70, 80, 40, 80, 10, 80,
-10, 80, 0, 80, 0, 70,
-0, 70, 0, 40, 0, 10,
-0, 10, 0, 0, 10, 0);
-$zinc->add('bezier', $view, \@coords);
-
-#
-# Some optional graphic features
-$closed = 0;
-#set smooth 0
-$arrows = 'none';
-
-sub toggle_arrows {
- if ($arrows eq 'none') {
- $arrows = 'first';
- $f = $arrow;
- $l = '';
- }
- elsif ($arrows eq 'first') {
- $arrows = 'last';
- $f = '';
- $l = $arrow;
- }
- elsif ($arrows eq 'last') {
- $arrows = 'both';
- $f = $arrow;
- $l = $arrow;
- }
- elsif ($arrows eq 'both') {
- $arrows = 'none';
- $f = '';
- $l = '';
- }
- $zinc->itemconfigure('bezier',
- -firstend => $f,
- -lastend => $l)
-}
-
-
-sub toggle_closed {
- $closed = !$closed;
- foreach $ curve ($zinc->find('withtag', 'bezier')) {
- if ($closed) {
- @coords = $zinc->coords($curve, 0, 0);
- $zinc->coords($curve, 'add', \@coords);
- }
- else {
- $zinc->coords($curve, 'remove', -1)
- }
- }
-}
-
-$zinc->Tk::focus();
-
-$zinc->Tk::bind('<a>', \&toggle_arrows);
-$zinc->Tk::bind('<c>', \&toggle_closed);
-
-$zinc->Tk::bind('<Shift-1>',
- sub {my $ev = $zinc->XEvent();
- my $it = $zinc->find('closest', $ev->x, $ev->y);
- print "$it ", $zinc->verticeat($it, $ev->x, $ev->y), "\n"});
-$zinc->Tk::bind('<Shift-ButtonRelease-1>', sub {Tk::break});
-
-new Controls($zinc);
-MainLoop();
diff --git a/sandbox/testbezier.tcl b/sandbox/testbezier.tcl
deleted file mode 100644
index 4b1af0b..0000000
--- a/sandbox/testbezier.tcl
+++ /dev/null
@@ -1,131 +0,0 @@
-#!/usr/local/bin/wish -f
-
-load ../tkzinc3.2.so
-package require Img
-
-set top 1
-set lw 8
-set arrow "8 10 6"
-
-
-#
-# Cap Filled Border Relief Title
-#
-set show {\
- {round f 1 flat CapRound}\
- {butt f 1 flat CapButt}\
- {projecting f 1 flat CapProjecting}\
- {round f 1 sunken Sunken}\
- {round f 1 raised Raised}\
- {round f 1 groove Groove}\
- {round f 1 ridge Ridge}\
- {round t 1 sunken FilledSunken}\
- {round t 1 raised FilledRaised}\
- {round t 1 groove FilledGroove}\
- {round t 1 ridge FilledRidge}\
- {round t 0 flat Fill}\
- {round t 1 flat FillBorder}}
-
-image create photo logo -file /usr/share/toccata/images/logo.gif
-#image create photo papier -file /usr/share/toccata/images/dgtexture-dragstrip.xpm
-
-set r [zinc .r -backcolor gray -relief sunken]
-pack .r -expand t -fill both
-.r configure -width 1024 -height 800
-.r scale $top 1 -1
-#.r configure -drawbboxes t
-set view [.r add group $top -tags controls]
-
-#
-# Create the model
-#
-set model [.r add group $view]
-set mp [.r add bezier $model "50 -150 100 -50 270 -130 220 -200 200 -180 180 -300 140 -160 70 -300" \
- -linecolor yellow -fillcolor tan -fillpattern AlphaStipple8 \
- -tags "bezier" -linewidth $lw]
-#.r add rectangle $model "50 -150 100 -50"
-set bbox [.r transform $model [.r bbox $mp]]
-set x [expr ([lindex $bbox 2] + [lindex $bbox 0]) / 2]
-set y [expr [lindex $bbox 1] + 5]
-.r add text $model -text "CapRound" -color blue -alignment center -anchor s -tags "title" \
- -position "$x $y"
-
-#
-# Now clone for each variation on the polygon
-#
-set col 0
-set row 0
-foreach current $show {
- foreach {cap filled border relief title} $current {
- set grp [.r clone $model]
- .r translate $grp [expr $col * 240] [expr $row * (-290 - (2 * $lw))]
- .r itemconfigure [.r find withtag "bezier" $grp] \
- -capstyle $cap -filled $filled \
- -linewidth [expr $border ? $lw : 0] \
- -relief $relief -linecolor [expr $relief == flat ? yellow : tan]
- .r itemconfigure [.r find withtag "title" $grp] -text $title
- incr col
- if {$col >= 4} {
- set col 0
- incr row
- }
- }
-}
-
-#
-# Suppress the model
-#
-.r remove $model
-
-
-#
-# Some optional graphic features
-set closed 0
-#set smooth 0
-set arrows none
-
-proc toggle_arrows { } {
- global arrows arrow
- if {$arrows == "none"} {
- set arrows first
- set f $arrow
- set l ""
- } elseif {$arrows == "first"} {
- set arrows last
- set f ""
- set l $arrow
- } elseif {$arrows == "last"} {
- set arrows both
- set f $arrow
- set l $arrow
- } elseif {$arrows == "both"} {
- set arrows none
- set f ""
- set l ""
- }
- .r itemconfigure bezier -firstend $f -lastend $l
-}
-
-
-proc toggle_closed { } {
- global closed
- set closed [expr ! $closed]
- foreach curve [.r find withtag "bezier"] {
- if {$closed} {
- .r coords $curve add [.r coords $curve 0]
- } {
- .r coords $curve remove -1
- }
- }
-
-}
-
-focus .r
-
-bind .r "<a>" toggle_arrows
-bind .r "<c>" toggle_closed
-
-bind .r "<Shift-1>" {set it [.r find closest %x %y]; puts "$it [.r verticeat $it %x %y]"}
-bind .r "<Shift-ButtonRelease-1>" {break}
-
-source "controls.tcl"
diff --git a/sandbox/testbitmaps.tcl b/sandbox/testbitmaps.tcl
deleted file mode 100644
index 27a519b..0000000
--- a/sandbox/testbitmaps.tcl
+++ /dev/null
@@ -1,86 +0,0 @@
-#!/usr/local/bin/wish -f
-
-lappend auto_path ..
-package require Tkzinc
-package require Img
-
-set r [zinc .r -render 1 -backcolor gray -relief sunken]
-set top 1
-pack .r -expand t -fill both
-.r configure -width 500 -height 800
-
-set r [.r add rectangle $top "30 50 80 100" -filled t -fillpattern AlphaStipple0 -linewidth 1]
-.r translate $r -55 -75
-.r rotate $r 45
-.r translate $r 55 75
-
-.r add text $top -position "50 110" -text "0"
-.r add rectangle $top "100 50 150 100" -filled t -fillpattern AlphaStipple1
-.r add text $top -position "120 110" -text "1"
-.r add rectangle $top "170 50 220 100" -filled t -fillpattern AlphaStipple2
-.r add text $top -position "190 110" -text "2"
-.r add rectangle $top "240 50 290 100" -filled t -fillpattern AlphaStipple3
-.r add text $top -position "260 110" -text "3"
-.r add rectangle $top "310 50 360 100" -filled t -fillpattern AlphaStipple4
-.r add text $top -position "330 110" -text "4"
-.r add rectangle $top "380 50 430 100" -filled t -fillpattern AlphaStipple5
-.r add text $top -position "400 110" -text "5"
-
-.r add rectangle $top "30 150 80 200" -filled t -fillpattern AlphaStipple6
-.r add text $top -position "50 210" -text "6"
-.r add rectangle $top "100 150 150 200" -filled t -fillpattern AlphaStipple7
-.r add text $top -position "120 210" -text "7"
-.r add rectangle $top "170 150 220 200" -filled t -fillpattern AlphaStipple8
-.r add text $top -position "190 210" -text "8"
-.r add rectangle $top "240 150 290 200" -filled t -fillpattern AlphaStipple9
-.r add text $top -position "260 210" -text "9"
-.r add rectangle $top "310 150 360 200" -filled t -fillpattern AlphaStipple10
-.r add text $top -position "330 210" -text "10"
-.r add rectangle $top "380 150 430 200" -filled t -fillpattern AlphaStipple11
-.r add text $top -position "400 210" -text "11"
-
-.r add rectangle $top "100 250 150 300" -filled t -fillpattern AlphaStipple12
-.r add text $top -position "120 310" -text "12"
-.r add rectangle $top "170 250 220 300" -filled t -fillpattern AlphaStipple13
-.r add text $top -position "190 310" -text "13"
-.r add rectangle $top "240 250 290 300" -filled t -fillpattern AlphaStipple14
-.r add text $top -position "260 310" -text "14"
-.r add rectangle $top "310 250 360 300" -filled t -fillpattern AlphaStipple15
-.r add text $top -position "330 310" -text "15"
-
-.r add text $top -position "180 360" -text "AlphaStipple" \
- -font "-*-lucida-bold-r-normal-*-14-*-*-*-*-*-*-*"
-
-for {set i 0} {$i < 22} {incr i} {
- set num [expr $i + 1]
- .r add waypoint $top 0 \
- -position "[expr 40 + ($i % 8)*60] [expr 420 + ($i / 8)*45]" \
- -symbol "AtcSymbol$num"
- .r add text $top \
- -position "[expr 36 + ($i % 8)*60] [expr 430 + ($i / 8)*45]" \
- -text "$num" \
- -font "-*-helvetica-medium-r-*-*-*-120-*-*-*-*-*-*"
-}
-
-.r add text $top -position "180 560" -text "AtcSymbol" \
- -font "-*-lucida-bold-r-normal-*-14-*-*-*-*-*-*-*"
-
-
-set im [image create bitmap toto -background "red" -file fvwm.xbm]
-set icim [.r add icon 1 -image $im -position {0 0}]
-.r rotate $icim 20
-.r scale $icim 1.2 1.2
-.r translate $icim 50 320
-#.r add icon 1 -image $im -position {300 10}
-#.r add rectangle 1 {10 10 100 100} -tile $im -filled 1
-#$im configure -background red
-
-set icbit [.r add icon 1 -image @fvwm.xbm -position {100 400}]
-
-#.r bind $icbit <Enter> ".r itemconfigure $icbit -color red; \
-# $im configure -file fvwm.xbm -foreground black"
-#.r bind $icbit <Leave> ".r itemconfigure $icbit -color black; \
-# $im configure -file trash.xbm -foreground red "
-
-#.r bind $icim <Enter> "$im configure -background black"
-#.r bind $icim <Leave> "$im configure -background red"
diff --git a/sandbox/testicon.tcl b/sandbox/testicon.tcl
deleted file mode 100644
index fd8ba39..0000000
--- a/sandbox/testicon.tcl
+++ /dev/null
@@ -1,102 +0,0 @@
-#!/usr/local/bin/wish -f
-
-load ../tkzinc3.2.so
-package require Img
-
-set top 1
-
-image create photo penguin -file xpenguin.png
-image create photo bouton -file bouton.xpm
-image create photo boutond -file bouton-down.xpm
-set mask "fvwm.xbm"
-
-set r [zinc .r -backcolor gray -relief sunken -render 1 -borderwidth 20]
-pack .r -expand t -fill both
-.r configure -width 800 -height 500
-#.r configure -drawbboxes t
-.r scale $top 1 -1
-set view [.r add group $top -tags "controls"]
-
-proc maskicon {x y group mask color anchor} {
- .r add icon $group -mask "@$mask" -position "$x $y" -anchor $anchor -color $color
- .r add rectangle $group [list [expr $x - 3.0] [expr $y - 3.0] \
- [expr $x + 3.0] [expr $y + 3.0]] -filled 1 -fillcolor red
-}
-
-proc imageicon {x y group image anchor} {
- .r add icon $group -image $image -position "$x $y" -anchor $anchor
- .r add rectangle $group [list [expr $x - 3.0] [expr $y - 3.0] \
- [expr $x + 3.0] [expr $y + 3.0]] -filled 1 -fillcolor red
-}
-
-set x 50.0
-set y -100.0
-maskicon $x $y $view $mask yellow sw
-set x [expr $x + 100.0]
-maskicon $x $y $view $mask pink s
-set x [expr $x + 100.0]
-maskicon $x $y $view $mask violet se
-set x 50
-set y -150
-maskicon $x $y $view $mask lightblue w
-set x [expr $x + 100.0]
-maskicon $x $y $view $mask blue center
-set x [expr $x + 100.0]
-maskicon $x $y $view $mask darkblue e
-set x 50.0
-set y -200.0
-maskicon $x $y $view $mask violet nw
-set x [expr $x + 100.0]
-maskicon $x $y $view $mask pink n
-set x [expr $x + 100.0]
-maskicon $x $y $view $mask yellow ne
-set x2 500.0
-set y2 -300.0
-imageicon $x2 $y2 $view penguin center
-
-.r add icon $view -image bouton -position "$x2 $y2" -anchor center
-.r add icon $view -image boutond -position [list [expr $x2 + 50] $y2] -anchor center
-.r add text $view -text essai -position "$x2 $y2"
-
-#
-# Clip
-#
-puts "crée les clips"
-set clip [.r add rectangle $view "50 -10 600 -300" -filled t \
- -linewidth 0 -fillcolor darkgray]
-#.r rotate $clip [expr 3.14159 / 4]; #bug le rectangle forme un bonnet
-# d'ane sous certains angles.
-.r lower $clip
-.r itemconfigure $view -clip $clip
-
-.r addtag test withtype icon
-.r bind test "<Shift-ButtonPress-1>" "testpress %x %y"
-.r bind test "<Shift-ButtonRelease-1>" testrelease
-
-proc testpress {lx ly} {
- global testx testy
- set testx $lx
- set testy $ly
- .r bind test "<Motion>" "testmotion %x %y"
-}
-
-proc testmotion {lx ly} {
- global testx testy
- set it [.r find withtag test]
- if {$it != ""} {
- set it [.r group [lindex $it 0]]
- }
- set res [.r transform $it "$lx $ly $testx $testy"]
- set nx [lindex $res 0]
- set ny [lindex $res 1]
- set ox [lindex $res 2]
- set oy [lindex $res 3]
- .r translate current [expr $nx - $ox] [expr $ny - $oy]
- set testx $lx
- set testy $ly
-}
-proc testrelease {} {
- .r bind test "<Motion>" ""
-}
-
-source controls.tcl
diff --git a/sandbox/testplug.pl b/sandbox/testplug.pl
deleted file mode 100644
index 418c91a..0000000
--- a/sandbox/testplug.pl
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/usr/bin/perl
-
-use Tk;
-
-$mw = MainWindow->new();
-
-$zinc = $mw->Zinc(-backcolor => 'gray',
- -relief => 'sunken',
- -width => 800,
- -height => 500)->pack(-expand => 1,
- -fill => 'both');
-$top = 1;
-#$ent = $zinc->Entry();
-#$entryitem = $zinc->add('window', $top,
-# -window => $ent,
-# -position => [100, 100]);
-$dcontainer = $zinc->Frame(-container => 1);
-$did = $dcontainer->id();
-$vcontainer = $zinc->Frame(-container => 1);
-$vid = $vcontainer->id();
-#print "container id is $id\n";
-
-$dlabel = $zinc->add('text', $top,
- -text => "Digistrips",
- -position => [150, 30]);
-$zinc->bind($dlabel, '<1>', sub { $zinc->itemconfigure($vlabel, -color => 'black');
- $zinc->itemconfigure($dlabel, -color => 'red');
- $zinc->itemconfigure($vcontitem, -visible => 0);
- $zinc->itemconfigure($dcontitem, -visible => 1); });
-$vlabel = $zinc->add('text', $top,
- -text => "Virtuosi",
- -position => [250, 30]);
-$zinc->bind($vlabel, '<1>', sub { $zinc->itemconfigure($dlabel, -color => 'black');
- $zinc->itemconfigure($vlabel, -color => 'red');
- $zinc->itemconfigure($dcontitem, -visible => 0);
- $zinc->itemconfigure($vcontitem, -visible => 1); });
-$dcontitem = $zinc->add('window', $top,
- -window => $dcontainer,
- -position => [50, 75],
- -visible => 0);
-$vcontitem = $zinc->add('window', $top,
- -window => $vcontainer,
- -position => [50, 75],
- -visible => 0);
-
-$mw->update();
-
-system("digistripsIII -stan --use $did -style standalone-1024x768 &");
-system("virtuosi -g 1024x768 -use $vid &");
-
-MainLoop();
diff --git a/sandbox/testpoly.tcl b/sandbox/testpoly.tcl
deleted file mode 100644
index 2a16288..0000000
--- a/sandbox/testpoly.tcl
+++ /dev/null
@@ -1,157 +0,0 @@
-#!/usr/local/bin/wish -f
-
-lappend auto_path ..
-package require Tkzinc
-package require Img
-
-set top 1
-set lw 8
-set marker AtcSymbol9
-set arrow "8 10 6"
-
-
-#
-# Cap Join Filled Border Relief Title
-#
-set show {\
- {round round f 1 flat JoinRound}\
- {round bevel f 1 flat JoinBevel}\
- {round miter f 1 flat JoinMiter}\
- {butt round f 1 flat CapButt}\
- {projecting round f 1 flat CapProjecting}\
- {round round f 1 sunken Sunken}\
- {round round f 1 raised Raised}\
- {round round f 1 groove Groove}\
- {round round f 1 ridge Ridge}\
- {round round t 1 sunken FilledSunken}\
- {round round t 1 raised FilledRaised}\
- {round round t 1 groove FilledGroove}\
- {round round t 1 ridge FilledRidge}\
- {round round f 0 flat Marker}\
- {round round t 0 flat Fill}\
- {round round t 1 flat FillBorder}}
-
-image create photo logo -file logo.gif
-#image create photo papier -file /usr/share/toccata/images/dgtexture-dragstrip.xpm
-
-set r [zinc .r -backcolor gray -relief sunken -render 0]
-pack .r -expand t -fill both
-.r configure -width 1024 -height 800
-.r scale $top 1 -1
-#.r configure -drawbboxes t
-set view [.r add group $top -tags controls]
-
-#
-# Create the model
-#
-set model [.r add group $view]
-set mp [.r add curve $model "50 -150 100 -50 270 -130 220 -200 200 -180 180 -300 140 -160 70 -300" \
- -linecolor yellow -fillcolor tan -fillpattern AlphaStipple8 \
- -markercolor red -tags "poly" -linewidth $lw]
-.r add rectangle $model "50 -150 100 -50"
-set bbox [.r transform $model [.r bbox $mp]]
-set x [expr ([lindex $bbox 2] + [lindex $bbox 0]) / 2]
-set y [expr [lindex $bbox 1] + 5]
-.r add text $model -text "CapRound" -color blue -alignment center -anchor s -tags "title" \
- -position "$x $y"
-
-#
-# Now clone for each variation on the polygon
-#
-proc linecol { relief } {
- if {[string compare $relief flat]} {
- return yellow
- } else {
- return tan
- }
-}
-
-set col 0
-set row 0
-foreach current $show {
- foreach {cap join filled border relief title} $current {
- set grp [.r clone $model]
- .r translate $grp [expr $col * 240] [expr $row * (-290 - (2 * $lw))]
- .r itemconfigure [.r find withtag "$grp*poly"] \
- -capstyle $cap -joinstyle $join -filled $filled \
- -linewidth [expr $border ? $lw : 0] -relief $relief \
- -linecolor [linecol $relief]
- .r itemconfigure [.r find withtag "$grp*title"] -text $title
- incr col
- if {$col >= 4} {
- set col 0
- incr row
- }
- }
-}
-
-#
-# Suppress the model
-#
-.r remove $model
-
-
-#
-# Some optional graphic features
-set closed 0
-set marks 0
-#set smooth 0
-set arrows none
-
-proc toggle_arrows { } {
- global arrows arrow
- if {$arrows == "none"} {
- set arrows first
- set f $arrow
- set l ""
- } elseif {$arrows == "first"} {
- set arrows last
- set f ""
- set l $arrow
- } elseif {$arrows == "last"} {
- set arrows both
- set f $arrow
- set l $arrow
- } elseif {$arrows == "both"} {
- set arrows none
- set f ""
- set l ""
- }
- .r itemconfigure poly -firstend $f -lastend $l
-}
-
-proc toggle_marks { } {
- global marks marker
- set marks [expr ! $marks]
- if {$marks} {
- .r itemconfigure poly -marker $marker
- } {
- .r itemconfigure poly -marker ""
- }
-}
-
-#proc toggle_smooth { } {
-# global smooth
-# set smooth [expr ! $smooth]
-# .r itemconfigure poly -smoothed $smooth
-#}
-
-proc toggle_closed { } {
- global closed
- set closed [expr ! $closed]
- foreach curve [.r find withtag "poly"] {
- .r itemconfigure $curve -closed $closed
- }
-
-}
-
-focus .r
-
-bind .r "<a>" toggle_arrows
-bind .r "<c>" toggle_closed
-bind .r "<m>" toggle_marks
-
-bind .r "<Shift-1>" {set it [.r find closest %x %y]; puts "$it [.r verticeat $it %x %y]"}
-bind .r "<Shift-ButtonRelease-1>" {break}
-
-source "controls.tcl"
diff --git a/sandbox/testrect.pl b/sandbox/testrect.pl
deleted file mode 100644
index 8a4d399..0000000
--- a/sandbox/testrect.pl
+++ /dev/null
@@ -1,99 +0,0 @@
-#!/usr/bin/perl -w
-
-use Tk;
-use Tk::Zinc;
-
-use Controls;
-
-$mw = MainWindow->new();
-
-
-###################################################
-# creation zinc
-###################################################
-$top = 1;
-$zinc_width = 800;
-$zinc_height = 500;
-
-$zinc = $mw->Zinc(-backcolor => 'gray65', -relief => 'sunken');
-$zinc->pack(-expand => 1, -fill => 'both');
-$zinc->configure(-width => $zinc_width, -height => $zinc_height);
-
-#$zinc->configure(-drawbboxes => 1);
-
-#print "cells ", $zinc->cells(), " visual ", $zinc->visual(), " ", $zinc->visualsavailable(), "\n";
-
-$zinc->scale($top, 1, -1);
-$view = $zinc->add('group', $top, -tags => ["controls"]);
-$zinc->translate($view, 300, -200);
-$view2 = $zinc->add('group', $top);
-$zinc->translate($view2, 100, -50);
-
-
-#$rect0 = $zinc->add('rectangle', $view [100, -105, 200, -305],
-# -filled => t,
-# -fillcolor => "white|cadetblue3");
-
-$color1 = 'darkslateblue';
-$color2 = '#f0ffff';
-$gangle = 0;
-$shades = 8;
-$rect1 = $zinc->add('rectangle', $view, [-50, 100, 50, -100],
- -filled => 1,
- -relief => 'flat',
- -linewidth => 1,
- -fillpattern => 'AlphaStipple7',
- -fillcolor => "$color1|$color2/$gangle%$shades");
-#
-# Mire
-$zinc->add('curve', $view, [-10, 0, 10, 0],
- -linecolor => 'red');
-$zinc->add('curve', $view, [0, -10, 0, 10],
- -linecolor => 'red');
-
-$handle = $zinc->add('arc', $view, [-3, -106, 3, -112],
- -filled => 1,
- -fillcolor => 'red');
-$zinc->bind($handle, '<B1-Motion>', \&adjustcontrol);
-
-sub adjustcontrol {
- my $ev = $zinc->XEvent();
- my $x;
- my $y;
- my ($xo, $yo, $xc, $yc) = $zinc->coords($rect1);
-
- ($x, $y) = $zinc->transform($view, [$ev->x, 0]);
- if ($x < $xo) {
- $x = $xo;
- }
- elsif ($x > $xc) {
- $x = $xc;
- }
- $zinc->coords($handle, [$x - 3, $yc-6, $x + 3, $yc-12]);
- $x = ($x - $xo)*100/($xc-$xo);
- $zinc->itemconfigure($rect1,
- -fillcolor => "$color1 0 $x|$color2/$gangle%$shades");
-}
-
-#
-# 72 61 139 = DarkSlateBlue
-#
-# 240 255 255 = azure
-#
-#set rect2 [.r add rectangle $view "202 -320 302 -350" -filled t -fillcolor darkgray -linewidth 2]
-
-#set rect3 [.r add rectangle $view "250 -100 350 -300" -filled t -relief raised -linewidth 4 -fillcolor "white|cadetblue3" -linecolor white]
-
-#set rect4 [.r add rectangle $view2 "0 0 101 -81" -linewidth 2 -linecolor darkgray -filled t]
-#.r itemconfigure $rect4 -fillcolor "white|darkslateblue"
-
-#set rect5 [.r add rectangle $view2 "0 0 101 -81" -linewidth 2 -linecolor blue -filled t -fillcolor blue -relief sunken]
-#.r translate $rect5 0 -90
-
-
-new Controls($zinc);
-
-MainLoop();
-
-
-1;
diff --git a/sandbox/testrelief.pl b/sandbox/testrelief.pl
deleted file mode 100644
index 79c9a31..0000000
--- a/sandbox/testrelief.pl
+++ /dev/null
@@ -1,73 +0,0 @@
-#!/usr/bin/perl -w
-
-use Tk;
-use Tk::Zinc;
-use Controls;
-
-$top = 1;
-$lw = 8;
-
-$mw = MainWindow->new();
-$zinc = $mw->Zinc(-backcolor => 'gray',
- -relief => 'sunken',
- -lightangle => 120,
- -render => 1);
-$zinc->pack(-expand => 1,
- -fill => 'both');
-$zinc->configure(-width => 1024,
- -height => 800);
-$zinc->scale($top, 1, -1);
-
-$view = $zinc->add('group', $top, -tags => 'controls');
-
-sub polypoints {
- ($ox, $oy, $rad, $n, $startangle) = @_;
-
- $step = 2 * 3.14159 / $n;
- $startangle = $startangle*3.14159/180;
- $coords = [];
- for ($i = 0; $i < $n; $i++) {
- $x = $ox + ($rad * cos($i * $step + $startangle));
- $y = $oy + ($rad * sin($i * $step + $startangle));
- push(@{$coords}, $x, $y);
- }
- push(@{$coords}, $coords->[0], $coords->[1]);
- return $coords
-}
-
-$zinc->add('curve', $view, polypoints(200, -200, 100, 40, 0),
- -relief => 'raised',
- -linewidth => $lw,
- -smoothrelief => 1,
- -fillcolor => 'lightblue',
- -linecolor => 'lightblue',
- -filled => 1);
-
-$zinc->add('curve', $view, polypoints(450, -200, 100, 40, 0),
- -relief => 'raised',
- -linewidth => $lw,
- -smoothrelief => 1,
- -fillcolor => 'tan',
- -linecolor => 'tan',
- -filled => 1);
-
-$zinc->add('curve', $view, polypoints(700, -200, 100, 40, 0),
- -relief => 'sunken',
- -linewidth => $lw,
- -smoothrelief => 1,
- -fillcolor => 'tan',
- -linecolor => 'tan',
- -closed => 1,
- -filled => 1);
-
-$zinc->add('curve', $view, polypoints(200, -450, 100, 7, -45),
- -relief => 'sunken',
- -linewidth => $lw,
- -fillcolor => 'tan',
- -linecolor => 'tan',
- -filled => 1);
-
-
-new Controls($zinc);
-MainLoop();
-
diff --git a/sandbox/testrelief.tcl b/sandbox/testrelief.tcl
deleted file mode 100644
index e75cc71..0000000
--- a/sandbox/testrelief.tcl
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/local/bin/wish -f
-
-load ../tkzinc3.2.so
-
-set top 1
-set lw 8
-
-set r [zinc .r -backcolor gray -relief sunken -lightangle 120 -render 0]
-pack .r -expand t -fill both
-.r configure -width 1024 -height 800
-.r scale $top 1 -1
-
-set view [.r add group $top -tags controls]
-
-proc polypoints { ox oy rad n startangle } {
- set step [expr 2 * 3.14159 / $n]
- set startangle [expr $startangle*3.14159/180]
- set coords ""
- for {set i 0} {$i < $n} {incr i} {
- set x [expr $ox + ($rad * cos($i * $step + $startangle))];
- set y [expr $oy + ($rad * sin($i * $step + $startangle))];
- lappend coords $x $y;
- }
- lappend coords [lindex $coords 0] [lindex $coords 1]
- return $coords
-}
-
-set poly [ .r add curve $view [polypoints 200 -200 100 40 0] \
- -relief raised -linewidth $lw -smoothrelief 1 \
- -fillcolor lightblue -linecolor lightblue -filled t]
-
-set poly [ .r add curve $view [polypoints 450 -200 100 40 0] \
- -relief raised -linewidth $lw \
- -fillcolor tan -linecolor tan -filled t]
-
-set poly [ .r add curve $view [polypoints 700 -200 100 40 0] \
- -relief sunken -linewidth $lw \
- -fillcolor tan -linecolor tan -filled t]
-
-set poly [ .r add curve $view [polypoints 200 -450 100 4 -45] \
- -relief sunken -linewidth $lw \
- -fillcolor tan -linecolor tan -filled t]
-
-
-source "controls.tcl"
diff --git a/sandbox/testshape.pl b/sandbox/testshape.pl
deleted file mode 100644
index 5897912..0000000
--- a/sandbox/testshape.pl
+++ /dev/null
@@ -1,132 +0,0 @@
-#!/usr/bin/perl -w
-
-use Tk;
-use Tk::Zinc;
-use Controls;
-
-$mw = MainWindow->new();
-
-$top = 1;
-$zinc = $mw->Zinc(-render => 1,
- -borderwidth => 0,
-# -fullreshape => 0,
- -relief => 'sunken');
-$zinc->pack(-expand => 1, -fill => 'both');
-$zinc->configure(-width => 500, -height => 500);
-
-$zinc->gname('white:40 0 60|black 50|white 100(0 0', 'oeil');
-$zinc->gname('white:0 0 10|black:100 100/0', 'oeil2');
-$zinc->gname('white:100|black:100(-35 -25', 'boule');
-$zinc->gname('white:100|black:100(-15 -100', 'arrondi');
-$zinc->gname('white:100|black:100/45', 'cyl');
-$zinc->gname('white|black[50 0', 'path');
-
-# $arc = $zinc->add('arc', $top, [50, 50, 200, 100],
-# -visible => 0);
-#$zinc->itemconfigure($top, -clip => $arc);
-
-$view = $zinc->add('group', $top, -tags => "controls");
-# $cv = $zinc->add('curve', $view, [50, 50, 100, 150, 270, 70,
-# 220, 0, 200, 20, 180, 100,
-# 140, 40, 70, 100],
-# -visible => 1,
-# -closed => 1,
-# -filled => 1);
-
-$g1 = $zinc->add('group', $view);
-$zinc->translate($g1, 100, 300);
-$rect = $zinc->add('rectangle', $g1, [-40,-50, 40,50],
- -filled => 1,
- -fillcolor => 'path'
- );
-$g2 = $zinc->add('group', $view);
-$zinc->translate($g2, 200, 300);
-$arc = $zinc->add('arc', $g2, [0,0, 100,100],
- -filled => 1,
- -linecolor => 'white',
- -fillcolor => 'boule',
- -startangle => 120,
- -extent => 120,
- -closed => 1,
- -pieslice => 1,
-# -fillcolor => 'tan'
- );
-$arc2 = $zinc->add('arc', $view, [90,0, 160,50],
- -visible => 0,
- -linewidth => 0,
- -filled => 1,
- -fillcolor => 'brown');
-$g3 = $zinc->add('group', $view);
-$zinc->translate($g3, 300, 300);
-$cv3 = $zinc->add('curve', $g3,
-# [[-50, -40], [0, 0], [-50, 40], [50, 40], [50, -40]],
- [-50, -40, 0, 0, -50, 40, 50, 40, 50, -40],
- -visible => 0,
- -filled => 1,
- -fillcolor => "#ffffff:100 0 28|#66848c:100 80|#7192aa:100 100/270"
-# -fillcolor => 'cyl'
-);
-
-# $rect = $zinc->add('rectangle', $view, [200,230, 220,250],
-# -visible => 1,
-# -linewidth => 2,
-# -relief => 'sunken',
-# -filled => 1,
-# -linecolor => 'white',
-# -fillcolor => 'tan');
-$cv2 = $zinc->add('curve', $view, [],
- -visible => 1,
- -linewidth => 2,
- -linecolor => 'white',
- -fillcolor => 'tan',
- -fillrule => 'positive',
- -relief => 'sunken',
- -closed => 1,
- -filled => 1);
-$text = $zinc->add('text', $view,
- -visible => 1,
- -text => 'Un Texte ICI°°°°°',
- -position => [200, 100],
- -color => '#008000');
-$zinc->contour($cv2, 'add', 1, [[20, 20], [20, 100, 'c'], [120, 100], [120, 20]]);
-$zinc->contour($cv2, 'add', -1, [40, 40, 80, 40, 80, 80, 40, 80]);
-$zinc->contour($cv2, 'add', 1, [60, 50, 60, 60, 70, 60, 70, 50]);
-$zinc->contour($cv2, 'add', -1, [90, 70, 150, 70, 150, 150, 90, 150]);
-$zinc->contour($cv2, 'add', 1, [200, 200, 200, 220, 220, 220, 220, 200]);
-$zinc->contour($cv2, 'add', -1, [100, 10, 180, 10, 180, 60, 100, 60]);
-
-$zinc->contour($cv2, 'add', 1, $arc2);
-$zinc->contour($cv2, 'add', 1, $text);
-
-# $rect2 = $zinc->add('rectangle', $view, [40,81, 80,130],
-# -visible => 1,
-# -linewidth => 1,
-# -relief => 'sunken',
-# -filled => 1,
-# -linecolor => 'white',
-# -fillcolor => 'tan');
-
-new Controls($zinc);
-
-$zinc->Tk::bind('<a>', sub {print "hop\n", $zinc->contour($cv2, 'remove', 1);});
-$zinc->Tk::bind('<b>', sub {my ($x,$y,$c) = $zinc->coords($cv2, 0, 1);
- if ($c eq 'c') {
- $zinc->coords($cv2, 0, 1, [[20, 100]]);
- }
- else {
- $zinc->coords($cv2, 0, 1, [[20, 100, 'c']]);
- }});
-$zinc->Tk::bind('<1>', sub {
- my $ev = $zinc->XEvent();
- my $it = $zinc->find('closest', $ev->x, $ev->y);
- print "Closest: $it\n";
-# my @t = $zinc->vertexat($it, $ev->x, $ev->y);
-# print "VertexAt: ", join(', ', @t), "\n";
- $zinc->bind($cv2, '<1>', sub { print "zou\n";});
- $zinc->coords($cv2, 0, [[100,0]]);
- print $zinc->bind($cv2, '<1>'), "\n";
- });
-
-$zinc->focusFollowsMouse();
-
-MainLoop();
diff --git a/sandbox/testshape.tcl b/sandbox/testshape.tcl
deleted file mode 100644
index 2ed5327..0000000
--- a/sandbox/testshape.tcl
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/usr/local/bin/wish -f
-
-load ../tkzinc3.2.so
-
-set top 1
-
-set r [zinc .r -render 0 -borderwidth 0 -fullreshape 0 -relief sunken]
-pack $r -expand t -fill both
-$r configure -width 500 -height 500
-
-set arc [.r add arc $top "50 50 200 150" -visible 1 -closed 0 -filled 0 -fillcolor white -extent 200 -pieslice 0]
-
-set cv [.r add curve $top "50 50 100 150 270 70 220 0 200 20 180 -100 140 40 70 -100" \
- -visible 0]
-
-.r rotate $arc [expr 3.14/10] 125 100
-
-.r itemconfigure $top -clip $cv
diff --git a/sandbox/testtext.tcl b/sandbox/testtext.tcl
deleted file mode 100644
index 44d3d8f..0000000
--- a/sandbox/testtext.tcl
+++ /dev/null
@@ -1,138 +0,0 @@
-lappend auto_path ..
-
-package require Tkzinc
-package require Img
-
-set mask "/usr/X11R6/include/X11/bitmaps/fvwm.xbm"
-
-set r [zinc .r -backcolor gray -relief sunken \
- -insertbackground red -insertwidth 10 -render 0]
-pack .r -expand t -fill both
-.r configure -width 800 -height 500
-# .r configure -drawbboxes t
-set top [.r add group 1]
-.r addtag controls withtag $top
-
-.r add rectangle $top "-50 0 +50 1" -composescale 0
-.r add rectangle $top "0 -50 1 +50" -composescale 0
-
-set x 50.0
-set y 100.0
-.r add text $top -text "Ancrage Sud Ouest" -position "$x $y" -anchor sw \
- -color yellow
-.r add rectangle $top [list [expr $x - 3.0] [expr $y - 3.0] \
- [expr $x + 3.0] [expr $y + 3.0]] -filled 1 -fillcolor red
-
-set x [expr $x + 200.0]
-.r add text $top -text "Ancrage Sud" -position "$x $y" -anchor s -color pink
-.r add rectangle $top [list [expr $x - 3.0] [expr $y - 3.0] \
- [expr $x + 3.0] [expr $y + 3.0]] -filled 1 -fillcolor red
-
-set x [expr $x + 200.0]
-.r add text $top -text "Ancrage Sud Est" -position "$x $y" -anchor se \
- -color violet -overstriked y
-.r add rectangle $top [list [expr $x - 3.0] [expr $y - 3.0] \
- [expr $x + 3.0] [expr $y + 3.0]] -filled 1 -fillcolor red
-
-set x 50
-set y 150
-.r add text $top -text "Ancrage Ouest" -position "$x $y" -anchor w -color lightblue
-.r add rectangle $top [list [expr $x - 3.0] [expr $y - 3.0] \
- [expr $x + 3.0] [expr $y + 3.0]] -filled 1 -fillcolor red
-
-set x [expr $x + 200.0]
-.r add text $top -text "Ancrage Central" -position "$x $y" -anchor center -color blue
-.r add rectangle $top [list [expr $x - 3.0] [expr $y - 3.0] \
- [expr $x + 3.0] [expr $y + 3.0]] -filled 1 -fillcolor red
-
-set x [expr $x + 200.0]
-.r add text $top -text "Ancrage Est" -position "$x $y" -anchor e -color darkblue
-.r add rectangle $top [list [expr $x - 3.0] [expr $y - 3.0] \
- [expr $x + 3.0] [expr $y + 3.0]] -filled 1 -fillcolor red
-
-set x 50.0
-set y 200.0
-.r add text $top -text "Ancrage Nord Ouest" -position "$x $y" -anchor nw \
- -color violet -underlined y
-.r add rectangle $top [list [expr $x - 3.0] [expr $y - 3.0] \
- [expr $x + 3.0] [expr $y + 3.0]] -filled 1 -fillcolor red
-
-set x [expr $x + 200.0]
-.r add text $top -text "Ancrage Nord" -position "$x $y" -anchor n -color pink
-.r add rectangle $top [list [expr $x - 3.0] [expr $y - 3.0] \
- [expr $x + 3.0] [expr $y + 3.0]] -filled 1 -fillcolor red
-
-set x [expr $x + 200.0]
-.r add text $top -text "Ancrage Nord Est" -position "$x $y" -anchor ne -color yellow
-.r add rectangle $top [list [expr $x - 3.0] [expr $y - 3.0] \
- [expr $x + 3.0] [expr $y + 3.0]] -filled 1 -fillcolor red
-
-set x 150
-set y 300
-.r add text $top -text "Ce texte tient sur plusieurs lignes.\nLes alignements :\n- à gauche\n- à droite\n- au centre\nsont également mis en évidence.\n" -position "$x $y" -anchor center
-.r add rectangle $top [list [expr $x - 3.0] [expr $y - 3.0] \
- [expr $x + 3.0] [expr $y + 3.0]] -filled 1 -fillcolor red
-
-set x 400
-set y 300
-set anim [.r add text $top -text "Ce texte tient sur plusieurs lignes.\nLes alignements :\n- à gauche\n- à droite\n- au centre\nsont également mis en évidence.\nLe texte central montre l'utilisation\nd'un espacement des lignes programmable." -position "$x $y" -anchor center -alignment center -spacing -5 -font {times 14 bold italic}]
-.r add rectangle $top [list [expr $x - 3.0] [expr $y - 3.0] \
- [expr $x + 3.0] [expr $y + 3.0]] -filled 1 -fillcolor red
-
-set x 650
-set y 300
-.r add text $top -text "Ce texte tient sur plusieurs lignes.\nLes alignements :\n- à gauche\n- à droite\n- au centre\nsont également mis en évidence.\n" -position "$x $y" -anchor center -alignment right
-.r add rectangle $top [list [expr $x - 3.0] [expr $y - 3.0] \
- [expr $x + 3.0] [expr $y + 3.0]] -filled 1 -fillcolor red
-
-
-.r addtag text withtype text
-.r bind text "<1>" {textB1press %x %y}
-.r bind text "<B1-Motion>" {textB1move %x %y}
-.r bind text "<Shift-B1-Motion>" {textB1move %x %y}
-.r bind text "<Shift-1>" {.r select adjust current @%x,%y}
-.r bind text "<KeyPress>" {.r insert [.r focus] insert %A}
-.r bind text "<Shift-KeyPress>" {.r insert [.r focus] insert %A}
-.r bind text "<Return>" {.r insert [.r focus] insert \n}
-.r bind text "<Control-h>" textBs
-.r bind text "<BackSpace>" textBs
-.r bind text "<Delete>" textBs
-.r bind text "<Control-d>" {.r dchars text sel.first sel.last}
-.r bind text "<Control-v>" {.r insert [.r focus] insert [selection get]}
-
-proc textB1press {x y} {
- .r cursor current "@$x,$y"
- .r focus current
- focus .r
- .r select from current "@$x,$y"
-}
-
-proc textB1move {x y} {
- .r select to current "@$x,$y"
-}
-
-proc textBs { } {
- set item [.r focus]
- set i [expr [.r index $item insert] - 1]
- if { $i >= 0 } {
- .r dchars $item $i
- }
-}
-
-#
-# Add controls to the main group
-#
-source controls.tcl
-
-#
-# Line spacing animation (crude).
-#
-if {0} {
- set i 0
- while {1} {
- update
- after 200
- .r itemconfigure $anim -spacing [expr ($i % 20) - 5]
- incr i
- }
-}
diff --git a/sandbox/testwind.tcl b/sandbox/testwind.tcl
deleted file mode 100644
index 5ff7f76..0000000
--- a/sandbox/testwind.tcl
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/local/bin/wish -f
-
-load ../tkzinc3.2.so
-
-set top 1
-
-set r [zinc .r -backcolor gray -relief sunken]
-pack .r -expand t -fill both
-.r configure -width 800 -height 500
-
-.r addtag controls withtag $top
-
-set ent [entry .r.entry]
-set wind [.r add window $top -window $ent -position "100 100"]
-
-set container [frame .r.cont -container t]
-set id [winfo id $container]
-puts "container id is $id\n"
-set cont [.r add window $top -window $container -position "200 200"]
diff --git a/sandbox/testzinc.pl b/sandbox/testzinc.pl
deleted file mode 100644
index f25f9de..0000000
--- a/sandbox/testzinc.pl
+++ /dev/null
@@ -1,503 +0,0 @@
-#!/usr/bin/perl -w
-
-
-use Tk;
-use Tk::Zinc;
-use Tk::Photo;
-use Tk::ZincText;
-#use ZincText;
-use Controls;
-
-$map_path = "/usr/share/toccata/maps";
-
-$mw = MainWindow->new();
-$logo = $mw->Photo(-file => "logo.gif");
-
-
-###################################################
-# creation zinc
-###################################################
-$top = 1;
-$scale = 1.0;
-$center_x = 0.0;
-$center_y = 0.0;
-$zinc_width = 800;
-$zinc_height = 500;
-$delay = 2000;
-$rate = 0.3;
-%tracks = ();
-
-$zinc = $mw->Zinc(-render => 2, -backcolor => 'gray65', -relief => 'sunken');
-$zinc->pack(-expand => 1, -fill => 'both');
-$zinc->configure(-width => $zinc_width, -height => $zinc_height);
-#$radar = $top;
-$radar = $zinc->add('group', $radar, -tags => ['controls', 'radar']);
-$zinc->configure(-overlapmanager => $radar);
-
-new ZincText($zinc);
-###################################################
-# Création fonctions de contrôle à la souris
-###################################################
-new Controls($zinc);
-
-###################################################
-# creation panneau controle
-###################################################
-$rc = $mw->Frame()->pack();
-$rc->Button(-text => 'Up',
- -command => sub { $center_y -= 30.0;
- update_transform($zinc); })->grid(-row => 0,
- -column => 2,
- -sticky, 'ew');
-$rc->Button(-text => 'Down',
- -command => sub { $center_y += 30.0;
- update_transform($zinc); })->grid(-row => 2,
- -column => 2,
- -sticky, 'ew');
-$rc->Button(-text => 'Left',
- -command => sub { $center_x += 30.0;
- update_transform($zinc); })->grid(-row => 1,
- -column => 1);
-$rc->Button(-text => 'Right',
- -command => sub { $center_x -= 30.0;
- update_transform($zinc); })->grid(-row => 1,
- -column => 3);
-$rc->Button(-text => 'Expand',
- -command => sub { $scale *= 1.1;
- update_transform($zinc); })->grid(-row => 1,
- -column => 4);
-$rc->Button(-text => 'Shrink',
- -command => sub { $scale *= 0.9;
- update_transform($zinc); })->grid(-row => 1,
- -column => 0);
-$rc->Button(-text => 'Reset',
- -command => sub { $scale = 1.0;
- $center_x = $center_y = 0.0;
- update_transform($zinc); })->grid(-row => 1,
- -column => 2,
- -sticky, 'ew');
-$rc->Button(-text => 'Quit',
- -command => \&exit)->grid(-row => 3,
- -column => 2);
-
-
-###################################################
-# Code de reconfiguration lors d'un
-# redimensionnement.
-###################################################
-$zinc->Tk::bind('<Configure>', [\&resize]);
-
-sub resize {
- my ($zinc) = @_;
- my $ev = $zinc->XEvent();
- my $width = $ev->w;
- my $height = $ev->h;
- my $bw = $zinc->cget(-borderwidth);
- $zinc_width = $width - 2*$bw;
- $zinc_height = $height - 2*$bw;
- update_transform($zinc);
-}
-
-sub update_transform {
- my ($zinc) = @_;
-
- $zinc->treset($top);
- $zinc->translate($top, -$center_x, -$center_y);
- $zinc->scale($top, $scale, $scale);
- $zinc->scale($top, 1, -1);
- $zinc->translate($top, $zinc_width/2, $zinc_height/2);
-}
-
-
-###################################################
-# Creation de pistes.
-###################################################
-sub create_tracks {
- my $i = 20;
- my $j;
- my $track;
- my $x;
- my $y;
- my $w = $zinc_width / $scale;
- my $h = $zinc_height / $scale;
- my $d;
- my $item;
-
- for ( ; $i > 0; $i--) {
- $track = {};
- $track->{'item'} = $item = $zinc->add('track', $radar, 6);
- $tracks{$item} = $track;
- $track->{'x'} = rand($w) - $w/2 + $center_x;
- $track->{'y'} = rand($h) - $h/2 + $center_y;
- $d = (rand() > 0.5) ? 1 : -1;
- $track->{'vx'} = (8.0 + rand(10.0)) * $d;
-# $track->{'vx'} = 10;
- $d = (rand() > 0.5) ? 1 : -1;
- $track->{'vy'} = (8.0 + rand(10.0)) * $d;
-# $track->{'vy'} = -10;
- $zinc->itemconfigure($item,
- -lastasfirst => 1,
- -symbolcolor => 'red',
- -position => [$track->{'x'}, $track->{'y'}],
- -speedvector => [$track->{'vx'}, $track->{'vy'}],
- -speedvectorsensitive => 1,
- -speedvectorwidth => 2,
- -speedvectormark => 1,
- -speedvectorticks => 1,
- -labeldistance => 30,
- -markersize => 20,
- -historycolor => 'gray30',
- -filledhistory => 0,
- -circlehistory => 1,
- -labelformat => "x71x50+0+0 a0a0^0^0 a0a0^0>1 a0a0>2>1 a0a0>3>1 a0a0^0>2"
- );
- $zinc->itemconfigure($item, 0,
- -filled => 0,
- -backcolor => 'gray60',
-# -border => "contour",
- -sensitive => 1
- );
- $zinc->itemconfigure($item, 1,
- -filled => 1,
- -backcolor => 'gray55',
- -text => "AFR001");
- $zinc->itemconfigure($item, 2,
- -filled => 0,
- -backcolor => 'gray65',
- -text => "360");
- $zinc->itemconfigure($item, 3,
- -filled => 0,
- -backcolor => 'gray65',
- -text => "/");
- $zinc->itemconfigure($item, 4,
- -filled => 0,
- -backcolor => 'gray65',
- -text => "410");
- $zinc->itemconfigure($item, 5,
- -filled => 0,
- -backcolor => 'gray65',
- -text => "Balise");
- my $b_on = sub { #print_current($zinc);
- $zinc->itemconfigure('current', $zinc->currentpart(),
- -border => 'contour')};
- my $b_off = sub { #print_current($zinc);
- $zinc->itemconfigure('current', $zinc->currentpart(),
- -border => 'noborder')};
- my $tog_b = sub { my $current = $zinc->find('withtag', 'current');
- my $curpart = $zinc->currentpart();
- if ($curpart =~ '[0-9]+') {
- my $on_off = $zinc->itemcget($current, $curpart, -sensitive);
- $zinc->itemconfigure($current, $curpart,
- -sensitive => !$on_off);
- }
- };
- for ($j = 0; $j < 6; $j++) {
- $zinc->bind($item.":$j", '<Enter>', $b_on);
- $zinc->bind($item.":$j", '<Leave>', $b_off);
- $zinc->bind($item, '<1>', $tog_b);
- $zinc->bind($item, '<Shift-1>', sub {});
- }
- $zinc->bind($item, '<Enter>',
- sub { #print_current($zinc);
- $zinc->itemconfigure('current',
- -historycolor => 'red',
- -symbolcolor => 'red',
- -markercolor => 'red',
- -leaderwidth => 2,
- -leadercolor => 'red',
- -speedvectorwidth => 2,
- -speedvectorcolor => 'red')});
- $zinc->bind($item, '<Leave>',
- sub { #print_current($zinc);
- $zinc->itemconfigure('current',
- -historycolor => 'black',
- -symbolcolor => 'black',
- -markercolor => 'black',
- -leaderwidth => 1,
- -leadercolor => 'black',
- -speedvectorwidth => 1,
- -speedvectorcolor => 'black')});
- $zinc->bind($item.':position', '<1>', [\&create_route]);
- $zinc->bind($item.':position', '<Shift-1>', sub { });
- $track->{'route'} = 0;
- }
-}
-
-create_tracks();
-
-sub print_current {
- my ($zinc) = @_;
- my $current;
-
- $current = $zinc->find('withtag', 'current');
- print join(' ', $current), "\n";
-# print ref($zinc->itemcget($current, -position)) ? 'ref' : 'pas ref', "\n";
-# print 'tout ';
-# for $attr ($zinc->itemconfigure($current)) {
-# print (join(',', @$attr));
-# }
-# print "\n\n";
-# print '-position ', join(',', $zinc->itemconfigure($current, -position)), "\n\n";
-}
-
-###################################################
-# creation way point
-###################################################
-sub create_route {
- my ($zinc) = @_;
- my $wp;
- my $connected;
- my $x;
- my $y;
- my $i = 4;
- my $track = $tracks{$zinc->find('withtag', 'current')};
-
- if ($track->{'route'} == 0) {
- $x = $track->{'x'} + 8.0 * $track->{'vx'};
- $y = $track->{'y'} + 8.0 * $track->{'vy'};
- $connected = $track->{'item'};
- for ( ; $i > 0; $i--) {
- $wp = $zinc->add('waypoint', 'radar', 2,
- -position => [$x, $y],
- -connecteditem => $connected,
- -connectioncolor => 'green',
- -symbolcolor => 'green',
- -labelformat => 'x20x18+0+0');
- $zinc->lower($wp, $connected);
- $zinc->bind($wp.':0', '<Enter>',
- sub {$zinc->itemconfigure('current', 0, -border => 'contour')});
- $zinc->bind($wp.':position', '<Enter>',
- sub {$zinc->itemconfigure('current', -symbolcolor => 'red')});
- $zinc->bind($wp.':leader', '<Enter>',
- sub {$zinc->itemconfigure('current', -leadercolor => 'red')});
- $zinc->bind($wp.':connection', '<Enter>',
- sub {$zinc->itemconfigure('current', -connectioncolor => 'red')});
- $zinc->bind($wp.':0', '<Leave>',
- sub {$zinc->itemconfigure('current', 0, -border => '')});
- $zinc->bind($wp.':position', '<Leave>',
- sub {$zinc->itemconfigure('current', -symbolcolor => 'green')});
- $zinc->bind($wp.':leader', '<Leave>',
- sub {$zinc->itemconfigure('current', -leadercolor => 'black')});
- $zinc->bind($wp.':connection', '<Leave>',
- sub {$zinc->itemconfigure('current', -connectioncolor => 'green')});
- $zinc->itemconfigure($wp, 0,
- -text => "$i",
- -filled => 1,
- -backcolor => 'gray55');
- $zinc->bind($wp.':position', '<1>', [\&del_way_point]);
- $x += (2.0 + rand(8.0)) * $track->{'vx'};
- $y += (2.0 + rand(8.0)) * $track->{'vy'};
- $connected = $wp;
- }
- $track->{'route'} = $wp;
- }
- else {
- $wp = $track->{'route'};
- while ($wp != $track->{'item'}) {
- $track->{'route'} = $zinc->itemcget($wp, -connecteditem);
- $zinc->bind($wp.':position', '<1>', '');
- $zinc->bind($wp.':position', '<Enter>', '');
- $zinc->bind($wp.':position', '<Leave>', '');
- $zinc->bind($wp.':leader', '<Enter>', '');
- $zinc->bind($wp.':leader', '<Leave>', '');
- $zinc->bind($wp.':connection', '<Enter>', '');
- $zinc->bind($wp.':connection', '<Leave>', '');
- $zinc->bind($wp.':0', '<Enter>', '');
- $zinc->bind($wp.':0', '<Leave>', '');
- $zinc->remove($wp);
- $wp = $track->{'route'};
- }
- $track->{'route'} = 0;
- }
-}
-
-###################################################
-# suppression waypoint intermediaire
-###################################################
-sub find_track {
- my ($zinc, $wp) = @_;
- my $connected = $wp;
-
- while ($zinc->type($connected) ne 'track') {
- $connected = $zinc->itemcget($connected, -connecteditem);
- }
- return $connected;
-}
-
-sub del_way_point {
- my ($zinc) = @_;
- my $wp = $zinc->find('withtag', 'current');
- my $track = $tracks{find_track($zinc, $wp)};
- my $next = $zinc->itemcget($wp, -connecteditem);
- my $prev;
- my $prevnext;
-
- $prev = $track->{'route'};
- if ($prev != $wp) {
- $prevnext = $zinc->itemcget($prev, -connecteditem);
- while ($prevnext != $wp) {
- $prev = $prevnext;
- $prevnext = $zinc->itemcget($prev, -connecteditem);
- }
- }
- $zinc->itemconfigure($prev, -connecteditem => $next);
- $zinc->bind($wp.':position', '<1>', '');
- $zinc->remove($wp);
- if ($wp == $track->{'route'}) {
- if ($next == $track->{'item'}) {
- $track->{'route'} = 0;
- }
- else {
- $track->{'route'} = $next;
- }
- }
-}
-
-sub stick_wp {
- my ($zinc) = @_;
- my $ev = $zinc->XEvent();
-
- if ($just_wiped) {
- $just_wiped = 0;
- return;
- }
- my ($x, $y) = $zinc->transform('radar', [$ev->x, $ev->y]);
- my $wp = $zinc->add('waypoint', 'radar', 2,
- -position => [$x, $y],
- -connectioncolor => 'red',
- -symbolcolor => 'red',
- -labelformat => 'a2a2+0+0',
- -tags => ['text']);
- $zinc->itemconfigure($wp, 0,
- -text => "$x".'@'."$y",
- -color => 'red',
- -filled => 1,
- -backcolor => 'gray55');
- $zinc->bind($wp.':position', '<1>', [\&wipe_wp]);
-}
-
-sub wipe_wp {
- my ($zinc) = @_;
- $zinc->remove('current');
- $just_wiped = 1;
-}
-
-$zinc->Tk::bind('<2>', [\&stick_wp]);
-
-
-###################################################
-# creation macro
-###################################################
-#$macro = $zinc->add("tabular", $radar, 10,
-# -labelformat => "x40x20+0+0 x40x20+40+0"
-# );
-#$zinc->itemconfigure($macro, 0 , -text => "une");
-#$zinc->itemconfigure($macro, 1, -text => "macro");
-#$zinc->itemconfigure($macro, -connecteditem => $track);
-#$zinc->bind($macro.":0", "<Enter>", [ \&borders, "on"]);
-#$zinc->bind($macro.":0", "<Leave>", [ \&borders, "off"]);
-
-###################################################
-# creation ministrip
-###################################################
-$ministrip = $zinc->add("tabular", $radar, 10,
- -labelformat => "x80x20+0+0",
- -position => [100, 10]);
-$zinc->itemconfigure($ministrip, 0 , -text => 'ministrip');
-$zinc->bind($ministrip.':0', '<Enter>',
- sub {$zinc->itemconfigure('current', 0, -border => 'contour')});
-$zinc->bind($ministrip.':0', '<Leave>',
- sub {$zinc->itemconfigure('current', 0, -border => '')});
-
-###################################################
-# creation map
-###################################################
-$mw->videomap("load", "$map_path/videomap_paris-w_90_2", 0, "paris-w");
-$mw->videomap("load", "$map_path/videomap_orly", 17, "orly");
-$mw->videomap("load", "$map_path/hegias_parouest_TE.vid", 0, "paris-ouest");
-
-$map = $zinc->add("map", $radar,
- -color => 'gray80');
-$zinc->itemconfigure($map,
- -mapinfo => 'orly');
-
-$map2 = $zinc->add("map", $radar,
- -color => 'gray60',
- -filled => 1,
- -priority => 0,
- -fillpattern => AlphaStipple6);
-$zinc->itemconfigure($map2,
- -mapinfo => 'paris-ouest');
-
-$map3 = $zinc->add("map", $radar,
- -color => 'gray50');
-$zinc->itemconfigure($map3,
- -mapinfo => "paris-w");
-
-
-###################################################
-# Map info
-###################################################
-#$mw->mapinfo('mpessai', 'create');
-#$mw->mapinfo('mpessai', 'add', 'text', 'normal', 'simple', 0, 200, "Et voilà");
-#$mw->mapinfo('mpessai', 'add', 'line', 'simple', 0, 0, 0, 0, 200);
-#$mw->mapinfo('mpessai', 'add', 'line', 'simple', 5, -100, 100, 0, 0);
-#$zinc->itemconfigure($map3, -mapinfo => 'mpessai');
-
-#$c1= $zinc->add('curve', $radar, [],
-# -filled => 1,
-# -linewidth => 1,
-# -fillcolor => 'blue');
-#$zinc->coords($c1, [200, 200, 300, 200, 300, 300, 200, 300]);
-#$zinc->bind($c1, '<1>', sub {$zinc->coords($c1, 'remove', 0);});
-#$zinc->bind($c1, '<2>', sub {$zinc->coords($c1, 'add', 0, [0, 0]);});
-#$zinc->bind($c1, '<3>', sub {$zinc->coords($c1, []);});
-#my $c = $zinc->add('curve', $radar, [],
-# -filled => 1,
-# -fillcolor => 'red');
-#$zinc->contour($c, 'union', [100, 0, 0, 0, 0, 100, 100, 100]);
-#$zinc->contour($c, 'diff', [75, 75, 25, 75, 25, 25, 75, 25]);
-#print join(' ', $zinc->coords($c, 0)), "\n";
-#print join(' ', $zinc->coords($c, 1)), "\n";
-
-
-###################################################
-# Rafraichissement des pistes
-###################################################
-$zinc->repeat($delay, [\&refresh, $zinc]);
-
-sub refresh {
- my ($zinc) = @_;
- my $t;
-
- foreach $t (values(%tracks)) {
- $t->{'x'} += $t->{'vx'} * $rate;
- $t->{'y'} += $t->{'vy'} * $rate;
- $zinc->itemconfigure($t->{'item'},
- -position => [$t->{'x'}, $t->{'y'}]);
- }
-}
-
-sub borders {
- my($widget, $onoff) = @_;
- $onoff = "on" unless $onoff;
- my $part = $zinc->currentpart;
- my $contour = "noborder";
- $contour = "contour" if ($onoff eq 'on');
- $zinc->itemconfigure('current', $part, -border => $contour) if ($part >= 0);
-}
-
-sub finditems {
- my($cornerx, $cornery) = @_;
-
- print "--- enclosed --->",
- join('|', $zinc->find('enclosed',$origx, $origy, $cornerx, $cornery)),"\n";
- print "--- overlapping --->",
- join('|',$zinc->find('overlapping',$origx, $origy, $cornerx, $cornery)),"\n\n";
-}
-
-
-MainLoop();
-
-
-1;
diff --git a/sandbox/textexpand.tcl b/sandbox/textexpand.tcl
deleted file mode 100644
index f690281..0000000
--- a/sandbox/textexpand.tcl
+++ /dev/null
@@ -1,6 +0,0 @@
-zinc .z
-pack .z
-
-proc createItem {type params} {
- if 1 [concat .z add $type 1 $params]
-}
diff --git a/sandbox/texture-bois1.xpm b/sandbox/texture-bois1.xpm
deleted file mode 100644
index a7a6e5f..0000000
--- a/sandbox/texture-bois1.xpm
+++ /dev/null
@@ -1,320 +0,0 @@
-/* XPM */
-static char *on[] = {
-/* width height num_colors chars_per_pixel */
-" 256 256 57 1",
-/* colors */
-". c #f8dca8",
-"# c #f8d4a8",
-"a c #f8d4a0",
-"b c #f8d498",
-"c c #f8cca8",
-"d c #f8cca0",
-"e c #f8cc98",
-"f c #f8cc90",
-"g c #f8c4a0",
-"h c #f8c498",
-"i c #f8c490",
-"j c #f8c488",
-"k c #f8bc98",
-"l c #f8bc90",
-"m c #f8bc88",
-"n c #f8bc80",
-"o c #f8b490",
-"p c #f8b488",
-"q c #f8b480",
-"r c #f8b478",
-"s c #f8ac88",
-"t c #f8ac80",
-"u c #f8ac78",
-"v c #f8ac70",
-"w c #f8a478",
-"x c #f8a470",
-"y c #f8b488",
-"z c #f8b480",
-"A c #f8b478",
-"B c #f8ac88",
-"C c #f8ac80",
-"D c #f8ac78",
-"E c #f8ac70",
-"F c #f8ac68",
-"G c #f8a480",
-"H c #f8a478",
-"I c #f8a470",
-"J c #f8a468",
-"K c #f8ac80",
-"L c #f8ac78",
-"M c #f8ac70",
-"N c #f8a478",
-"O c #f8a470",
-"P c #f8a468",
-"Q c #f89c70",
-"R c #f89c68",
-"S c #f8ac78",
-"T c #f8a478",
-"U c #f8a470",
-"V c #f8a468",
-"W c #f89c70",
-"X c #f89c68",
-"Y c #f0a470",
-"Z c #f0a468",
-"0 c #f09c68",
-"1 c #f09068",
-"2 c #e09068",
-/* pixels */
-"hhehliieid#hqDqliifiiiiiihllhhkllyykhkhdhlpplhggeeehhilmmmllmpppqDDzqmihhhhhhilmODpmqDphhhihhmpqklllpCqlgllllppkhlqDqlhilqtqlhlqplkhltzplmpppmpmqmmmqmmmmquummqqnqqmquEuumlqtppplmqqqpmmpOqmOthuqqqpmmmmqmmmmmiieeefeeefiiimnqnmnqqEIuqquqihhlmlmmmmmmqqlilihilm",
-"illmmmllhhilmmpmiimmqqqpllmppppClopplpppklpplkhhlliiillmopptqCCCmmpmmliiliiihilmlllltLDqqtqplmpmqtohhlollpplopplpmlmlllplmpmmpmqCpllpppmpppmllllmlihiihhhiiiheeiiijmmquuutpqlhghmllilllliqlhmldmqpqmqqqqmmmljmiiifeiiiimebaeeeeeiiimqqmmmmlhlmpmlllllllilililill",
-"llmmlmlllpqqplmmmmmnqmmmlllpppyCCtzLNNKUCCKKLCCCDqqqtDqtqzDLCtzCDDAtztDDDDtqqqqqqqCqzCCqCDCqqpqpzCCqpCqpCCtqqppqqpppqqqppmpqtCCCNppCDpptqtqqppmqmmlilllimihhhhhheehimmmqllmppllptqlllmpqmqllpmlpiilmmmmmeeddeeeeieeeeeijiiiifiiilimqqqqqpqpmmpmmlmmmmqqqlmmpmmmm",
-"mqttqppqDqqCDuqpqrruqqmmCCDLNLNTUNKLNLNKCCKNUUUTDDDDLLCzqCCCzpppqqpmpqqpqqzqqmpqppqpqqzCppqqpppplpqCCDCCqmpCqpqCtqqqCqpmqppqCDDzCppCCztLCzttqqpqmmmmqqqqpmmmmmmilhlmmllqqmmqpmlmililmppmplmmlmpmmmmmqqmiliiiimmmjiiiiiijiiiiiijjmlmnqqqtmmpmllhhlmmpqpmmmmppmmlm",
-"DHMMDqDDDqqDDLCnEEIEDDDDIMNUUNNTLNLsyCClolppCCypmmmpqqpmlmmllmppliililiilmqqqmmmmlihkhlimmppllhilhggilpllklpplltmmllllmmllmmpmppppmmpqqtpqqmmlihllmqqmqnmmpmpmpmqpqutmmquqqqqqmllllpqqmmpmqtpqqpppmqqmlhiiehiiiimjjmjiijimnnnmmmmmqtuqqqquuqpqqqqqtqqqpmtqtqqtuu",
-"DDLDtqqqmppqqqqquDEDrqqqpppCCzqCpCClmCCpmompyBplmmmmmmmllllllllpmllmmpmmlmmppmmmCplihhdglllmlhhhhhhhppmlhhhlkhhlhlllhiklhhlkillmpppllmpmilppmmmmmqqqqqqqqquuuquuqDOODuuDqqqqDEDruDuDtuuttqtDtuDqEOOOVPDqqqqqqqrqrurvvuuvuuvuvvuuuuvJIuuuDOOuqqtqqqqtqqqqquqqqqDD",
-"pqqpmllmlmmmmlmpmqqqmliimmqCCCCCpCzppzCCtqtzCtztpqqqqppqppllppplmlilmmmmlllliililllmpmpqhilmlihlhllqDCplhhliihlllmmmilihhhhihlmpppllmllllmnqqqtutquuqqquqtquququpCNDqqqCrqqqrrrqqqtqpmpqmpmmmmlmlmqtqqmmmmmmnqqqjiimmjjmqnqqqqqnqqquqqqqpqqpmllhihiilllmhihhhimm",
-"qqqqpmmmplillmmlmmquqqqqppqzCtqCzppqpppCllllppqCmqqqmmmpmlmpDNKtmliilmmlDrqmmlmpllmpmlillllplhhihhllllihimllhlmpDtmhdgiliihhillmpihmpihipmppmmmmmmmllimmmliiiililqDqmlpmimmmmmnnlpqqplllllihllhlmqtruqqmpnmqqqrqrqqqqnqqmiiimnmmqqqqqmmpmpqqqqqmppmmlillillmlmpq",
-"mmpmllmpliillmmlmpqpqqqpmlmpqqtqpqCppmllllpppDKCmqCDzqlhlmppqqCzpmppmmllipqCqpmqptqppllpplillllmkihhhhllmptqplllmihlmqqDpmiilmqqlililmlilmmjlmmqmpmmmmmmmmlillmmtptqqpmmmmmmnnnmmpqqqqqqppplllmpqpmpnpmmmmleimmimjmjmmiiijmjmnqmmmmpmpqqtqppqtqpmmlpmlmqqmmlmpqp",
-"pqqqmpqqppmmmlllqDqqmppmmmpqtDCDmomlllkillllmppmtqmlllmlllllpppsqqqtqqpmpmqqqppqmqpmmlilmppllppllllhilillpppllhlppquDDDDDplhhilmpmlhhhilimqqqmmlmmmmmlllpmmmmpqqpllllllmpmiimmqqllmpqpqpllmmppppqqqqqqmmmpmehmmmiiiiiiiimmmlmqnmmmmmmmmmppmllllltquqqmpqmmmqquDu",
-"mpmppmppqqtqppmpmmlhhillhlmmqpqqtqqqppppqtqpqztpmmqDDqplDCtCpqypqqqqqqpqzqqqzqqqCDqptpmmpDDpmqpiqmmmllmppmmmmlmlmilqqpmmiihehlmmqqmmmmnqqqnnnmnqtqutuqqqqqqqqqqqtqtttqqtqqpmmmmntqttqtqqqqqtqqqqqqpmmmliqqnlimnmmiliiiljqmmjmnmmpqqqpmlmllmppqqtmpmpmpmmqqpmpmli",
-"pmpqqqqpmmpqmmmmCzqqqqtDtuDDCuDDDCCtCzDzCCDCCDDtLDqzDDLMNOLLLCCCLDLDDDDDDzqzDDDDLLCtLDqqpCCqpqqpDtqpmmqqqqmppqqmqqmqqnppDDuDuqqqpmqqqqqnqnmmmmqumqnqqqqnpmpmpmpmllmmqpmlmmmmmpmmmpmmpmllmppmpmllmlmmmmqpmnpiiilimmjiilmmqnmimmmimmmmllllmmppmlllipqmquuqlmmmqqqq",
-"tqtDDLDtMHMOUXOOOOMLLDDDDMHDuDOOpqpqqtqpmqpmpppmDqqqqqptmmptCCCzqqqqzzDDzqmqCzqpqtmpCzppmmmpqqCDzqmmmpmmqppqqqqmtqtDqqqqpmmmllilnpnqqqmimmqqnqnnmmlmmpnpqqnqmqmqqqqqqqpmhhhlpqttolmopqtqtpqppqttqtqqquuEquuuqqqqmmmmmmmqrqmmmmmmhilmlilippptuwtpqrtqqDDquutuDDOO",
-"qqmqqtqqmllmpqmmlmpzqmmlllmilmpqqqqzCCqplmplllllmmpzqlhdkllllllkhhhhilmmmlilmmiimplhmpllphhllhhlmliillllmmmlmmmmllmqpmilqmlllmqtliimmmmjmnnnmmmmmpnqqqtrqtqtuuuupmmllpqppppqtuwIIHuuHIIHIIHuuuuHDuuqqrDIvEIFJIJJuvuuuruuxvuvvuqqmqquuuuwqqtIOXOEDIMDOOOODDDqqqqq",
-"liliililhihiilllilmqqmllihhillmmtqpqttqplmpmlmppDmiihhhmmpllhhggiihilmqtlhhhihhhmlihlihllhhhhddchedhimmlmllillmliimmmiheqmjhedeeiimmjiimmmiiffijliihiimpmmpmqqquvuuruvxuIxuttwttutqpqpqpttqppmpmqnpmmmmmmmmmqnmnquvvurqruuvxxrqruuvuxuIIwutqqllhhehlmliihiiiilmm",
-"ihihhhhihhlililmppqCCmiilillmmlllkhhhlhhhllllppqmihlmilmCqlhhhghhehhimqqmihhhhilpmlhhhhheddhlpleedeimqqqmmliiimmiiiiedeheiliihehimqqidaaaeeiieeeihhdehiiddddeimmmnqquvtptqtttpoohhdgllmlihllllklhhiihehhmihehiiiiimmiieemmqrqmimqqqmllllmpplllllmlmqqlhelmmliheh",
-"qqqtDuqqpmqqqtMUqqmqqqqtDuDMIDuDODqtqmptDqqtDqqqpqCDDpmppDOOCmlllllqpklppmlhhhgddhhipidlllhimle#ddddghd#hdddddgheheemjeimiimieeeehiimmiiiiieeimmiieeeiedeeeeeeehiiinqnmiimmqmliimqqrqmmqihimmmiillllqmmqmmmmmheedeiiiililmmmiilljnnqnjjnmnnmmlnqtqplimmlqmmppmmm",
-"qqqqmlmmqmqqlhmpqqmpqmpnlllmlliihhhmpqpmLCqCzqpqlllmmmptmpqpmpqDpmpDDqpqpppqmpmpmzqmppmlmmmmmmlhllllllhhhihhhdddiieimieeadeimilihehilqquqmmihiimmmiilmmimifeeheeeefjmnmnmqpnpnpqmmqqqmmpuqtuuqqqmpmqDqpqqqqqqmmmmppqqtutqppmllilnmmnmnnrqqqrqruuqqrqquEIqqqqqqpq",
-"qDDDpllpmmqqilquqpmlllllqmlmmllmlllpCLqllllmplpqDphlptqplllihllmmllqCqmhilmmmlllqCLqmDLpqqtppmpqtqqqpqqtppqqpmllmmlmpmhhhilptqpmDuqqmqqqOJEuuruuqruuruuuqqmmmmmmmmpmmmpquuqtqtuuutqtuuqqqqttqppqmpqtDqmmpmmqqmmmpmmmpqqqqqqquqtqvrqrruvEuuruuqqqqDuqmllmuqmmmmqq",
-"imtqmlilhhlmllqqCqpmmmmpqmllmmmmtqplpqmhllllmmpptpmlllihqpmppmpmpllqCqlhlllmppmledhhdlphdhhhdddhilhhhlpDqtDCztDLqqpmuqlmqppqqqikiillliilmmliihiiimmjlimjrqqqqrrururqqqnqqqqttuqpqpmmppllllmqpmmplqqqDqllihlmmmmmqpmilmpmqqpqquuqqmjmmmqqrqqqqqmilmmmlillqqpmpmqu",
-"CDNONDDCUNNHCDLCLDCqCCDDLCzCDKLNOULCDUUDNDqtCDCqmqDCplmpmlhdhhlpppqqpmllqmllqqqpphmplmqmllmpmlllhhlllhlphhhdddipllilqmlllihlllhgilmmmlmlihiihfhilmmmiiilimqqqmpqmpmmmqpmpmmpqppppllpmlllpmppttqtqCtyCtmplllmpmppmmmhhilmmmlmmmmlqnqqqqqqlmqtqqtqpppqtDHtmptOHDtq",
-"CtpppCtqCppmptCpLKCzCLLLCmlppqpppppqqDCqCqpmCOLCONLDDDCtDDCDCDDCmqtqpmppCpllmpllldhlllmplllmpmihlmqDqlhlqqmlhhlpllhlplillkhhlhkliliihehhiiliieieieilihhiimmqmmmmmmmlpqqlqpmmpttDtttCttDIDtpqtuDHCLCqCCqqqppqqpmpmmplilmmpmmmppmmimmqmmmqpqtuttuuCuttDDqpqtqCCtDO",
-"CppqCCCCllllpKONzCzpyCKCKypzKCypLqptKDqpllhhmzCpODpmqCqipqCDDqmlqCDDCtqDODtqqppppqmlqtttpqttttppllpqpihhmllhhhhhpplkppkopmopopopmmmpquDDqqqnpmmmqqqruqqtqqqnqnqqpqqmmtqpqtttqtCHqppqtptCtppppsqttCCpCCppqpppppmpquuqqruuqqqqqquutqquHDtuDCttqtppllllppplCqpmlmCN",
-"lpsCLCCslkkkkpCCyCCyzKCypplpyplhOpilqqpmpmlllpmllCUDpmpCllllihhlhlmpmmpmpqCqpqDDDXtlpCqqmptqpmlltpmqqmpDppppqqppLCplpplppoppppptDCtquqqntrtqqqqqnmmqqqnqvqqqtuuqpqtqpuDuptCttppptpppollpklpttppplCppptppppmppompuqqqqqqmqqqqpmmmqppqtqpmttmppqpplppolllllpptpppp",
-"DCKNNUULNDDNNNCzNYULNYUKCKKCKLKCLLDNUOzzppqqqpqqCzqpmppphllhhhllhhipplllqNqhlmlllmlpqtqphlmpqpmlhhhhltCzqzqtzqpmCCptppptppptsttpppqpmpqtmmmpqqqqimplilmmqpmqqqmiipqmmqqqmptqppptpllpmllmlppppCDtptCCCCCDpllmpmllmmmquuqliqnpmlmummqtqpqCqqpptpkllqCqptCpNHLNLNOU",
-"CqCLCCCsppompCLNKNSKLTTKUUTSUYYTLNDOYUNOCDLDLLOUOOLNNLOOzCCqtCqpqppqqpppmqmhlhdhlllhhlhghhllllhhllllhlllCtzqqpmlpmolplolspstpptompnppmqqqpmmmllilmmmilmmiihilmlhimmmpqtpmpppppppmpptCCCHtDNDDONDYWNCCLNONtpppppplilimliiilmilehnlilqqmmqlCDpCNNHNUNCCCOOCCCtCtpq",
-"olpsmpplCpolmpCLpppppqpmppllpDzpqqppDCqCzCCppmpCCqqztqqCpqpqzCqmOODLDDDLDNCDDtqDtqqppqqmtqCqtqqpqzqplillllllpmpmppppppppplpppppoDCDDztCDqqqqqqpmmpqpmmlmppmpqqqpmmmmpDqqqqqDOUOLNOOLDtplpqCqpqqmlllpptqqqmllllpqqtqqqqqtuDuuuutDDtDELDtDCWVCqCqpLtmlhhhlllmmpmll",
-"ppCLtCCtppppopppOLCDKzzLLCCCLTNCqzqzDzpqCqqpppqzCppDCmlqmpqCDONCqppppmppqpllllmtqztqqCtqpqqCCCCDqCDzqqpmqqqCDDDCCCCCCCzpLCCNCGHCqqqpqpqqqqqqqurqtutqqttuqquuuqpqntDruDLDDqqqzqpmillllllhmqqqptqppppqCCpkmpqqtqquqmqqqqqqqqmmqmmqDqpqCqqqlmlmlhglihlqzqDOCDCDDDCq",
-"ihmmihlilmmmpmpqpmlpmllpmqqpmqqqptqCLCpqpmmpCDNDDqqNDppCpqDCDLLOCCzCDDDDLNDmlqCpppqmlmllhlmqqqqzppppqCzqCCCqCzqqpppppmppllllllmlpppmpmpmpmmpqmppmmlllmpqmpmllilimnqqmmnqqqmmpqqqpqtqqMODqtztqDCqCqmmpmmmhmmpmiihiiiimmliiihimlimmiiimmpnqCtDONtLDDDDCmlmmmmmllil",
-"DtCtpmplmmmmmqqqmmmqpmmqmqqqpppqilmpqpimlllmpppmpmpqqmpqmpqmlllllmmppqCqqqCphpqhmpqppmpmlmpzzpqplmlmpqtmpmmpmpompmpmppppzpptptCppqqqqqqqqqqmqqpmlihiiimppmlhhimpinqniiimmmqqqDLOqqnmllmlmpmmmmmmlhllmppmqqtnpmpmmmmpqnmlnpmmqqmqrpjlmnpqpDCmpqmhihilmmqqmmmmmqqq",
-"qmnqmmqmqqpppmpmlllmliillmppmmmlmppqCplpmppppmmmlpqqpppqpqpmllllppqpqCDCpmqplqCmhlmmmmmlilpppmmmmmpmmpppmpppqqCCmqppmppqplmplmpmlhlllmllmmmmpmqpqpmpqppqqpmllpqunqrrqnqrqqqqmmmjqmmmmmmqqnmmmmmmqDDMDqqmmmmiiimimmmmmlmlhieimmhiqnmjimiihqqlmqqpDrqqmqqqhhiimmmn",
-"lhlmmqDqmllmnpmlquuqmmmlilmmqqpmppmmmlhmkmqqmptDlpplllmmllllpqplmqqmpqCqOppqllqqmmzppllilmmqmmmpmpppllmmlmllmlmmmmllmlmmmllmllmlllllppmllhihihhehdhiihehihhiilllffijifiifiimmmmlqmqqqmmnmmliilmmilillmqqqqqmiiieehiheeijlmlmqmiliiiimmmmlmlilhiqimmiimjhmmmqmmml",
-"qmlilmptlpCtpollkllloohkloplkklpqmmqqmmmmmmmlmqzlmqDVtlimmmtEDqmmppqqqqCqpmpqqpplmqzDqmlhlpppoopppmllpolkkllkllplliillmllmllillmlillmmpmmqqmiiiimiiiliiinnmmnqqrilmmmmmnuqnmmmmimiijmmlillmpppppllplilmqutmmmmiilimillmmlihllmlimmmmmquummmllhilillillllnppllllm",
-"qtppptDCCLOLtCCCDNCpCCCCCCCDCDNNMEOOPMDEnqqqnpmmqCqmqnpDDtpmpmmlqqCCtCCDzqpmmpqCmmmpmpmpllppppopzqmllllklllllllmlllilmmmmpqqqmihiiilmmmmqqqmmmiiifhijmjmlmiiiiiiimmnmmmmqqqmmmmmmmmmjmlimmppmlllmpqllilmqqqmqqmiiiiiiihillmlllllmqnmimmmmllillllllilmqqmpmpmpqqu",
-"NMDDLDLDLOUNLCDNCDCtDCtCCtCCNNNLDDDMLDDDDDDDODqqtDDDDtqNMDtqqtCttCDDCDLNDDDtpqDLtqqqqqsqpqCLCCCCzLCzpCypklkhhhiliihhilllmmmmmlmmllpmmmmmmmmllmmiiiiiiiiimmmmmmmmmimmmmmlnmmmmmmmjjmmmmpqqtqttttpqtutqqqpnqquvurqqqqqqqqmmmpppmppruqmmlllqmlllllimmmmpzqqDEDDuDHO",
-"nppqqqpppCDCtpplppppCtmppppptqqpqqqtqqqqCqnppqqpmqDDLzpqpqDDDMMDDLLNLLOVqCCCCtztACqCqzqpCCCLCKLLLLLDKLLKCCCtqqqqppmmmpmpmmllllmplmmpmpmpqmmmmmihmmijmlimmjmmmmmmiiimqqmmmmmmqqnqnqqqnquEutuuutttpqutqqqqqqmmqqrqrrqrquuuqtutqttuqqrqqqnpmmmpquDDDDtqDMICqCtqpmpq",
-"pmqnqqtztLONLNCCtDCDOLCCCDLDCCCtLLNLDCDLqtpmllpqpqplttpplpqsqCplmpqqpqCCpmmpqqplqmlmqqmimmppppppqzzzyCKCCCCCCzqpmmmmpmmmqqquqmlihlmmpqquvuqqqqmimmmqqquvqqqmmmmmmmmqqqqnqqqruuurDEIEqqqutuqtqqplmpqmpmqpmmilimmmmmmmmmnqqqmppqqpnqqrtrtutuDutuDODzqpzDCmpmppqqqu",
-"OODDDDDCMOTLHNONLLCpCDCDNNNONLNNMOOLDLNOOUOODCzDLNCtLNLHDNCzsCCpmppqppqqDpmlqqqpqmlimpmmlpppppppqzzppppollpmppliiilimmmmqqqqqmmmmmpqqqqqqqqruurqqqqqqqruvvurqruurtrruruquuuuuuruuEEuqmqrtqpqttqptuutqqpmmqqmnmnmqqqmmmqqqpmmpqppuuuDuqqqtDDupmqtqqmmqqqpquDDuDHO",
-"DqqqqmmlpqppmpppqtpmqpqCCDCCDDDDpCCCCCCCCDLCCqppCNNLUUNLNNCCCNOCDLOOEDDDDqppqCtqzqqqqqCqpqqACzqqzDLzppzyCptpqqqmppmqqtqqmmmmmmqqqqqpqmmmmimqruqrrqqnmmmnqnnpnqqqurtrqqquqrqqrrqnqqqqqqtuqtqtuDuuuwDutqqmmmqqqqqqrruuqqquuuttuuuuEEEuqqmqlmpqqqDILLDDDNDDtqqppmpm",
-"lmmpqqttmpqqtCtpqzqpCCqzDqmpzCzplpCDCCDCCtpppqpplCpopppCppplpCClpqqqplilllmmmmllmpzDzqqqmmqCqqppzLLzzCCCCCppqqmpmmmmmmmmlmqqpmmmlliimmmlpmmqqmmmqnnmmimqmmmmmmjjmpnqmmnqqqqqtuqqDDEEDuuDHuqqtqpmlpqqqqmlhihiiiimelnnlimmlmmlillpmmmqqqqDIODDqtqqDDCqmqqmpqppmlll",
-"mmmmqtqmmpqpppuOptLUVLqqpCtmpCtmppCNODppqppqCCqpsqtpCCNNoppppCCpqpqCDqtCqpqpmlheelmllmmilliihihimmlillllkhllpmllmmmmmmpqmmimmqqmmqplipqmmlmmmimqqmlqqqmqqquuuuuutuuuqtqtuEOOEuqqqmpqqqlhmmmpqqqqlmllmlmmmmmmmmmimqrqmmmmmmlllllmmmmmqquuqutqqmlmlqqpllmlmmpqttql",
-"mmpqqqtuttqqmpptmlppqpppCDLtqLODNDLLKtppCCCCDCCCCCLNCCCpqCpppppoqmpqqqqqmmllliihhimmqpmmlmlihhhilmmmpplhghkllliiiilmiljlqmmmiiiihililiiliimqqmmnlhilmilmllimmmmlmmqqmmpnmqqqqqqqqqpmpmqqpmmmqqqqppmppquuuuurqqnmimnmmqqmpqtqqqqtqqqnmmmmmmppqttuCqpnDDtmppmqqqml",
-"mqruuuDOOECqppqtDqqtqCDOELOLDDMUUUOONDDLqCDCCCqCNKtqCCDLNONDDNCqqmmmllmplliiihhhilpqDqmlimmmiiimilmmmplhhhikiiiilmmmmmminqqmliimlhlmmllmilmqqnmmilmmmllmmllmpqmlilllmlllilillmpqquuqpqDOutqpqpqqlmlmmqqumqqqnqqqqqqqqqqqqqtuttqqmnmmmllllmmmmqtDDqmtHMtpqqquuttt",
-"qqtuqqDDutqtqqqtqpqqqqqzLDDODqCDCtqCqqCNOUUVUOUVUDqtCLNNCqBqCtCtqqpmmmpnDLIDtqmmmmqDLqmmmmmliiimimmmomplkklillilmmmmqqnqmpmqnqqrtqppmmqqqqqmnqqqqrutqqqqmlilmnpmmmmpmmmmpppmmmpqqqCtqquDuuqqqqqqlllllmmmimqmqquurqjmmqqqmqqqtqppruqrtqurqqqpqquDDtDDDqqupmptqpmt",
-"nmmmmmmmmmpqqqtpqCqqtztqCqpzDqmpqqqqqqCEqzDtqqqCDDLUVODDDLDOOUOOMLDDDDDDqqqqqppppmpDLqqqqmmmmmmjililillkllllllmmqqnqnqqqlmmnqquuquqmlpqmunmlmmnqqtuquuqppmpmppqqpqqqqtqqqrqtqtqtDHDOODDtnqqqqqqqlmpmpmllimmlimmnihhimqqmlllpmpqqqqqnqqqqqttuDDDDHEOOtmpDtqpppill",
-"qmiilmlihllmplmmmmlhehhimiippmlimmpqqqqLqqqqqqqqqmptCqzDmmlmmmmmttAtqCqqqtDCDEVXCtADqqpqqqmnrDErDMOONDtpmpqtqpqqqqmmmmliijmmmnmmlqtmmqqimmlimmmipmmpqqqmuutqmqqtnpmqquuDqtqquDuuLDtCDHuqpqqrqnmmllmpmpmliliilmmihfjqqqmlmmlllllmiiiiimmpqqtqqpqpqqqqpllmpmmmllll",
-"qmmmqqqpmpqpmllptCqmmmpmmllmmmlliiilmmmmiifhhiiilhhiilqOqpmmpmllimmmmnqpmnnqnqqDqCCplmmmnmmnrrAAimmmlihhpptqqpmqqnmlmiihiimmmiiihmmmmmmliihhimmillimmllpqmihhimppmmmmpqqqnppnpmmllhlpmlhmmqmmliillllllllqqqqqrqnmmquqqmqqpllllllmmmqqqqqmpmlllhilmpmmllhhhkhlpql",
-"rqqqrvuuuDutqpquzDDqqqqmtDuqpmqqErqqnmlilihiiliiihilihmDpmllmihimmmmmqrqquDDqihehlmlilpqqmmiieeeeehddehhhlmpmimlqnmmmmieeimmmiimlhilliimihedimnmihhllehmplhhimqqqmlhlilltqmllihhllpqDtqmhiiiiimmllihiiimmmlmmnmhqqnqnmuJqnppqtqtnqqqqmlihihhhimpltODqpmlpqtptOIt",
-"pqqpmppqmqpmpCCpDDqlmllpmqLDqpmmtmmpqppqqqppmqqpqqmllmpmqqquqpqmlmilmtzpdihmmhiehhlpqmmmlmjimrqnlliiihhiliiedeimhhlkihklmllpplklmlilmmlllqnpqqquilpqpmmmmihipuqlimmiilmiehhehimmpplmquqtqqtHqhiqimihhmqqlimmmmmqhilmmllmpmmmmmmluqpmlmpmlmpruqttqqqqmptIXDmilppp",
-"qqDDDDztlqtsptplCDqlpqqtLCqCDCqplqqiimmhqqqqqqqqqDDDDDqqqqqpmpnqmpmmqqmhqqqqqlmhdehhiheheeeeeiieiiiiiiiihiihehimhklllhhhplpttpmpuurqqpieilliiihmpmllmqqqlpqpmpqqquunmqqqtrttqtttmqpptqpmqDODplllmmmiiimmmmpqmmlmllmqqpmlutpmmppmqtqqqtttqqqqpmmmmqqtqqqDDDtDDDzp",
-"mpqtDDplmpzCCCqsmCqptCplqlllpmllqNIqpqqllmlmppqqqDDDCqqlqqqDtqpmqqqCDLuqmDqqpmqlllillihiilihiiiiiillllljlmpnlmmqlmpqqqpmtqqqtmpqqqqqqmidmqmmmiimtmihllllmmllmmmlnrqmlmqmlmmppmmmlmmmqtmmqDOIuutqqqqpmmmlqpmqmlmmmllpqmmltqmmqtqtlmpmmmmquqpqpmlpmmpppqtqDtqqCDDD",
-"ODqzDLDCLtpqCCCNCDDLULqDCqqDtppDHuqttqppmpppmmmmlmpmqDLDqqqqqmllihilquzqlqmlmqDmqppqqqqqqqqmmmmmmmqqnmmmmqqqqqqqpqquttqqqppqpmlmmmmmmmieimmilieiqplmqqmhpmlmptqmlmrqnqmmqqtutqtuppllqqptplqLDqqDvEvurtqqqqnpmqquDuqqqttDuqppquDupuDuqqqqqqpmqqqqmqpqqqqqODCppqLO",
-"VDqCMHDD0DppqqptzppDLqCYCDNUUzqDLCpzLDCqCDDCpplllmlilmpqqmlhhillmmllmlmmqtmmpqCqllmpqpmpmpmmmiljlmpmpmmpmmmqqqqmmmmmmmmmiimmmmmqpppmpmllelimpmllilmpqpmmhmqqmmqtjqqrqqqmqpmmlillutqpqppqIqtOOtqHIOEutrqqqpqqtqtutqqtqqquDutrutqmqDDDttqtmmpqqqqqtuqqtDDuDOOMLDDL",
-"CqmtCqppLCqptCpllllCDllDppqqCtmlzLLpC0UtpCLLDCptqtqpmpmlpmpqCqqmDtqqqpmlqqlpnmqmlllmmmlimlmmmiiihimmmlmpmllmqtqmqpmllllimmmmlllmqmmmmmmpmpqquqqqmppmmmppmqqppqqqqqrqqmqqIqqttqtDqqquDuqDOOODDOODqqqmmmlilmqqtmmmhimpplllqqqqqpmllmppnqqpqtuqqtqqquuqtEHtqtLNDCtq",
-"qqCOMDzDqCCCCCCppDLOUqmCqDDqqCtplCKppKCkhoCNLCKCpqCDOU00mqDUXUDqCpptppppqplptlppqmlmppmlmmlmqmllimmpmmmqpqpqqqqqrqpnmnmmqqqmmimmlmmmmpqqmqmmpmlmuuutpqqqxutruIutuEEDuuuEqpmqODqtmpptDtqDpqqptDtmqqmllmlimmptqmlllmqutqmmllppqqqqqqqqtDuqtDEtqqqtmqqqqtqqqqtqpppt",
-"DqDOODDUtUUDCDCtLVNqCNUVCU0CpqLOsKTNKBployNTKCpompmlpqCDCqpqDLDCOLtzCtCOUDpLNppptpllpmppmllqqqmjpqtqpmqtqqrqmlmpqmmmmqqqmnqpmmqrqqtqqqqtqtmilihihhlmmppqmpqpmpqqmnquqqqtpiltDtlhqpmmqmpDummuOtqtqququuuqtqqqqpqquqpqqqqpqquuutuHOuqqtDumpqtpllqqlqtqqqtmCDNLDCqq",
-"qtzDDLDDCqtpCLCppmpDLDqpVNDDDDLOKNUKCNLWYCyKCpoC0mlqlpzlpCDqpqCqptNUNzsLKKCHNDCUNDtDHDqtqqqmqDDqplmpmppmqmpphpuqqqruuuqqqqqnmqqqlpmlpqqqpqplhhihhimpqqqqmhhiquqpimmnqqnqqpmllptEqqpqtDqqtpqNPODDODqpqqqqpqqtqtqtpppmpppppmpmpqqqqpqmmpqtrqquDDutJEutuIDqDOUONUOC",
-"qqppqDLLLLDCDNCqplpqDCDCNCqzCDNOUKCBKUBlNKCKKKKNUtCCqNOCqCCCqpllCpCNCppCtCppCCCCHqptDDtquHEDDOEuItuuuuutqtuIuDIuvuIIvuqqiiillmmquuuttuwupqqpqtttqqqqqqpmmpqqqqquqqqqqtuuIIDuuuDItEPODtDPUDtDHCtDutqqpqqqqpqqqpppmmmpmmlmlllllllhqmpmpnqqDtqDDutDuutqtDDttDqllpqm",
-"DzqqqqqttDCCDNNNqppqCCCDAppqCDDCpCYNCCsKNKCCCKCCpDDCCOUDOCCUULtCNKCCCpCKCNCpCNKsLtpqCCqppqtqpqqpppqqmlplkipplppillmppmmlqqpqqqqqttttqttqtttqpqtqtqttqtqqqtuuqpqtqqnqqqquutqpqpppltDDpmptqqqDDqmmqqutqpqqpqqpqqpqpptqtppmpqpqppliqpqpqqtqtqqpqmqqqutqmpmpENDpmqCt",
-"qqqqqqppqzCCCCLNUOLLDDLLtqqqqqpqCCKCLTCCCNCBCCKBpDLCCLCNppqDNLDNYNLNNNTWNTNKTUNNUDtCDDtpDDDqqqDDqptqomplqttpmppmqqquuuuutqpmqqpmmppmppqptutpppppmqpqqqttqqmpqqpmmmmmmmqmmmpppmmmmpquuqpmmpuOHqpqpqtqtqqtqqttttqttuuuutqqttttuttqqqmqqtqqtqqqqqqqEIOuqqtqqqqppqpm",
-"lmpqCCCzDNDCpqszNLHCCqtqtCDCqpqtLCGstCpoCCCttNUHzCCDDqtNpCDCqCCDNKGCKNNTKNNWYGBNWUONNNDDUODtDOOIttuuqtutuHuqpqpqllppqpllmlllppplppqpppqppqpmpqqqqpmpppqqpmlmqqplnqpnpmmmlpqqppppqqpqDDtputqqmpqDqqqqtuttttqqqtqtqtqppqppqqqqqqqqqpqqqqpmmpppmppqquuqpqqDmpqqqpml",
-"qqCqDDDOLOTDCCCtqtzqpqztqCDCCDDDstOCoppDCHCpCDNCCtCLCtCMpNOCCLNNKGCCCCCCGCKWWCpWNNNDDLNNutqqDDtqqpqppqtplpplmlhkmppttqtttpppppppmttqpppppqqqqttpquqqqqqqqquuutuuquuuttqqlpqqppqqqqqppqqDqqqqqquDHDtDDMHDutttqpqpqqpmlmmpqpmlppmppmppqpqplmmmpnpmpqqpmpqqOONLLDDD",
-"OOOLDDDLDDNLDNNLLNODDLNLzCDDLNOLNtCqH0NGDHDDCCtpCptNCCNCoppptCLNKKKKKKNNNNKNTKGYCNCCCLHDDDCDDDtqtqpppuupqDututmpolptuwuwttqpppppqtutqqtqttuttuqpqqqutuuutuIxuquuqqqruuuuutttuuHHtuDutqDIqtHOOOOOLDDDDDDDtqqqtqtqttqpppqttqqqqqqpqqqqqqqquuuquIIHEEDuDEDuNEDNDDDD",
-"DLOOLCztCDLDCLCCDLLqppqqNDCCNVUDHLXNDODOCCHNOHCtNzNLCNUpCpCNTNCNGNNNNWYYNTKCNNNWWONCHUODOONDDtDDHutqqHIqtOuptplpqttHIHHHuuwuwIIRuIOOIIIOuDIIIIutmmppmpmmqqtqqpmmqmqmpqquuqmpuOIuqqqqutqmttqqpqtqpqqqpppqqqtqtuuwuuuttuuututuwuutqqqtqtuIDtqptDEDuuttDXOOtCCDNLDD",
-"mqCqqpqqCqqDDqqqNppqmlpqpmmpmpmlqDOW0UtDDDMOOVVOMOUNLVNCDNDLNLNLNCHUNCtNNNONONNNWNHNGGNNWGCHNNHHquIuuIDtuIOIDuutIuuOItqutttuuttptpqqqttututqtqttqplimmllllilhlmpunmmmimqqlhlmlllqqpmllqtqpqqtpmpptNptpCpptCtppppHIHutppqqpqquuruqttuRXItqqttuutqDMDDDDCqqqtzCCCs",
-"tDDDzqCDDpmqqpmqplpplpqpillilpmmlpmtDtqqmppqtDHDDOOOUY0UNNTOUUUUNUUNOWYWWOQQOWRW1WTWNWWN0WNNQHCHDIOIHEutIDwutqtqpmpppmtElllmpqqtqpppmlmppppqqqqpuqppqtqpmmplmlppumimlilmqlhmpppqpmpmmmpqqqtDDtqtosCoptHCsCtptttppplllmppqmmqqqrullmqtqpmttpppqttpqCqqqzqpppppppl",
-"CCCqtqtqUDtLDCCDCNLzpCDlpqqpmutlmqpipmmpmpqppqqpqCDuDODtDDDHHNONUWYOW01UWXWOOQXWWNNQWW1WWQQXUQOWIIHOIuttDuqqppppqpmpmlpuqqmlllllqpmpmlllmlmpqppmlmmmmmmmqqqqpppqqmiimlimqmlmpmqtppmpqtqpqqtDDtqqqCqqpCDDNDCtCLDtplhhllqqplilmmqrklppmlppqppmmpqtqqCqpqppLCqqCDCt",
-"DCqqqtzCLCqCDCqCLKCtllphmppmmpmhptmhllllqqqqpmmlmqqqpqplppppqtCtCttCCsptCtpppppptoossCHttCHDtttDutqutppqqttmlilmmlmppmllqpppmpmpqqpqppmmpmppttqpqqtttttuttttqqqqqqqrqqquqqqtuttuDuDDIDDDEHEOIMHDHOCHqODNOONDNOONwtpllpqtlliiilmqllmplpqtllpppqqqqDDDqqmpDqppCCCt",
-"NLDCKNNNDCCLNNLCNCCDzptCplpttpmlimlllllllppmmmplmmqqqqqpmpmppqqtpmmtuqtqDDututuuHsppptDtDwDtppmppmmqqmlppqqplhlpqpquuuttqqqqtqtqqqqqtqpqqqqquuuutuuuutuutuuutqtquvPIIuuIuuIOPIIOIOXOOOIOOOOHIOIILNCOCWOUNONUOUOUDwuttqtqpmpmlmqqlppppqttmptutttqtCDDDDCDCqptCLLK",
-"OTUTUUUUNTUWUWUW0LNYONVWOuDPVuqtpqqqDqmpmqqpmlmlpqqqmpmppppmppppqDDqqOEplllllmpptpopptHHtDtqmlpmlllppppqptuuppptIuuuHIuuqtttqppmqqpqqmpqqpppmqqqmppmlllmqqqqqpqqquIvqmnqqquwHDHuuDOIuttDIDuttDDttCtDCDCtCDNONCNOHIOIDuuIuIEuuuuuuuuuHHEDIOOIHDHIOMOUOMLNOONOUWWX",
-"CHNNNNNWCHNNNNNNUNOONLODUDDHDtqqOIDQVDqDtDDutqpqqqqqqmmmqqpppmppquqlmtqiqqpmpppqhhlllpuuqtqmmmnmppppmqqqqttttqqttutpmmpplpqttututqnqnpmpmnqqmmmppmmmlmlmlpmpmmmpqnqmmllilmpmqqqqqtqqppqtDHDDIOIDqtLNDtqqqtCDtqCOIHIDHuDwDIIuttuuHDHIIIHIOROOwDIOXODMOHDDCDLCDDLN",
-"sCCNGCNNNNTNCKNWLTUNLOUCDDtqCDIHDttOWDtVtDODCDDDqrqqqqtuuqqqmpqpuqmmmqqquuqpmmqqttuHuuIHXWPHvIIxqtqmpqtppmmmpqqpqtutpqtuuuuuqqppqqpqpqqqquuutqqqqqpppppqpmppppqtrqnmmnqqqpmpqtqptqppqqqqpqtquHDqqqXO0LONtqqqqqCOHuppmpplqttmllmmmptuttttttutqtuDOqqtDDtCqtCCtpst",
-"tCCtstCNNCtspstCNNNLDCttDHDDutquDDDOOVOHDDDDDDDIrvIJIvuuPuuIRItuODqtuEIEQIuqtuuuqtqqqtuuvurqqqqrpqqtttuEtutuIIutqppqwDtpppllmmmliiihmqqqmmmmiihhhhhilmmmqqtuuuutrqqquurqqqtIHuttuDuuuuHuuuttuttqDtmtNODqqtCDCttCqqqtqtttpmihhllopppmpmqtutqpqtttqtDOODCquW0NCDCp",
-"pssspstCsssCHNCGCNUNHDDtppqtqpqtODCqtDDDqtCuCuDDuuIEuuquqqtuDttuDqquOOIIEuquuuqptqquxuqtuqqqqqqnpquuwuuuqpmlmpllilmpqplhmmlllllmtqmmmqqmmmmmmmnnpppqppppqqqtuuuuuuuvuExuIuuIIIIPQROOIHDHDuuDIIDwCtCDUXUODDHHDDLOOIHuuuuqtqpqppqpqquutttqpppqtqqtpqqtttqpCuCtCCCt",
-"CCDCttCCtCHNOUONpDNLCCCtqtqqqppqIODDqqDDMHMDDtqqquDuqmpqpEWXOItqIuEOIEutIIuIJIxuIuuQWRuxqtqrrqqmlpppqttpuqpllmpplptqqpmmpqtpmlptuqmmmqnmqqmqtrttmmmmlmilllmmmpmpnnnqqqmmmmmllpqptttqppmlppmpppppqqDDDDDDqtqtDHOXWVOIDDttutDwHttttuHIIIDwOOIIIIHuuDDDDDDHDCHUXOtp",
-"CHDHCNNOWONNNHNDGUWXOOOONHDHDtuupqqqqppmINODtqqpuDEEqqqtqDHqppqtuDuuuqmquuttqttuutptuttqqqqqqqnqqtqmpuDtutpqqttuqqqpmpqtppqqlmpqqqqmnqqtuqqqqqqmmpmlmmpmqqpppmmlmmpnmmmlpquttutqmpmpmmpppmpppmmllmqqpmompmmpqqDLIutqtqqqtttttttpttttttDIIDtqtqqtqqtqutDCqtDW1YNt",
-"pppptDOXWODttqtttNUONDHNutuDIHIIODHDOOIDqqttqqttqqtqqqppltHDHNHtmpmpmlptuuuqpmqtwHuqquuupmmpqqqquutppDIuqpqqtqqquttqtuuIuttqtqtuqruuurvIvuqnqqmmppppppqqqtqqpppmqqnmmmpqmqtqpqqmsqsqttuututtqpppmpqqqtqttqtqqpqpqqpppqppttCCppppqpmpmqqppllllpppppppqqppIOHqptGt",
-"pppppttuttqppppplptppomptqqtuttuDqmpptDttDuCqtCDqpmqtqqqlptCDtplqqpppqtuPQXOwttupuuplttqqtqnqqtrqtqqqutqtquIHtqtuttuIIHDIuttuuutuuvurqqvurruuvrrtqqqpppqqppmpmppnqqqqquvIIIuuuDIttutuuwwtuuuttttuDDDDDDODDDDDDqquuuuDDuDNOOOHCCCqttttqppmppqttqqqqqtqtqtHOHpkppk",
-"uttqqqppqpqqttqqCNDCtttqtsqqtqqqODtqqtDDMDDtqqqqDDDCDOUW20NCpCLWOIDIDuuwuIIIuqtqtwIwuuwuuuqtqurtqttuttttxtuIuqqtmlmpqqpmpmlllpmlrqqrqqqnqqrruuuuuutqqqqtqqqqqqqtruuuuuEIDEDutqtIuuwuuuuuttwuuuuuDDDtqqqDtqtDHDDDDCDDDHDDDNONNHGHwuuHIwutttuuuutqtqtqtqtqlttttDHt",
-"tuuDHutqDuttuuuuNOONDDHutqtuHuHHDDDCqqqqttqpmmmpqqqppCN0WUUXWLCNROOQOIuuttttttttuqpqttttttqqqqpmpmmllilqpmlpmlhmmpmlmpppqpmmmppmqjmqrqnmmmqqnmmmmmllllllmmllllllmnqnpnpqqpqtqpmqppmppopmppqpppppmpqmmmqummmqqtqqmmmpqqppppCCsppsDDuuDDIIHuuwDHIIIIDuuuuHODtDHtCN",
-"qqtuvIutvuuuuuuIuPOIEIIEOwIOPOIPOOOutDHDODqqpppmptutmpmmlpqppmpplptqtqpppqqqqqpltqmlpmpmpmllqplmmllmppqqqpptwtqpqqtqqpqquuuttqtutppqtqttqqtqtqpmmquuqqmmillmmqqqlmmlimmqmpqqqqppqquqmmmpmqqqqqqqmmpqtpqtqqqqpmpqqlptutpmllpqqpllmppmmppmqqtqqqqqpqqqqtqtuutpqtuq",
-"mpqqqqqqlpquuqmlmprqqqqpqqpttqttDDDttDDDOODDuDDDuHIutqppppqtppqqpDODtqqtmppqtDDDutqqqqppqtpputqutuutqtuuIuwIIIwIuwuuuuuwuwxuuuuuuuquutquuttuuxutqqqqmliilmmllilmlmmllmmmpmmllmmmmpnmmmmmmmqmmmmillmmmmmqqpqqmmmqIqmpqpmqtqpqpqqttuuttuuuqqqqpmpmqttqqqqmmpmmqqtq",
-"mpmplmptqqqtqqpqmmqmpmpmpqqppqttmppmpqqqqpppqqttIIIDDHIuDHIIHIORtLOHCtCDtDDCDNNDIIHIHDuuIIEIIutwqtqqpmptqqmpmmptpmmmpqqpmmppmmlmliillilhmlllmpmmmmmmmqpqiliiiiiiqpmmpqpmqqmmmmqqqmppmqqqmqqqqqqqmlmpppqtqqpmplmppllpqpmlqpmmmmqtmmpmmqqpqqqqmpmpmqmpppmhlmqpmpqp",
-"tqqpmmqqqqmpqppquuqpmqqqqttpqtuqpqqqqqtqpmmpqtqqqpqqtqtutuDDuDHODtqqDODqLHDuCDDtqtqtqtqquttqqplmmmpmllmpqpmlhklmppllmmpmmpqtqqppqpqttutuppmmmmmmpmmmquuuqqqqpqqtuxExEIuutuuuuutqrqqruuuuuuuuuvIIqtqtruuuvuuuuuuuqqquIutqtqttuttupqpmppmpmlmmmmmmqqppmqmlmpqqpqmq",
-"uqqpqpqplmpuqqmmuqqqqqqtmqqppqtpqpqqqqpqqqqqpmppqqtqpmqqppmpmpqqpplltCqppppmpqtplmpppmpppplltqmppqqqmmquqqpmpqqqtqmpqqpmllmmpmlimmpnqqqmqquqqqtuqtqqqqqqqqqmmmmmquuutuuuqqtuutqpqqqqqqrqurqqqqqqqqtuutuqttqtqtqqHuqqqqtttqtuHuttuqqtqqqqqqqpqqqqtqqqqqqplmmpmqtu",
-"qpmmmmmlqpqquqqqqqruuuuuptuuuutqqqpqqpppqqppmmllqtDuqpqDqqpppmppmpqplmplllllppqppqqqttqquqmpttpqmqqpmpqtmmllmppmqpmppmmltqttutqqqqqqqqqmillmlmpqqnmmmmliillmillllpqqpmqmpmpmmmmmllllllmmmliiliillmmpqqmliililllillllllmmqqpqppqquuqqqpmpqpqqpqpmmpmmmpmmlllmpmqt",
-"qmllllllqmllillqmqquuquuwuDIIHDHDDDHDDuDDDDDtqtummpqpmqCmmmmmmmmmpqppmppppqppqpmppppqqqpttmlpmlmmmmmmmqqpqtqqqqpqtqtqtqpqqpmpppmqqqqqqmlliiilmmlilililmmlmmpqqqqqqtqqqtqmmllilllhiiiihilihhiilililmlmmmhllmlmqqmhlmpttppuqqpqpqtuqqqqmmpihhehhhhhlllhhlhmllmpmmm",
-"pqmliimmqppnplilmmmmmlmutqqttqqutqqtqqqtuDDuCuDOODDLDCqDqqqtqtqqppppqDtpmpppqtqputqqttqpuuqqtqqututqtqtuqvIutqtqqtuuuqtqxurttrttqturqurqqmllmmieihiihilpmmqqmmmmmpmlmmlilllilhiiiimmilmpqmllmiiimppmpqpmimllpqpmppmllmqqpplmmlllmlillhhiliillmllimqpmlllihimqpmm",
-"qqqpmpmpmmppmpqqqqqmllquqppqppqppppmppmpumpDDpmqDLOMDDDNDDDLLDDDDHEHHLOOuDDDIONDuuuuuuuwtuttqqpqqqqqrtrqpmmpmqmmqpmqtuqmpqttqmmmmiilmiiiiimiiiiilmmlmmpnmmmmlihlplilmllhhillpmmlmmmpqqmmqqnpqplmtuqqqtqppmpmpmmmpmompppmlhillhlmillillpqmlmmpmlilmpmqqmmqlmtupmq",
-"uutqtqtqttrtqqqtnqqmilmqllpplpqqlmmmlilhpmmtqllqpqqqqqqqCqqqtqpqqCDDDDCDCttCDLuppppmmppqmpmpmllliiiiilmmmqqqmiihlhilmpmllmmlhhhlmmiiiihimmmmpnqqmqqmpqqqqpqqqmnqqqpqttpmpmpppppppqqqqqqtquqquqqqqtuttuuquuuqtqqpqtqtqqttpppmpmptqqqqqqqumpqqqpppmmllmqtumlmqqpqt",
-"pmpmmmmmnqpmmmmqpmqqpmuwmmtqmputmpqtqqpqmmmpmlmpmpmppmpmqpmpmlmmppqttqqpmpmlmpmkmmmlllmpmmlllllhmmiiiihiilpmlihilllmpppmllliilpqqmlilllmlmmqnqqqqqrtquuqqqqrqqquwuuuxuutuuurtrttqquqqquuuuuuuuququvuuuuuutqqqqqqllpppquItqqqpppqqqqpnppqpqtqmlmmtpmlmmpqutqpmmqq",
-"qtqqqqppppmmppqqmqmmmpqumpqplptllmpqqppqpppmmppmpmmpmppmpmmpmlmplmpppppmppppppmlmppmlllmplllllllmliihiihimnqmmmmlmmpmmmmpmpmpqtuuqnqqqnqqqruuqqqllmlmmmmlilmlilmmmppmpmmmpmmlmpnlmmmlilmqtqqqqmqpqtqqpqqlllmlmpqmmpmpqtuuuttqqtuuuuuuuuuuuuuutqtuutqtqqquIuqptuu",
-"qtquturuuuutuuvxuurqqqqutuuqpuupqqqqpmmmtqqmpqqlpmlmppmlmmomplppppppmppppqqqqtppmmppmmmlppmmpmmmqnmmqqqqqqqqqqqnqttqqpppqqqqpmmmuqqrrqqnmqurqqmmiiilmqqmqqqqmlmplllillllpmlllllpmpqpmlilmmmlmlilillilmliiilllmpqppllmmlipllmmlpqtqtqtutumpqqquuuuquuuutuquuqquuu",
-"iillmmpqqqpmpqpqqrtqqquuDutttIIqututttuuDDttuDtpqttqtqtqppqqqpqtqqqqppqqpqtttttqtttttttqtuttqtttvuqqqrqnqmnpqqqpqtqqpmmmllmpppmlmjmmmmiiiimmmiiemmpquvxuuuquqqqrtqpppqqttuuqqpqqqquuuqqpmqmmqmlmlmlmptqpllmmlmmqplhilplhllikhhhhihiillmlmlillilitmlmmlmmlmpmpqpl",
-"hlillmpqlliililiilililmpmhlllmplmllmqqqqqtqqtqqqttttttttpqtttqqtqtCtttttDNONMOOHuuuutttutuuttqtuuniiiiiiiimmmmmnmllihhhhhilmmmpmihiiiheemmmmmmmmlmmmpqqmliiliilmplilmppmmpqpmlllmmmppmmmqtqpqqmqpqqqqrtqmmppmmppqqptuuttqtqtqpmqppllmmmmtqqpmlllqlillhhilmlmpmid",
-"mmmmmpmqpmmpqqqpqqmmliiilhlllllmlilmqqplhilplhlmlmppmlmmpqtuqpptqCDDDDCtpqtqtqqptqpmlmpqmpqpmlqtrmiiiqqqlmqqmmmmtqpmmpmmppmlllllnmmmmmlmnmmmiimmqqpmnqmiihlillmqmlllmpmllmpqpmlmmlmmnppmqqqmqlillmmllllipqtqqpqqqpqqqppmllpttuuIuuqqpqqpqtqqmmqqqmpuupmmqmpquupm",
-"mppppmppmpqqqqpqmpqtqttqqpmlllmpppllkhhhlmlllilllhhhillqhhllpmmphiimqqqqjmqqnnmnmmllmmmpmpnmmpqqmmqqqmmqnnqvvunqqqquuqtqqqqqqququtqqqpmqllhimmihhimmpmmlheeeheilmilmmhehmmmmmlliiiiiliiiihiiimliimmmmmmmimmmmmppqqqqpmlmlmmlmlmmlmppmpmmqppmppppmmpmlimmppmmpqqq",
-"ppqqttuuttttppmppqqtqtttqqpqqpppuqqpqpmlllmllllmplhilllpplhihllqmmlliiieimnnqmnqmmmqqqqiqutqqqqqqqrrqqqqqqruuqqntqqqqqquqtqmqqqpqmpqqmlmpmmpttqmpqqqquuqqmmmmpqqqqqquqpqqqqqqmmimmmmmnmmmjlimiieiiiiimmmlilliiihhehiiehhihiihiklhhilllhlhhhhllmlmpqmlillmmlliiih",
-"hilliihllmlllikidhhhhhilllmlpmmllllmmppmppppmppqpmlllillilllplmpqpmmlimmmmqqmmmnqqqqtqqqtqqqquqmqmqqnmmnqmmmmmmmmmmlihimmmmliiihillpmlhhillmmqqpnqqqqqqqqqqqqquuqmpqqqqquuuuuuqtqqqqqqqnqqqrqqqqqqqmnqqrqqmqppqqqmqqqpmqhihhikiilllllllihilllllihhiheddeiimlmlli",
-"lllllllhihlihhllihlllillehhlihhhhhhllmmpmmmmllmlmpmmpmpmpppqqppmqqqqqqruqurnqmnnmmmlimmmmqmmmqmliiiiiiimmmmjmmmnqqqmmmmqmpmmilihilmppmlihillmpmpmpqmmqqqhiihehimpmmpmmmqrqqmmqqummjmmmmlmmnqqnnqqnmmpnnpmpnpmpqqqtrutqqqqqqqtqqttqqqppmlpplmmllhlmmpmmmmllmmppqq",
-"mpmpqqqttuqtqqqqhililhhhmlmlllllmlihikihihhhhhhhhlmpmptuIuqplilmpqtqqmpqqqqmmmmlilqqqqmlmmlmmqmiiheiiilmhiihiiilmmmmllmmmmqmlmlipqqqqqqmpqqqqqqqmqqtuqqmqtqqmquuqmpmqmpqtqqqqqqqmmmmmmmmmqqmmllmmiimmqmmqqpmmlllmimqqnqqqqmqqqtqqqtqqqpmqqqqttuuqqqqqqqqmmpmnmqm",
-"pmpmmppmqqtqqqtttqttuuqpqtqqqqqqmmlllmmmpllllilihlmllimpmmliihhiiiliiheeililiiiimmqqqqpqlmllmmmlmmmmqqnqqruruuurqqqqqrtquuvuquuuqqqqqqqqmqqqmmmmmqqqqqqmlnpiilmpqmnpmqqqqtrtqqqmuuqqqtqqqqqqqnmmnqqqqqqqqqqpmpmpnqqqqqqqpmmmqqqpmmppqqpqihhhilllmmmmllllmmmmpqqq",
-"qqmpmpmmlmmqppnqqmlmqqpmqqqqqqqtqqqquuxwqqmpqqqqmmlilmmmhhimmlilhlilmlliljlilllilmliilmqmmmmmmmmqmmqqqqnimmmmnmlmmmmmqqmillihilmmpqppqpmlmlmmmllmmqqqqqpmtrpmntrmppmmmmmlmmmmllimmmmmmmiiiimmmmmmmnnmjliillmmmpmqnpnmlmpqqqqquurppnqpqqpuutqqqqqqqpmmmmmllmqqqqq",
-"mlllmmpmqqtqqqppqmlmquqmmlmpmpppllmpqqqqmmlmpqqqppmmtxIuutqppmqtqqqqtqqpqqnqqnmmqquuuuuuqutqmpqmmmmnnmjmmmqnquurqpmmpqqmmqqmmmqqmqqqnqmlqmqqqtqqqtqqqqrqtvxqqtuvtrqqqqqmnmmmmmqtmmiiiiiimliiiiheiimmmmmmppmpppmlmmmmmlmqmlilmqpmqqqqqnpmqpnppmliqmmmmmqqmmqqqpmm",
-"uqqqqmmmmmmmihimqmpqqtqqqqqqqqqrqutqmqqtqqqqqmllqqpmmmqqqqmmmpmmmmqqrqmlillmmmmmmmpqqqqmmljmqqmimmmmlimmmmnpnmnmmqqmmpqqmqnqmmmmlmmlmllmiiilmmmmqqqqmmiililqqqqqmqqqqqpqpmlilmpnmmmmlmmplmmlhilnlnqqqqqqpnpqppppqqqqqqqqqqqqqqqqqtqqqqpqmqqqqqmmuqmmmmqnmliiiiqu",
-"uuqquqqtqqqqpmpqmmmmmqmpqqtqqqqqqqqqqqtqqqnpmmmmqqqqtuuutqqqqqqpqpqqqqqmpqqqqqppqqqqqmmmmmliliihimmmmimmmmmmmmmmmqnmmmmmmmmmmmlmmlmmmmmmmmmmpmpmmmmmlmmmilimqpmpmmmlmmmqnpmmpqnppqqqqtqqmmmqqutqnqqqqqtqpqqqtqmlmmjmnqnnqqnmmnpqmmmmmmnpmmqquuuuruqqqqmmqmqnqqrx",
-"qpmqqqqqqtuuuqqquuqtuuuuvxuurtququtquuuqnppmqpqpqqpqqqqqqqqqqqqprrruuurqqqqtqqqquqqqmmmmqmliiliimmqqmmiiijijmmmmnqpmmqqqmqqqqmmmmnmmmmqqmqpnqnqqqqmmmqqqmmqqqqqqutqqqquutqqtrutqnpqruuqmqpqqurqmqqqqmqqpmmpppmllnnpnqqpmmmliliiimmppqqqqqqqqquuuqqqqqnpmmmmqqmqr",
-"lilmmpmmqqqqqqqtqqqqquuuqqqqqqqqqqnqtuutqqqqqqqqvurqqutqqqqqqqqqutqqqqqququuutttqqqmpmpmqqmlmmppnqurqqmmmmpmmmmmqqnnqtrqnqqqqqmmpmmmmpnqpmmpmpmqqqqmquqpmmpqqmqqmmmmmpmpnqmqqqqqmmmpqqmlmqqmihlqmqpmmmmmppllllmpqqqqqnmmutrtrquuqqqqqqqqqqqqqpmmmmqqmmqqpmmmmilm",
-"qqqqtrqqmmmqqmqrqqnqqqquqpqqqmqnqmmmqqqnuqqqqqqquuqmpmnpqqqqmqqqqqmmjmlmlmmmpmpmqqqqqqpqpmmppmqmmqnqqnqqnqmnmmmqnmmmmnnnmmnnmiifiliiimmmnqmnmmmmpmmmpqmlehiiiiilllmmlliiihiiimmmmlllmmihlmmihhquurqqqqtquqqpmpppnnmmmiihiiiiilmlnqpnpmmmqqqqqnqqqqqqqrruqqqqmmqq",
-"rurqqtqqqmmmmmqqquqqqqqqqqrqqqqpqmmmmmllmmmmlimlmihheiimmmmmmlmnqnmliliiillmmmmpmqqnpmmmmmmmmliiiiiimmmnmmmimljljifiiihimmnmjifemmimlimmqnmmliiihiilmmmhehhilhimmmpqqqmmllilmpqqqpmmpmmlmmmmpqquuuuqquuuttttqqpppmmmmmmjmmmmmnqqqqqqqqqqqqqqqpmmnnqrruqnqnmnqqru",
-"pqqmmnqmqmmmmmmmqqqmliiiimmqmmliqmqqqmimiliiiiiiilmmimpqmmmmmmmmqqnqnnmmqqqtttttqqqpmmmmmpqpmihhhehiiimliiiiiiimmjijjijmnqrqnnmmqqqqqqqqqqmmlilihlmmpqmmpmmmqqmqmqmqmpmmqqqqqqqqpnqqqqpmqqqpnqqpnqpmqqqpmqpqpollqqqmnqnqmmmmpqqqpnmqqqqqpnqqqmliljlmqqmmmliljmmq",
-"mmmmmqqqqmliihiimmmmmiiiimpqqqmmilmqqmlmmmmmpmmmiimmlmqqqqtqqqqqqnqqqqqmmmmqmpmmuqqqqqttqqqqqmliiiiiiiieliiiimmmnnqrqqrvurvurrrrqrrrrrrqqqqqnqqqqquuuuuqrqqqqqqqqqqqqqqqmmmqqqqmmmppnpmpimpmihlqlliiimlimlllllomqnmjmlmmiiiiiiimiilililmmmqqqmmimieimnqmmiiiiiii",
-"qnmmqqqnmmmmmmlitqmmmmmlmmmqqnqqqqqqmnqqqmqqqqqqqqqqqqquqtqqpppptqpllllhqqqlhehlmmmmmmmmmmmmmlmpjmmmilmqqnqqqqqqqqpmmmqqqqqqpmllmnmmqqpmqpnqrururtqqqqpqmiiilmmquqqmlillppmmlllliiiimmmmhihehiiljjmimiimmmnmmijmjiiiimnmnmiiijiimmmmmmqnqqmmmpmlmlhimqpmmmppmmmm",
-"qnpmnmmmqqqqqnqnrqqquuurqurrqqqnuurrqqqqxJuqnmmiqqqqqmqqmmppmlmlmmmlmmpmllmllmqqxuuuuuqqqqqpmlmmmnmmiijmiiiimmmmmmmmlmmmlmmpmmmmjmmmnqqpqnqqqqrrqquqqqmmpmllihiilliillilnqqqmmllillmqqqmmmmmmpqqmnnqnqqrqqurqqmqmiijmnnnnmiijmjimjmjmmmqmmmppqqtqpmpqqqquuuuqqtq",
-"npnqqqqnqrrqmmmmqqqqqqqqmmmqqqqqnqqqqmmmmqqmmtrqmijnqqqqmpmppmpmhlmlmpqpqtqppqtqqlimqqmlqnqmmillmmmliihiiiimmmmilmlmlllmmmmmmlmljmmmpqqpmmmljmmmmnqqqpmmqmmmmllmqqqpnqpmlmqqqmmllmmpqqqpuuuuuuuuvuvruruvqruurqqqmnnqqrqqqnnmnmmjmmmqmnpmqqtqnpqtqmmmmqqmpmmmmmmm",
-"mmmmmmnqmnqnieiiiiiiiiilnmmliiiiiimmmmmmmnmiimqmihipquuuqqtuttqtqtuuuwEHEuuqqqplihhimmmmilihhhhemmmmnqnmmmmiijiimmmmmlillmllliilmmmmmqmmmlmiiljjqqmmmqqrqqqqqnqqpmmmpmmllmpqqqqqnqqqqnpmnpqqqqmmuvvrrqqnqruurqqqnnmnnnnnnqnnqqnmmnmnmmmlmqnpmmlmiiehilihmlllmpml",
-"iiieeehemmpmiheihiiiilmqqqmmliilmmqqqqmmqpmmmlmmqmnruurqqtuuutqtquutquDEttqpqqqmpmmpmllmmpmlimmliimmqqmmmmiiiliippqmmlliliiiilmmmnmmmmpmmpqqnmmnurqqqqruqnqqnmmnmmmppqpmmpqqtqtuqtqqqpqqpqqqqmmlnqqqmmjlmmmmmmmmmliihhiimmmmmmmliilllihheeghllllihhhhilililmppml",
-"miiiilmmnqqqnmmqqqpqpqqqmmmmqqtqqtuqqqqpnmpqqmquqnpquqqqmqpqpppmmpmmmmqqqqmmpqqqqqqnmiimmmmiilliqqqrqqnmqnmmmnqqqqqqqmmmmmmmmpmqnqmmqqqpmqqqqnmmqqqnqnqmqmmnqmmqutqqquqqmmpmmpqqmmmmmmmqmqmqmqmmmmnqqqqqnmmmljmmmjiheeehiiiiiiiihiijmmiiliilqqtppmmmppqpmmmpmmli",
-"mqqqqruvqqrqqqqnuqqqqqmmpqpmmmmmqqqqmmmmquqqmllmiiimmmmmllllllllmmmmpqtqqqpmmpqmqqqqqmpquuuqtuvtvvxvuruuqqqqqqqqnnqqqqqqqqpmqmmmmmmmmnpplmqmmliiiilmmmjmmmmmmmmqpmmmqmlhhiiliiillmmmmlmliiiiilmmmnqqqruuuurururummmmiiiliiillilimmmpmmpmqqqtqttqqqppnqqqqttqqqqq",
-"qruuuqqqquqqmmmllimqqrqmlimmmmmpmjliiillimpieiieiiimliiliillllmpilllmqmmllliimmpmlillliiimlhiqqmmmqqmmmmmjmmmmihillljlmmliiilmlliiihhihhmpmlieeiiiiiimmqqqmmliiiihilpmmhehhhihiimmqqpmlilillmpqqqqnmmmnqnmpmmpmmmmqmmlmmmmmmmmmnqqpqqqpmlmpppmppmmmmllmmqqqqmpqq",
-"mqqqmqrwqqpmpmmmhhhimlllhmlilmlmqlhhhiiilpqpllllnqqqqqqptqqqqppqqpmmmmmpmmqqpmmmmmmmqqqqmlmmmmmmmqnqmmiimmqmjeeihiiiiiiimiiiiiiieihihhlmlmpmllmnqrqmmqqnmmmiiiihimmmmqmimmmqqmmpmppmmmqqqmququutnqqnpnqqmmqmmlmlpmllqqmihhililihliiiilihlllpmllplllllilmpqqpmpmp",
-"qqpnqpqqqnqqqpmmmmmlmmmlqqqmmpqqqqmmmlmlmqqqquuquruqquuvqqtttqtuuuuqtqqqqtqqqqtrxuuxvuuuxuqqqqqqruuruqrqqqrqmmmjieiiiiiiimlmmmmnqqqqqqqutuuuqqqqqqqqqrqqnqnmqqqqmquqtuuqqqquqqquqqqtqqpmqmmqmqqmmmmqqmmmmmmmlmmqllililihiliililihlllmmppplmqspllmmpqqpmpmpqppqqq",
-"qmllqqmmmpmqqqpmqtqppqpmqutmppmqqtuwuttupmllmqqquurqquvIqppqqpqtqqqqqqqqqnqmqqqqmqqqqqqmuqqmmqqqqqrrqqqrnqnmmmmmmmjlimmmmmmmmqqqnnqnmmqqqqqqqnmjmmmnrurmmmmmnqqnqqqqqqqqmmllmlmqqqmjlmmmqmpmmmmilimmqqmihihhhimmmmmpmmlmmliiiliihlmmlppqppoqtqplllmppmlmlmpmmpmp",
-"pmlmqqplpmpmppmppqtmmtqplqplpmlllmpqqtqqqplllppmmmiiimpqqqmlkilpiilmmmmmilmqqmmillmmqqpmqmihilmmmmmmmijmiihiiliimmmiilijljmmjmmmimjmllmplliiiiieiiimmqmiiiiilmmmlmmmiliillljllmmqmhehilmpmmqlilhiiimmmliliihihiliilmmpmmqmmlmmmmmqtqpqtqttttutspqqpmmmqtpqqppmpm",
-"qqppqqpmmmllmmmmmqpmlqpipqmllmlmlllmpqqphiihhhlimmmiimmmqqmlihhlilmmmmmlmmqqnpmlimmmqqnpqmliiihhjmmiiiiihiiiijiimiieffiiiiiiiiifhfhieilmqmmiiiiiihhilmiimmqqmmmmnpqpmmiheeehehiiilmqqqmlmmtqmilmiillmqmlqpppmppmmmmpqqqquuqqtuuutDEDtttuHDHDGCDCDDutqtDIDDuDutuu",
-"DDuDuDttutqpqqtqqttqqqplttmhlmlptqmpqqqpqttqpqppnqqqqqpmlmppplhhmmmmmmiimmmlmjmmlilmmmmlmliiilihiijljlmmmmmmmliiiieieiiiiijljmjmimmmlmmquutqnmnqqqmqnpqqqquuqqquuruvuqmmqqqqqrtqmpqquuuqpqvxqpqqqqnqtuqquqtuuuttuutruxuuuuutruuuquDtqtttCCDtptCtqtDDuDCqHDCDLDLH",
-"NDCCDDDCLDCtCDCCuDuuuuutuuqmpqqqqpmllpmmpmliilihmnqnpmmllmpqqpmpqqqqmmmlmmmmmpnqqqqqtqtqmlillmmmmmmnqnmqnqqqmmmmnnmmmmmnmmnnnqqnrqrrqquEuuuqqqnquqquqqqrqqquuqqqutquuqqqmqqqqqqqqqqqqquvqquuqruuqqqtruuuqqqqqqqqqqmpmqqtqquqqpqqpqqpppplpppopppplmqpmpqmzqqtDttq",
-"pmlmqCDCztqqCtCqHuuDHDDIqDuuIIutututtqttuuqqtIIuuvxvvxurutqtttuIuuuuuuqqruuvxvxvququvxvxurqmqqqqqquurqqqqrrqnqruuurqnnnnmmnnqqnnijmiillmmqqqnnqrmmqqmlmpuqmqqqmlqmnqqqmqqqqqmqqqqquqqqqqqmmqmqqpilmmpmmmtqmlmpppmmqmmmquqquuqmmqqtpppppllpolpsplmqqmmpqpqpmpqpmm",
-"llmppqpmqqqqqqqpruqqquupptttpppppmquuupmptuuuutqDDtqppppuuIurruquuuurqqquuuuqtqquuuuuuuEvqmmqqqmqqtqppnqqqqqqmmmqnieeimmmmmlmjiiiljmmmqtqplhllpluqpmmmpmmqqpmmmpmppqpppqhmtqqpmmpmlpqpmhpmpppppqpqqppppmtqllpuqpnrrunmmqrtqqtpplqtqpmmmlpquqpmppqpllmpqqtqpqqDtq",
-"qqtqqpqpppppqppqqtuqqqqqqqqpppqupmlppmllqmlllmpqpppmmmlmimqqppnqmmqmpmmmmqnmmmpmqnqnnnqqqmmilmmmlmppmlihjiimjiiimmmiilmqqnnqnqmiiimllmmqqqqppqtqqqqpmpnpmqqmlmpqlmllmpmpqqqtqppmmpmppppmlppmmlmpppliipqtqqplmqpljnnrqnqrmmlppppptutttuuttuutqtqqttDuDtqpqpmmqqqm",
-"qtqpmmmqtrtqqtqqquvuqqtuppmlmppqqppqqqpputpllpqqpmpmpmpmhlpqnqqpmmmmmmqqmmpmmmqmmmmmlmmmmmmmjlimhilmmmmlmlmmmmjmiiiiimmmmmnqqnmmlmjmmmmpmmlllpmllmmmmllmmmpmmmnppmllpppmppplmmllllmpmmmpmpqpplmmpmlhhlpqllllmppmrrrvvvuItututtuDuHEuuuHuuHuuIOIDOOHMDOEHDDttDDtq",
-"DDHDutDOqqqppmppmqqqmlmqppmpsqplllpqtqpmtpmpqpplqqqpppmpmqqqqqqqmmppmqqtmqqqqqqqnmnnmmmmmmmmmmmmllmpquqqmilmmiilmmmllmmljmpqnpnmnnqqqqqqqtqqpqqpqpmmpqnpqtqtqttqutpqqutqppmmppppmppqqqttttttqtqtwvwwuuuutttqtuuuEvvEEuuEuuDutuDHHEwututqtttuDIHuDDqqtqCtDutDIOOD",
-"qtutqDIOOOOODHOOPOPIPIIIuutuuHutppqtutppqqqtutmltqpmmmpqppqqpqqqpqqmqpqqqqqqmqqqqtqqqqqqmmmqqqmlmmjjmmlimmmqpmlmqtqpnqqqqqqqqnqqqqurtruuuvutqtutEuqtuvwuuuuvIvuqtquuututquuutqtuuutuuwuuutqtuuttuuDIIutquuqqpppqqnqqnmmqlmpmlpttpqtqtqqpqquuuqpppppqpmlhlllpqtuu",
-"lmmmlpqttttqqqDNIvtuEDutOuuuIOOOIHDuDuuDHDHEIIHutttqtuuDtutquuvuuuuuuuuuuuuuuuuxEEvurqqrqqpqqqqmvvuuruvvuuuuuutuqqqmpqqquuqqqqqqmnqqnpqqqtpmlmmmuqmmqtqqpmqtqqpmlppppmmmpqttqpmptqpppqqpqpmmpqpmlllmpmmpqmlllillmmnqnmqunqqpmqtpqtttqtqpqtDIHuDItquuHIDIutqqtqpp",
-"qtqqqquDDDDtqtDOEutuuutqutttuHIOHuttqpqtttttttutDDDHDHDDtuuuuIIIDEIEvuuDuIuuuEIIuuuutqtqqqqmqqqqmmnmmmqqqqqqtqpqllmllmppuqqqqpmmmmmmmmmmqtqpmpppmmmmmmmmllmmpmmpmmllmomllmpmmlllmmmlllmpmpppmlmmpppqtttttppqtqtqqqqruruIuIuttHuttuutuuuuuuHIOIOXOIHDIWY2WPOHuttq",
-"ttqttDDDuDtqpmqtuqqqtpmpqqqtttttqpqttpppmpptpqttqqtCtqpmpqqqquqqqtqtqqqqmmpmmqqqmmmmmmmqmmmmlimqnnrqnnmqillpmompillllmmlqqpqqqqpruqqpmqqqqtqtqqpqtuutqtqqqquuquIutqqtuttqqqqttutqttqpptutuxuqpqutquIIutuutquutqpuqqqqqqqqqtqtEItqtttuOWXHutqqqtDtqtuuDwtuutqtuuH",
-"qqtuuqtqDtuDDDDODDEHDttutttptDtptpptqptOQHuqtpmllpqlpV0QuqqtqpmpqqpmllmpmquutqpqqmmmmmmmllllmplhmmjiiiimillmpptttqqpmppqmpmquuqqqrrruuuuuwuuuuttqquuDuuuuuuuuuIEHuuuHEwuItptuutuIIuuuuuuIuutuwutqtqqtqqtquqpputqrqnqqmmqqtqmquupqqquORIuqpmpppppptuDIItppqqtqppp",
-"qtqtDtDutqDDDtppuuuDDuDIIOOHOWXHtttHIDOY0VONDCtqtLOODHDutqqqqppqlmpmppqtutpmmmpmmmmppqpmqqqqtqmlnnnnmmmnmmmlmpmptutqqqqqqqtqqpmmqmmmmmpqqqqtuutquqmmmpqtipqqtrqqlpqtppqutqqtqpmpllllpqttqtuqpmtutqtpppqqtIIupquwqqpqqpnquvtpptuuupmlptDumpqpqqqquuttuDtmmppqtuuq",
-"qqqquDHODqtqqquEttqqttqtDHHHNXODODNUUHHOHNHHNHDGLQYYXNCDODDHDuuItuuHIIOROIDHHIDuwDwEIIwutttuuuutvuurqqqqqqmpppqmlmmmlliimqqqmmmpmmmmmqqqqqqqpqqpqqpqquqmmmqqmplipqutqpqumqtqppqtutqqppmpqqppqtqqqtqqmptuptuqlmpmpmqqqqpqtwJIuuuwuwDxDuDHquIDuIIHuDuHOPHttqqtHIut",
-"qqttCDDDDtqtqtOYuqpqqqpppttttHHsONNOHtqsqtqpqCCCppCNCtqqtqtDutqututuuuDDtuuDIDtpqqqqpqpmqqtttttuvvrrqrrqrqpmmpmlllmmmmmplmmmmmmmnqmmpqqqtqpllmppiipuuuqlqqqmmmpputpmmplhlpplipuuililmqqqlllptqlhlmmmlmpquutqttqmqpppqqqqtuPQPuuumtIOIuuuuDIHutuupquIIHuqttpqutqp",
-"DIODuDtqtDEOHDqtDtqqtuCDptDDDNNCCtCCCCtCNHCppqtpCNONOYWDqtuDDqqqtqqpmpppqmpmmpmpqtpmmpqpqqqpmlmlpmmmqqqquqmlmiihjllllmmnmmliiiiiqmmiiliillillmpqhiiillmmhiihilmqupmllllipqmhhllltppllhhhlpuuqplmpqttqqqtuuutuwupqqqqqtuuqqpqqmmttttqpqHOIHuIuqtItuIOIutttttuuHuw",
-"uDODDODtODOOODDuDDuDDDDHtNNNNOOHDDDDDNLDUUHttCDtlpppCNDpCDOOODuDDDtqttutqttttqpmliihhlmlppmllllmmllilmmlmmiimmmiiiheeehimiiimmmimiilmmmmlmpqtqppqpmlmmpqquIxuxuuqttqpqqtqppmmpmlmmpquwwuuuuttqttutuuttqqqttqqpqquuttuxIJIxvIxuvvuuqqptIXutqtqptDutwuttuIuuuwuuuu",
-"mqtquDODODtDIOOODDDHDtDDDOOHNONNWUNNNNNGHONCLONNCCCCDNDCtCDODtDHDDuDDDDDuDDEODqmqttqtIIuqpppqttttqpmpmmimmmmmnnqmmmmmmmmmnmqnqqqnmmqqutqquuutqppqqtuuurtqqtqqqmmmpqtqpqtqppqttqqtttttqqptplmptqpqpmpppmltqqtqppqttuqtuIIuqtqqpmmpmommmpplpmllpqpmlllpmptpppmppll",
-"lpplmtqpDtqDOECtqtDENDOQNUWONWWOUNOUOUNDNWUNNWUCYUNNLtCODDOOOEOVOOOOOVOOWODDOOOItIDuuOIDIutttuutuuqtuuuuqqqnmmmmnqqqqqqruuvurqrruuuruuqmpmplllmpmmlmqqqqquqqpquutqqtIwqlpllmpmptpqqqqtqqqqutqquxuqqquuuttpllpqmllmplmqtqIvumimpqpmllllmlmEHmpIIpqplpqpppqpmptttq",
-"mmmmqqqmimmqmpmjlpqCDCqmDNDCLLNUUOUWUOOOOUVUOLOWONOMNLOUHDCtDHHtHuDHOIDtuuqtuuqqqqqppqppqmmpqqqquqqqpmpqtqqtqppqpmmlllmppqqttqqqutqtttttqqqttqqpmpqqpqtuqqtuutDDOEuqqmpqnqqqqqqqqqqtqqqqDtNOHtqoqlmqqtqmmpliplhtmlmptDDHtHtpsqttqptutmtutuuuqqqqtqppppqqpqqpmmmm",
-"mqmmnqrqmmmimmmqlllppmpllpmptCzHCCqCCzCCCDDCqtzCDDCtmpppqtttDHDtqqpmppmlqtuqmilmqmliillitqpmqquuqpmqmlmmllmqtqtuutqqqttuqtutttttuuutuuuDtppmppppqqqqpmmlqmmmpmmlqpmpmllmppqpqpqqmmpmpmqqplpqplplmilmmqqplmqtuqpqtqqtuDHDtDtppppttpqtqptuqttqqppqqqqqmmpmmqqppqpl",
-"pqpmppqqqppmlpqqlmpmqpqqlmpmzqCDDDCDDDDMLDDCCztqCLDCtqqtmppqtttpuuttpppqqqpmqqmiqmlhiilluqmlilmmmmpmmliimmpqqqqtqppmpqpppmppmppqmpqpllptqqplllllmppqqpmlppmpquqmqpmppmmpmmmmmmppmmmmlmppqmmpllppqmlmpquqttuHuuHDHIIOOOIOOQOtHHDHODuDuHOHIOOOHIHIOODDDuttqtuqqDtm",
-"uuutqqqpllmlmllhpmpmpmppqCpptqqCCqqtzqCCLDCzCDCzpppqpqtCmppqttpppppmlmpqmiimpmlitqpmmlmmqpmhhilhmmmmllilpmpmplmmqmmompmlmppmpmpplmppmlpqppmppmlillimpqpmmihiptqpmmmpqmpqllllmpmmmmmmllmmtplpllllqqqqquIuutDIuHPIPVWVQOWXQYXOXWW0WRWQOWYRYWWWXUXWUWUXOOMOHVUMHOEq",
-"DNINDttttDORQOutillmllilqqmlmpmtqpqqtppptqpqqqtqqqqqpppqtttttttqtuuuttuDuOXOuqqvttqtqpqpmpppqtqqpmmlmmmmmpmpppppqplmppllpmmlllmpppqqtqqpqpqtqpppqpmpqqqpqtpmpqqptqtttqqqpmmmppppqqqqmqpqtmqtqtuturuvuJOuutIWIDItHNONHNU0NWTNTWOWOUWUNOWOWONNHNGDOOPUOOODDXYQOOOH",
-"HDNOOODDtDHOONHDtCDCtppppqmlptzNDCDLLCqCCzqtCDCCLNLDDDDCHODDtuCtqtttqqqtuIOIqmnquuuuutququuruxIuquqqquutquuuuuuuqqppqqpmqqppmppqtqttuwutIHuuuHIDIuuuuDuDIIIuuIIDPIDEuuuHIDuuuDutEIMIDuDDPDHUODNqpquvDIOuuuIDtuDtDDDDCDQWCONGHNNWNHNOHDNHUNNHDDHCHLHODDDDtLPODDOO",
-"CttDNCCCNNNNNNONOUXUMODLqCttDLDODCCDDDCDLNDLLNLMCDCCLDDDDLHttuDtIOIDuuuuuuqquuuquuuuqqtutuqpqtuquuuqtuuuuxxuuuutwuwuuuIxHIIIuwvIIIuDIOIDIHDuwDIHuDDHDDHImtqqtDIuDttqpmpqOIDHEIDuEEDDDuDDODuDtqmlmmqtquupDHtmpqtDttGDDGDNNNHCGNNWUCGNNGNNWWNNNNNNLDLDDCCCCCCLDqCO",
-"NtpCHCtCDCCCCtppDDNDCzCDCLDzDCqCOLLLNLOONDLDDDDDDDLDLLHDttCqtttttqqpppppmmqqnmnqmqppmmqqqqmiiqutqqqqqqqmpqqqqtqqqqtttuuHuuuuuuutDttpqtttpqptqqppqqtqqppmlmppqDtpIuqpmmpqppmmtqqpqmmmmmpqDqqDqqplimqqmqqipuqlppmtpqttttspGNCsCCGN1CCNNGNHNCCtGCGCDNDCCCqqODDLDtqD",
-"DNUCppCUKspppCCpDpCDmtLpCqmlpqCDlpqptOOLDDCtzpplppCDNDtCqtpppllpmqpiilmmmmpmmmqqqmlmpqpqplllmmpqqqqiimqqpqplimtqmpqpmpqtutpmpppmpqpppqqqpmqqsppqpqttpmpqqplmlmpqqpqpppppmpppqttpmqqqmlmmqppppmllllmmqqtuqtuutqtuDOODsqLWDHNUWNNGCCGNNCCCsCCKCttCDOCzOMCCOzDOLqCz",
-"pCCCCCCCpCUNpCLCDpqCpqDqmtNODCDLOUOCqCDCqqqpqpppmppqmpmmtpmtOQHtmpqtqqplpqqqqqqrtqqquqqpmllmpmmmqqqqppqqmmmlllmplmppmppqpmpppqqtmmmpmpppppqqqppqlmpmmlmpmmmppmpppppqpqqqtqqpmpmlmmqnmmmqmpqqqtqqurquuuuuqppqtutqHNLCtDONCCGNHNN0NKNOUNNTXTNNNKNWLLDDLtmCLtztCNDp",
-"CCKNLNLNlCKLKNTpCqqCzpqCCDOLCqCNDOOzpqtzqpqqqpqqpqqppCDtqplpuOuppmlmppqqmmmmmmnmihillliimlllmmlmqmmqqqmppmpmppmmlllmpmmmlmmmppptppqpqtqqtqtttqttqqqqqqpppppqtqqqqqqqqqqtpqpmppplrurqqqqutrttqmlhmmllmmmmmllmpqqpqqqlmCCpqzCCppCWCCCKNNCNUNDGDNNUNCLUNqtLOUNzCNCm",
-"NUNKCCLTNqCCDUTCDDCDDqmqOLqpqppmpLUOOOUNDCCqppqqpqqlpDDCtttpppqtutmpppquDuuuurqqtttuuuuxuuquuuuwqmpuuqqqqllqqpmpppqtqttptqtqqqqqtuttttttqpqqtttuwuutttqpqpqtutqttqtqtqtquuuuwEIInmmmmmmmmmqqttqqurqqqtttqquttqttDDCqqLDqmtDLpppLCCtCqppCCppCCCCpCmCUCCNLCUUCqzDN",
-"ULCzqzCLZNLUKzCLUNDCLCtLNCqCDzmllpqqzCqmLDCDzpqCCLDqqNHqqHODqtHODDDIDqqqEDDDruqnmmqqqpqqmllmpmppmmquqpqupillpllmmmpqqqpmqplllppmtqqtqqppmlmpqqqqtqpqqpmlpmpqqqqtpppmmpmpqqpppmmpmqmmljmmpquuvHuuIvuuuqqqqtttqpqtAOMDrEDqCDLNDzDNOLLDDCDLCqCNOLCqllpCpzLpmsppqppZ",
-"CplqNUCpLpzUNCLCUODztDUXDDLOLDDUDLNDNUODODCLHDCDDONLOUODptCttDttqtDqppmmmmmmqmnmlmpqtnllmmqtuqpmhhilihimqmmmmmpplmppppmpplilmpqpqttttqqptpqttqptppmpqqppmpmpqtquqqppqttuuutuqpptrqrqqqqquqqtqppmmmmmmpmmplilqtplmqqqmmmmqqqqqqqDDCDLDCLONDDDLDCDpCLqpCClCCllCplD",
-"zqzLUULmmmpzLUMzCzCqpLULLCCDCCNVptCqqDLCOCqLOLCDpppqCDCtmpqpqtphqqpilqqmmqqtrqrupmmtqpmlpmmqqpmmhihhhehhpqqpppqqqqtutqtqttqttutqtqtuutqpttquutqqmmppqtqqpmpqtqtutqqtqtuupppmplmqmmmmnmmmililmpqtqqqqqtuutplpqtqmmmnqnmmmjlimllmqpmptqpqDCqqqqqCDCTUKLCzpTUCmKtlp",
-"mDSULzpqhDYLlzNzllDDmDNlCpmDLtmllqDCqCqpLpmCDtmpDqqCDqpmpttqpttppttqDXIlqrDEDruEIuttuuuuIutqqqqtqqqmmqmmimplilmlhlmmllllmpqpmlhhlmpqpppmlllpqppllllmmpmpmlpqtqtqppplmmpppmmmlhlmmmmnqqqqpmmmmpqtqqnpmmmilmlllhhhjijqnlimlmqqmmlmmmpqpmpqmmpqqqDOlCLCNpoKq0LoCCpN",
-"qmqqDOOOuMOIuqDICqpCOOCmDCqpCqplmqpmtqqMDqtuqpqHCCCDOOHuOMEDurDEqqqpqtqputqqqqquqrurqnqrqqqnqmmqmqnmuvtqpmqqqmimmmpnmlmqmmmppmllihimqqnmmmmmmmmmnmmnmnnqqqrtqmmqnmjmmmmnlmlllmpqqlmpmimlmlmmpmlmmquuqmmpqmmmpqmhjijimnnmnmmnnmmmlzmlmpDqllmqqlmmlllmmlmphlmmmpmm",
-"mmmmmqqnqturqtuDDDCDNODCOMNLOODCHODDDttOIDOOOqDOONCqtDOOqtuqqpnmqqpmmpmlrqqqmlmqmmmmmmqrimmmqqnqimlhmmmliihmmmmmmjmmmmimpqpppmmlunmmnmiimmnmmmmmnnmnmmmnnnqqqmmmjjlmmmmilililmqqmilnmlmmqmmqqmmpqqqqqpmmmlmmqqmlmnnmnruuuruuqnmnqLplllmlqqqmmiiqqmlllmqDIDtmlmmm",
-"mqpqpmmmmmqqtDMOmpmpmpmpztztCzqqqpqtqqqqpqCDDpptOODCtqCDqqmqqqpmmpqpqquqpmmqqquEqqqquqmmmnmmqqmmmqmiimmmmieimqqquqquqqqqmpqpmllpnpnqqqqqnqqqnnmqrqnnqnnquqqrqmilimjmmmmjlilmmpqppmptqqqqutuDutqqqqpmqqmmmmmpnpmimpmliiiijmnqmimqlCmpmptmqDDqmmpmllqDDtqqpqqttttq",
-"qqqqmmmpllilmqqqpmpppqqpppqqppqqpmqHqqtpmpqDDqqqtCDCtqtDDqpmqqqqhilmmpqtmmmlmimmqnmmnmiemqmimmihmqlehihiqliilmmimjmmpmmmtrtqtqttnqrrqmiiiljmmmmmmmnqqnqqqqqqqqmlmmljmmmpqqqtuuuuqpquqqtpillmmlllqmhehlmlihhhhiedaeeeeiimdeiiiiiihllmqqDqlqDqpqqqpqqqtqqtpquDDDqq",
-"qqqqpmpqqmmmmmmpqppqDLCqpqmpmmtCDptDqqqmqqqtDtqqpqqpmtMWODqmqqqmuuDtqpqqutqqqqqqIuqqquuuimpmqnmqimmimlimmlheiihedehjiilmhedhhhhhlmmmiheeddddddeeeeimmmliiheilmmpjiiiiimmimqqmlmplippmmpicdehhhhdlhddeehiiheiilllqqqiheedmlimmihehlhpplmhhqqpimmipmpqqpqqtqmpqqtD",
-"mmmmmmmmppmpqqqqpmmpCDqpppplmpzLDqqqppqtCtqtqqpmttCtppqtpmpquuqmllllhedhihiiiimmiljmmmliiqqmmqqqmmpmqqmmliiilmmiimmqmiimliklmpmmimlieiileeeeeddeeeinqmilmilillmpijmmmmmmhlmlihhihhllklmlhlllppmmiiimmllihiehhiildhiilmqqqmmmpmihdlhmplpimtqlilmihlpttqmmplhillmm",
-"hhhhhhhhihlillmmpmppqqppqqqpptDDDtmpqttEtDDtqpqqqqtqpliiilmqCDqmllilmlllrqmpmlilimquqmhehmlhiiheililmihhimmlmmqqmmmmlihiililllllurqiheieimmliiiiiimpqpmmqpqpmllmjmnnmmmmmqqtpmmqllllllplhllllpplpqqqrqmmhhhehehelmplillmmllpqpppmmlqDqDqtqqmmmmlmliiilpDDqmlkedc",
-"qmmmppmmqqqqmmlllllihhilhhhhlllllmliqlelhlmlhhilmlihhilpmllmmmmlmllmqppqqpmqqqqqnqqmihimqunmmqmlimiimleeelmieimqiiimnqqqlmmpmlllmmmlmmmmiliiiiimlimqqnppmmmpmllpmmmmmimnlmmpmmmmllplllphllplmpppuqqqtqqmqqquEDuuDOEtppppqpqqtquDOOqDCqqlmmmpqqpmllllpllmUtlkilpq",
-"qqppqqqmqDCpmqqpmmppppmmppmmllmtqppqpmmllillllllhilpqpqtqpptDDttquDIDuqqqquvuuqqpqqpmqqpuqppqqqmmlimmmilmmiimplhmimqqmmmqqpqppppnmmlmmmmpmmpmllilmqmqqpmmtqmlpplmmmnnmmilpqqmlmpllpppppqppqCCtqpmmmmpqmmlqqmqqqqmmlmmpqqDqtDDtqqODDqqqqqtCDDDDOODDDCqqtCCCLPODqt",
-"OMDDMNDDOODuqqqqppqqDDtqqqtDDqtCDqqqqppqqppmqqqqmmpnpmmpqqqDODOOODCqqqqquqqqqqqqqqqqmpmlpmmmqqqqIuqpmllmuuqqqqniqmimmliiiillppqpmlilmmmlrpmmmlmqmqqqmlillllhhllhiiimmmieiihhhilphlpqzCCCpppqzpppihllmmliimpmmmilmlllllmmppqDDqplmpquLDDCqqqCqqCDCLDCqCCDMNDNLCDL",
-"ONNLDLONLCCCDLDDDCDDLNLDNCCqqppqqutpqDDDOEDuqqqqqtqDutqqptDDqpqCuqmmppqtqqpmmqqqllllmpmlmpqqqqqtuqnqqnmqnqqmqqqqrqmmmmlmqppmmpmlmppqqqqqqqqqqqmpimqmiiiiquqpmpmhmmjmiiihliliilmmhhlmommmpmpppmmlhiimmllilqqmpmlmlmilmmmqmnquqqleilmqqqqmpmlmpmqCqCLCCDLLNLDCCCKO",
-"qzDCCCzDCmpLUOLNUOLDCDLOLtmppqppqCqmpDODDHDtqppmmmqqqnpptDHCqppqDttpmlliiiilmljlllllpqplhilllklihilmqqqmmpnqquuurqqqqmqqqqqtuHIwDuDuDDutqquDuqqmquurqqtqqqqppqpmrqqnmmiipnppqpmlpmllhllpmlmllllllmpmihiimmmmqqlmiiimmmmmmmpimmmiiihhililmllllllmpCCCCCLNCCCLDCDL",
-"ptDDCqCzDqCLULCztDDCmpqDppqNUOzpqDDpmqtmpqqqqpmpqnqqqpmlmmpppppqpqqqqpqqpqqqqqqnmllllmlhlllilihhiilmmmlilmmmlmmmmmmmmqqqqqquIIIDODDqqqqntqqppqqqqnnmmmmilmpnqquurqqnmmmmnppqqqlillihllmpmmlllilhnqqmihhlmmiimmhelilmiheeiiiiimqmmmpqqqtuLDDLCzqCmpzqpqCqzCLDCCCC",
-"mpzzqqqtztqDDCpmlmCtpmpqCqtDLDqptDtqpqpmmpqtmmlmpmmqqqmmllllmpqpmppqtDIOEuuqqquuuuutuuuqqpppqqqpmmmmmmmlimliiiiheimmmmmmmqpqppppDDqpmlmlmmmlilllqqmmqqqmlmppmpqqmnnnmmnqpmmmpnpmmmmpnqpmtqqqqpmpqqqmlimmqpilqmihmiimjeeelmjlmmmmdhiillilmllmplllpqCpmompCDCppppp",
-"pppqztzCqCCzCzCqpqzCCtzCODpppmmpqqqqqtqttqtqqppqjmlmqqqqtDDttHDtODtqqqqpqqmmmmmplmllllllllmmlllmqqqmmqqqmnqmqqqqmmnmmpnpehllmmquDuqqqqpmhlmmmmmhijjjmnmjmmiiihhhiimmmnqrqqqtuDuuEHvDIuuquuuturtqqqqpmmqquqqquqmqqmmnmjmnrnqnnmmjqrturqqtqqqCLLKLzCCCpqCCNLKzppzp",
-"LDDDCLOUNUODCLOLOLDCDLNOCqzqCqtqDttttqtDmpqtqtEPIDuEEDDDqtCqpqtztpmptDqmmnqqurqquutplpmpmppllhlpmqqqquqmmmmmmmmjqruqmmmmmmmlllptuzutuuqquuqppqtrqrurqqqnpmmmmmmmimmnmqqrqrDOOOIDurqqqqqqqqqqqqqqqmqmmpmmmqmpqqqEErnnnmmqrqnqrqnuqqqpmqtDODzCCCzCCNLLCTUUNUWUNUUN",
-"nDDmpDLDMMLDUOLUCNNLNUUCLKNUNLKNCNULUUULNCCCCppBOErqpqqqmuummqutOuqruuuuIuqqqtrtqrurrquvuEJuqnqqrrqrurqqnqnmmmmmppqpqqplpppppptDKCKKKKCCyyKCCByytqpppqttpppppppppppppmmpqqqqqmquvqqnnqqnnnmnqnmmmmmnqnmmmmnqqqqqmnqqqnmmlqtllllolqCqpliqpmpqzpllmmtqpqqCCDCpoqCC",
-"mmmmmmpqztppCzpqplpCCCCyppsCCpqCpypppKCsplopypppmmmmqqqquEIttuDvEuuurqqqqqqquqqmimmmjjmmqruqnmqqmjmnqrrqvuuqnqquqqqqtuqpllmmlmptKLLLLSTSNTTTKByBqpmlllmppqtuDtttKLLCCqtztqqqqmqqruqqqnnnqmmmmmmjmmmmqmmiiljmmjiimjmmmnpplqppoppCqCqqqppCLCzCDCqqOMDDzqqqlmqCqplk",
-"DrCDDqzDDCqzLDqCDCCLLpptCqCCCzCCzCCpCNLCCzqCCCzqDDDDDEDDDDutqqttqpqppllmlllmpplhmjmmmmmmmmmmljmiiiiimmmmqqrrqqnnqqqpqqqpuuutqqqqCKLLKCKKCKTKCyCKDCtqtttqqCDDHDDDMNLLDLDOqqmmqpmmnnqnqqqnrqnnnqnqmmmmmmmlmmmilllijijmmmqqpqppqspCLDCzDLDLVNDDLDLDDDCDDDCqDDNCCCCq",
-"nqqqzqtzDLLNUOLOUONOKqqCLCCLLCCCHLDDNUUNLNLLDCCCUIDtqttqtqqpmllmilllillmlililmlljiiijmjimmjiiiifliiiimmmiimmnmmjlmmimmpmqtqqpmppzzCCppmppyyyyoyCtqqpqqtqttDCtqtqKKCzCqDDqpmpmmlmimmnnmnqqqnqqruruuuuuuuqqqpqpnmqmnqnpnpmqpmpColBDCpmCDCDNLCCqCqCmpmqqCDCDCqpptCC",
-"immlmqmlmqqCDqpCpzzpmqCzqmpqqqnqqqqqzLDqqqCqmmpqpmlimmpqmmlmlillmliilmpmtqmllmmqiiiiliiililillihiiiilmmmqmiehjnqlmmmmpqqhmmmlmpmqqzpmllmCCpoooollllooolopppololpqqppmpqpmmpmliimilllilmmmiiimpmpllllhihlpmmmmpqqqqqqqnmlqplptmklqqmlpmpqCqqqpqppqqtqqppqllpqCqlk",
-"muqmmqqihllmpllpmqqilmqmliimmppqilmmpmmlqqqlihiilimppqmplllllmpppmlhlpmlppmlllihmmmmmmmmiiihilliiihiiiiiqmiiiimmimmmmnqqmqtqmppmmpppppplypllomolppomplolplolllppppmmppqqmmpmliimmmmliillmllllmmlqqpmpmppmlllmpppnqqrqpmilmppqpklpCplpppCqCzqpqpmpqzqmlmpllpCCtol",
-"nqqmmqmlmmllqplmmpqpmplimllmpmmqmmpqpmmmqzqpmpmlmmlmmllhlmmllpplmmlilmmlilllilhlimmmmiiliimliimlmljiiiiimjmlmiieijmlmmmqqqDpmmmhqpmmpqppplompppppolllllkppppppppqpmpqqppmpmpmlmmppmmomllqpmmpqpmpppplllmppppomlpmnnqqmmlippmppllqqpmpqqLpqCqpppmlmmpmmmpqmllllll",
-"qmlmqmmmqqlmCqmlpimqDqlmmlilmmllpqqqmmmqilmmDMDqDqpmlllipttmmpmlmpqpmmpmllllmpqtmmqqmmmmqqqqmqqmmmmnqqqnmmmmmmliiiljimqmmuDqqtqqDqqtqCqmpqtppopppppppspqppqqppompmpmpqqmpmmqqpmppmpqzqpmmmmpqqqppqppllppppppmpolqqqqqppmiqplolllppllpqqCqCzpmmpmillmpqpqDqopppop",
-"qnCEqllihlpCCplmqmlmqmmqtmmpqmmqimqqmmmmlnmlmpmmilmmppqqlmmppmptqquDttuqqpmplhmqqmmqmiiilmmqmmlllmmmpqqupqqqqqqqmqrqqqqrqqqqqmqqqpmqDOtmtHDplttplppppomoolloppmlqqqtrqqqqtDqqDDqppmomlmllptCCzppppllpplllpppplmpqpmqDDmllmqqqqqpmpqmpLLmDCqCqqqCuqmpqCqpqqpptDCp",
-"ODDDqqztDzqDDDCCDDDLDqtDqqpqqpqqOqmlmpmmmpmmqqmlqqqqqqpputDEDqppplpqqtqppmlmllmtmiileelmmmmmlhhimmpqmlihiheeddeeeeiiijmmqqqqqqpnqqqqtDqplqCqpqplopppptCCCCCCCCGCDqqpqpmllmmlmpmmppqzCCCDqyzzCCCCDDqpCtppDCCCqpppqqDDqlllmpmmlmppqmllipCCqppppppzOOMDDqpmCppCCppt",
-"AqqmlmCmDqppzqqqlqLCppmpzCCCCDCCOzqpmmDUqCqqLDqmpqqCqCqzqpllllmpmllpqzqlDCtDDtCDtqDODuDEuDHDuuuHruuuuqqqqqqmpmqqmnmmmmmnmmqqruqtquDuruDtDDutqtDDqtttqtDDqqtCtqtCEuqquDDqtDDtCDDCqCzCCzCzppllmppzlllhllilpmlpqCCtMDCDODDtqAttqDDDDpqtppzDCqqzDCDLqDDDqpmptmptCmpC",
-"DDDzqDDqDDDOOLCCzNUNzCCCpzzqpCzpDCDqlhhqmqpmqpmmlllmppmpDqmlptHIODLUNOODCqqDCqmpmhlnpmmlhimllimpmpnqqqquqqquuuuururqqqmmeehmpqmmillillmmqpmmompttqqqpmppppppppqqqpmpqDDDqzCqqzCqppqpppmllllompmlpppptCsthhghllppmhhlqqmillmmpmmlplpzqqCzDCCDLDCDpqDDqqCDMNDLNHKO",
-"DDMLDLMmzLUYUOLOKNTNLNNTNUYWTUYUUNLUUNDLCUUUNLNNVUOUULHDDCDHODDtllqqmmpmpllpplilqlillmpmlmpqmllmlmlihillhhllmmmmqnqqrqqqmpnqqqpmiiihimmlilmtqplmmpqpqppqmlilmmplmmpnmmlmmpmllmplppqCqqpppppqtCtClpmpqqqqtqpmlhihhmqqmlilimpmlihhihhehpDppmmpplllmpmmmmmpCDCtCLNC",
-"nnpmillimqqCqppDBpoospypsCGCCCCCppppppqClCLLDtmpCqpqCqpqlmpmppllppCDpqCCqqqDDppqqiilmqqipqqqqqppmpqqqmmlliiilllmmmnqqqnmqqqqqtqqurqqquuqpptuuqttqtutqqqpmllimpmlqqutqpmqDDtCqCzCqCtzCtpptqppmpCDqtqtDDqDttqqpmllllmqpmllDDCqqtDDpppllDLlmlllmlhhiihhhlhhlplllCtl",
-"qmqqiilmpqqCpmqCBolBBooBBBKCBoBKCUUzhghhpCCCCCppCpmqCqqClllllmppmmqCpqCqtpqCqppqqmqDtDtmqqtquuDulmpqqpqqppmllmmmpmmljliihihiiilmqqmmnqmimmlkilpqtqtqqpmptqqtqtqqqqqrtruDCqqqpppzpppplmplmpmlllpCilihlllpilmpqtqqqppCOODqztqpmqDLDCLDCLDptppqCqpmmmpqrCtqpqtqCNKt",
-"qqDDpimpqqCDCtqqCooKColyCCBCBosCpKColppkCKplpCppUzpzzppqlpCtqtqpDtCDtCDtzqtzplmpqpqqlmqqtqmmmpmmmpnpqquuqqqttqqprqmmmmmmmmmlhilliiiiimheeiihhilihiiiilmmillmliliiihhimllmmllllllhihllllpllppmlpqlmlilmmtmllmqqmhllmpmhlmqqqmlilimilllmDUzqqDLDzqqDDLODCqmppCCtCL",
-"LDLLDtqCLDUUCqLCLCqttqptDDCDDtCDqCLDCDOUDDDCDLLDuDEHuqqtDOEtqCuqtutqqqmltmlqtmllimmmimqmiilliiilnrnjiifbmnnjjjjijmmqqnieeeeeiiiijjmqqniiedeeehiihilhlilhhhiiliedheeehiiiiiimmmmimiiiheemllmqmeellhddhlliihimttqmpmppqqmllqpmplhpppllhhlmllmpqppqCpmlllqNqqqCLLDC",
-"tqpqqppqpmqClmNVqpppmpmpDCtCttDNLDCqpqpmpqCDLDCmDqqqtuqpmpqmpmmilmpqtqtqpmlppmmqpquqqqpmlliihiiinnmjjjnmfiiffiffmjmmmmjijiijnqnqqqqnqrqqmmliiilmqpmihlmmmmpmpmlleeeiiiiiqmimmmidaeiqqmqqmmpqqmpqLqmlmppmtplhheddddddhlhhhmhhihhipqqqqpqCilpqpmlplllmmlillllllmpq",
-"ppmplillllqDmlptmmlmmllmmlillllpCplilmlhllllpCqptplmpqqnhlmlmtpmppqtutqqtqpqpmpuquuqqqqqrqqmmlpmmmmiimmmifihijmmjmjjiijmiiiimmnnnnnqnqrrEurtuDEPqqplmmpqpmpqqqqmnqqqrDuujlimqqrrqqDEDmiihlmqppqqDqppquztqqmmmmpqmlllmpmlCDplpplhhhlllhhghlzDqllmpllllmpphlpqpmpq",
-"qqqpppmpllzDplhdkhhllllltpllllmpqmllmpqmmlhlmzDCmqqpmpquqqppqDDuqtuutqqquqqpmmpqqqnpmqqquutqqqnpnqrrrrqnnqqnqqrnmmmmiimniieeeeiieiljlijmheeeeillqqqqmlieihiimmmmqmmmqrDErurnjmmqjmmmiedeeilliiilehhlmmmlmpqqppmplmppppppmqqqCODpqqqqqqpmlmtDCpmpplhhlomlDqplhhpL",
-"ppqCCCDCCqpppmmqqqqqtpqqCqpqtqptDLCppqtpqCqCDCqlmqqqppqtDtqmpqpmpmmmmmqqqmlmmmllillmmmmmpmmmmliheiimnqnquuurqqnmmnrnmijmiifeeeeeeefieeiijliiheehehilmihhdeddhhhhihedehilqqmmleeeeeeihhiihhlihhhdddddddddddhhhededkmmlilmhlllipmhhhhhllmppmppqpmmCtzDOOCpqqqqqmmp",
-"mpqpmpmmppiimppCzqqCzqpqplmpqtqpqCqmlllipmpllmlhmlhlmpmliiilllheiilihilmliilpqpmiilqqmliihillihdeadddeeiijmmmmmiimqnmifiiifeeeeeiieeeehieeeedede#.#dhilmheddeehhhiehehedaddiqqldiiiiiliidhhhihhhlihedhhlehihedhhdipmhhhllllhdhlhlhhhhlmpqpillhhhhhhlpzqpllpCDpll",
-"ppplihlhdiklpidllhhhhedhlllqtqqpiilhhihhhihedhlmlihilmlhehlmpmllmmqpmlmmqpqqtuqqpmqruqpmmmmmqqmmqmmilhilhhiilmppmmnmmiiiiiiieeehjiieeijjhfhehiimllhihdddihhehhiieeheiheeeeimmmieadehiilmhehllhhlmmmlllqqDDqmihddhhhhdcddhdilhlCtilhhdhhlCplhhhhhhhdhlqDCmhdddhmC",
-"mpmlhppqlDLOUCtUqmlllhhlhhhmqplhlllllmliimpmllllppqpmlmpttuDuqtqtuEIvuuwuuEuuutqvuquuuuvutuuxIxuuttuutqtqqpllmmmqrqqmnqqqqqqmmmmmmjmmnmlnmljimmmmilmmiilihehhlmpihhiimmphlmlhhipqqmiimmmlhlpqmmpilpmmliliihihhhhdhdhhilpqhlmhhlehilllhlmCqmlhehlhllllllehhlpqmlp",
-"lllllllllpqqplmmzLLqqmpzqtCCCCDDDMOMEHDDtDLHDqDDEEDuuDEIOOEDDDtqqqtpmqurJIxvuuuutrtqquvIuuqqqqnpqtvIIIuuuuxutqtuxvxvxxvvrqqnqnlinqqqmmmnmqqmmqtmpmpmpmpmmmpmmlilpmimpqmimmqpmlmmnlilmppqqppqtqmpmpqqpmpqppmllmqqqmpqpllmhpqplpqqlllmlmmppmllllpmpppmpllhlllpqppm",
-"CDDDCCzCCCDLCCCDCLLKLLDUCDDCqCDLDtCqCqqmqtzqqqpqtqqqqppqqtqqtqmmlmmmmllilmmpqrtqmmqqqqqqqqqqmlllpmlllpqtutmpqtqmurtrqqmmqmmmqqnmnnqrnqqrmnqnqqruqqqqqqqtqqqqmpmqmpmmqqtqqqqqqqpqqnqqqqqqtqqtttqtqqqqpqqqpmpmpqqDqppqqqppqCDCqCCDDDDNDCDNMNDNDDDDCDDDDLDLCDDDCDCD",
-"zCCCDqCtztztqzCCqzmpzqmmmmpmmlptqmmpqqqqqqqqqqmmmppmpmmmpmmpmmpmqqtqqpmmiimnqqqmmmmqmmmlmpmmlmljllhimmpqpmllmpmlmmmmnqmmqmmlmmqmmnnnmnmnqmnqmlmqqppmpmpnpmmlmllmqqqqpqqttqmpqqqqpmnqqmmqmlmmmmpmpmmmmmpmqqmpmpqtqqppCDCqqtztzCDCtqtCzqpqtqCCCCzqCzCCDLLOCDLDzqCD",
-"ppqpmlmmlllllppmzLzqzpikhlllllmpmmlmpqqqqqmmqqqmpmpqqqqpmppmpppmqqqmlmmpllmmpmilmpmmlmmmmmqmmilmllillmmlhilllllmmmmmqqqnqmmjlmjlmmiimjlimmmmmmmmliiiiillmmliehiltqqppmmmmllllmmpnmiihhmqqqttqmllllilpqpmpmlilmlmlpmlmztmlllmpqqpqpqztpmplpqqqqqpqqpmpppmlmppplpq",
-"qqzqpllpllmlmpqmpKzzzpmpmpqqppqqpmlliliiqpmpqqpmqqqpmpqpmpmpmmmpqqnmmmqqiiiiiiiilmmmpqqtmqqqmiiiqmheehiiiimmmmmqqqpqmmlllmmmmmpmieeimmmmimmmnuqmillhiliiqqmliillqqmpmplhhhihhhlmqqiieimuDDDzpmlllilmqqpmllhhhhillmllllpllllmpqpqqpqCqpppmmppppqqCztqplihlllmppmm",
-"qCCqpmmpmqqpqCzpmzzzzmlmpqCCqqppmmmlllilpmlmpqqpqqmmlilmmmmllllinqtqqqqqmmiiililmmpqqmpnmmqmmlmmqmmmliihmlilqqqmqqnqqqmmmmpqqqmmmjmmmnnmmqnmpDqillimllllqpmlliimmllmqqmihllmillpnmmiiimmmmihhlpqmmmpqqmliiliililllmlllllpmlppmpmmllmpmmmlllliillDCDCqpllmmppqqpp",
-"pqCqplmppCCqpqCqLLLzLCmpmlmmpppmlmpnmmmqmmmmnqqqqpliliilllmllilmmqnqnqqmurqmpmnmpqqqpmmmmmmpmqqqmquuqqmmnmmmqqqmmmmpqqqqmpqqmmmimmmmmmmmqqqmmqmillmmmmmlilmllllllllmppplllpmmmpqmjiiihehhihhiqrCmlllilihlmqqmlllilllllllmlllmlllpllmppppmmpmlllmzqzqpmplmpqqpqpp",
-"qCDCqpqCqDDpmpzqKCzpLLpmlillptzqmpqqmllmqmpqqquummmlllpmmpppmmpqqqqnmqquqqpnqqqqqmmmmmqtutqnqqpmqqqqmmqumnqqmmmmmlmmmmmlmmmmmlliifiiimjmqmmmqqqummmppmmmlmmmmpmpmmmmllllmmmmpppmunmiiihiiiliimlhllhhhhhimqHDqlhhlgdlmlhhlhhllhllheghililllmlllllplmllllmlpppmmpq",
-"hlyyzKmhlyyzyKKKCLKKCCDLttqtDMONArADEDqDqDttDONCODuuDEuuuurruuqmrrrrqnnnnmnnnnmjiiliiimmmmqqqnnqqnmjmnnnmmmjmiifhiilmmiieiiliihhfeeflmmqquutpttpimqqqmmlqpmqqmmqlplllmllpolllopshlmlhlllmllllhlmpmlmptqlllihhhhlehhlpCqlhhhhilqzqttDtpmlhppmlilqpmllmllpppmpppll",
-"zKSLKSKKzKKSLKSSNTONLLNLLDDNDHDuAqzDzqqqCqtqCNDtqnqqqqnpmmqqmmlijiijjjjiiifiimmmmiiiehiiiiimmiimjjiiiiiiiiiieeeieeimqqqqilllihedeeeimmpqxupqwIwsHDDDEIOIDuHEHuDIqqtpqCCpppsspoopLqppqqplpmmppmlpmpmlmpmlmpppppmllmpmlmllmmmllllmlmmmmpqqmmllpmlmpmpppmppqqqqpmpm",
-"U0YYLDKCUSUTLLLLLLLLCCqplllmpmllmmmqqqqtmpmlppplllmmmlmmmmqpmliliifeiiiifeeeijmmmlieiiieliiiiheihiiihehinqqmiiimiimmnqqqqnqqpppmnmmnnmmmqtqqspttqpmpqtqpqtDtqqqpzCCCNLCpCLNLCCCCLCqDCpmqpptDCtqqqqtqpqpptqppqqppptCqqqDDCDDDDCqtCtqqtqDDCuqqDDqtDCDDNDCqCLOLDNU0",
-"hllppypzKDKzCzypCpppplihmpqttqpmmimmmmlmmmlmomllmlmmlmllmpmmlilimiiijmjiiiiiimnqmmiimmmmmmliieeheiiiiiimmqnmmimmmmnqqqqqrtuuuuutuqnqmmiilmlkhlllmllmqpmhimmmmqpipmmppCplppppolpCmpCqmllqpqCLDDCCDCLqzCDCCqpqpppqqpmpCLLDpqpqpmpppmpppmmmlqqmpmqDCqpqzqmlqqpmlihl",
-"hhhmpplhllllllmlppmlpllhmmliheddmmmmmhedhlllllhgllhkllllmllkilkhmiihiilimmmmmpmmmqqqmpqqmiiihehiimmmmmpqmmmqquqqqrqrqqqqtqqqqqpmnjljmllmmlhdlwsdhhlllihhdhhhptqlmlillmmlllllkloplmlhltphlmpppqqzqzppqCqqqpqqpmptmlillmllCCtqppqqhhhiiiliimpmpppDDCCzCCqplllkhhhh",
-"pmopCqlhllllllkhlklllpmlttqpmlllqqqDtnlmllmppllhqplmpppltpmmppppmpmmpqqqttuutqqqqquqqnqqmmlmnpnqtrtqqqqquqquuvuqurrqnmnnmmlmmpmlmmimmmmqpqpltIHplmmlihllmllmquplqmmmmomplpppmllllpmhlmphillillmpmpllmpplllpqplllllplkhlmllhhhhllmlihhllplmilqqmmhihhhhllmllmpqpp",
-"hhhlqqtqCtqpqppmlmpppppqIDDutqtuDDDMODDDIDHOOututqtCDDDCDDHCDDDDuDDuuuHIuvHIutttruqqqpnqqmmqtruuuuqqqqqqqpmmmlihqqnmmillllllmppmqnmnqnqqmqtuutqttuHuuuuIuuuwDuqqDtqtqpqulllmollhlqCpllmppqqpmlmlommmlmllpikmplhlpppmlhltomllllpqqmlihhililhipplhlmpmlpqpqpmhhhhh",
-"ODqtttDNDDDHOOOHLNODDCDDUWPODuqtVUMODCtDtqqtqppqptNOOOONtDNNNCDHDIOEttDOuwDututuqqqmqnmlmmlmnqmmqmllmmpmlillllmmiilmimmqqqpmppmlqpnqqqqqplitulhlhimppmlmpmmtqppqCDDDtnqCDttqCHDCDqqqCDCqDMNCqtqpmptpllliNmhlppppplhhhhllqtppllmpqqqqppmmmtDtDqmpmqCtqqCDzCCtpqDU",
-"OHCtCDtqtCDCqtqCtzCLDDDHEDDDqmmqDDDLOEqpmpqqqpmmllpDNCtNqtCttqsppqqpmpqIpquutllpqqqqmlmpmlmmmlililmmihiiilmpqqqpqqqmmqpqmpqtqtqpnmpqruqnqmmllmqtqplptqphlmqtqqppjmqAqilqLqmtqqCqqppqqqpmtpmpqCCtpqCDDDtqtCuqpqDOttuCtttIttttttttDCuDOVOOHMLMUMDMHLNMNNLOLLOMUULC",
-"CDCtqttCDtCtqqtqCqmlmmqDDuDtqmpqOOOUUODqtqqqqqttppqHDqpCNCqplppqtDHDtqtDttuDtpppqquEutqmqqqqtqpqpqqqqqpqmpqmqqqnqqqqqnqquutpmmpltqqquuuuqpqqtttqwttuutqquHIIutqqqqDDAqmtDmpqlmppDqmlpqqpDzppqqqqCqqqpqzClpqtqppqppptttqqpqqpqppmqmmpnppmqqqCODqCppqCDDCLDLNDCDCq",
-"qDILDqDEODqqppmptqqqplmpmlmmqmquOOVWXOODDIHDuuvIDtCDNtpmpmhhhhlppqDDtqtuHDIIuqqutttqtqqqtqqttqqtnpqqpnqqqrqqqqutrqqqqtqtuuuqpptqqqqqquuuqqpquvtqmppqqqtuuDHIIuutrqquunqquqqtmmmpODqpqCHNDDqqpptqDCpmppqClmptttqqpmpqCqppppqqqpppqqqqpqqpqtqDODpqDqzLLLDDCDLDCCDD",
-"tDDDqpqDDtpllilhhhlmllhhlilmmmquLNOUONDDDDDIHDDuNDDLNDqlmplllllmntDEIuDIIIOIHuuIOvttuuwutqtuuutuuurqruurqtrtruuuqtruuuuvtuHuIIutqqmpqqqtuqmmqqqntqqqtqtIqtqplhhdmmmqqqqqEDDEDttqCttqtqCDLHDCqtCDLCztqzDDqpqqCDDHCtqtCttqtttttqpmppqqqqCDqzCDMCqDLCCDNLCzDLNCzDLL",
-"qqpmllmpDqmiilhimlmpqqqEqmmmmlmntDNNDtttqqttrtqqtqtDEDqlpmpmmliilmqtqquuuuEIvuwIttquuHtpttuuDutuuuuuurqqqqqqqqnmnnpqqqtuDDEHOHtpuuqqqqquuqmlimmpupppppqqpmpmpmllnmnnrrruDqrODDqmqCNDttDHOODDCDDDDDDLNLNDLDttDDHHCDLLDzqqpmpmmllliilllmmpimqqqpqOLCzLOONNOODqqCqp",
-"qqqpmqpqqtqqpqqqlmpmmlllmlllmmmmptCDtqqqqqpmpmtumqqqtDqililiillllmpnmmmmqqqtuqqummlmppmlqmptqppmnnnmmmmijmmjimiiliiimmpquutqquqpuqmmmmpmqqqmliljlhdhilllllmpqttqjimmnnmmqlmqqqplpqDtmlqDCCtqqpppppCDDCztDCDCCtqpmpDULpllhhhhllmmlmmmmllilmmlmlmDCqtDLLDCLCzpCCCq",
-"CqqCAtAqCzDDDDDLttuDtmliliimmmqqppttttqpqqnpmqqummmmmqqmmmmmpnqqqqruutqqmmqqqqqqtppmpqtqpmllllllmqqqnmmmimmmimmjlllllmqqpqplppsqtmlhmmmiqqqmmimmlhhlppmpppllihegjmmnmmmmnmmqmmnmlllkhhllqqppppmlmmmpqppmqqtDtppmlmqCCmliehhilmptqqpqqqpmpqmllilqpmlpmllippqqqDCq",
-"mmqqqmmmnqDDzqzqqpmlmlpqqqqqqqpqpppqqppplmpmpmmpnqpimqtmpmqqnmliimqqqqnqmmmqqmmmllmpqpmltqppmlmpmnqrqmmmmmmjmqrrqmmmmqtumqqqlpptItmmquqmqqmmimmmqqpqqpmlppmpptqqnrururrnuqqqpqtupptqqpppqppqtutpqqpqppqpptqqqqpppmlmppmltqpmlllmmlmpqqpmlliippmtmpqztpqCmqqpllll",
-"hlmppmllhhlillqLmlmtqlimlqmmpmmqpCOUNCqtuHODttuItpqtCtttqtqtttppqqnrrruruqqruuqqqqqqqruuqqmmpnqqmqnmmmiimmiliiihhilllmmmqtqqmmlljimmiiilmqqmllilmllllllltqpmmmpmmliilliihihlqtqDDCDDCpmqtqqtqqtqDCppzCzzzLLCppzqzCDCpqCLtCDCtCDCturuDDuqtDqqDLCqCCCCCDCqCCqpppqq",
-"illllllllhhlllhghilqqliilmpqqqmptCCpmlpqpqtqpmqqDtpqqqqqppqqttDDEDuuqqqqqqrtqqqqqquuDIDuDuuuuuuDutuuqqqpmmmmmmmmppqqquuIuuuqtqqmqqnmmjiinqqmpqmlpmppqqtqtututttqqmqqnpmphihmtqpqmllppmplpmlllpppqpmpqqpppmllmDCplllmtDDCzCzqmpmmmmljlllimqpmppqDKppzCpmpqpmmlill",
-"pmppmllhhllmtqpmlmpqqpmmmpilpmiilpppolllllmmllllplllmlppqppmlmppqqnmmmmmmqqqmlilmqqqqqpmqqqqqqqpmqmpmmmippqqtutqqqnpmmmpuqqqqqqmnnmmmmmmmmimmqplmppmppmpmqtuuqppmqqqqqmmqttDOHqttqpmpqplllpppllllmpmpmlllpmlllmpqpllllhhqCCqppppliiiilmmhmlmpmpDpplppllmllllllmm",
-"llppqpmlpqqpmllmllmlimpmCqmlmllpppCCtppmppqqqqpmpmlpppqtttqplpmmmmmmmqqqquuuqpmqpqqplmmqmmpqpmlmmlmmmmllnmqqqqqqqqqmllllmlilmmmlmljmmmqqqqpquuqplmpmlllllpqtqpmhmmqqmmlmpqmptqmpqqpllmldlllihdhhlmmpmlllmpplihlmhhhhdhlphhhdehilmmihilmphlhlqqlikhllllpmmllllmmp",
-"illmqttqCDLCqppqpqqppqqtOOCqtqtOTNDCDCDDHDDDHuutDtDHDDCDDLHDDONHDIHDtDDIDIOOIuutimpmlmqtmpqqqpmmhiillljmmmmmmmlimmllilmqmlllmpmmqnpmqqqpqmqtutpmtuuHuuuImpqtqpllmqqqmmmmlmllqmlqlplllppmDtplhlpqqtqppppqtmhltDqlghhhllquppmllpttqpliiihillhmCphghophlpqltpmlllmm",
-"ODtqqDLNtztDUUOLDLOMOMOMOOMOLqmDNNLLNCqpqtqqqqqpqtDOODDDqDDCDDHDDLHqquNDuuDuDtttpquqqqppqpqqqqpqmpmqnqpqqpqpqmmmilililmmqpmqqqqqqqnqqqqnllppmlllillmlllhlpqqqpppqnqqpmpqmqpqDtqtpppmpqttDDDDDDDDtttqqttDDtmtOOCqutqtIHtltttmlpppuqqqpqqqqDDCDpmCpCLtzNLtDDtqtuDI",
-"0ULCDLDLCqppqtqpDCqCqpzNLLCCDplpCCNNOLplpmppmommllqDDDCCtDCqptqlmtqpmqDtppttpplpuDIHDuqpuututuDDuuuuuuuuqqqqqtqqqqqqqpqqqqqqqqqpmmpqtuttqmpqtqqttqqtqppmmpqtqqpqqqqqqqqmpqmpqmpqqplllmpmpppqCtppCqpptqtttDHONttttptDWVHqHOHutttttttuDILOLNLOUCCOCLNTOLOLLDMOOUXU",
-"qppqCDCqmmpmmqLVUCpppmtVLtqzNDzOUOLNUODtuCutttuupqDNNCtDDOODDLDCtDNtptDDtDHupmptlllilpqmpmmmmpqtmmmmllilmmmmpmqmpqqqpmpmtutqpmmmrtquuvuqqpmpqttxtqtuuuqtuHIIHuuuqquuEuqpuqplmmpDOqlptttqHqlllqttppllptqppmpDDtplklptqpppllppppmlmqmpqppmppmCUCmpplpONppNDDDDDuqq",
-"qCDqqCDDNDDNODCCqtDDCDLOCDLOLDDCNTXUOCCCttDDDDHDHDDDOOOLDHNOOOONDOODtqtCuHOHtpppmpmlmpppppppqqqqpqqqmmqqqqqmmmmlqqtqquutJurtrutqqqqqqtuutqptutqlmpqqtquuuDIDuqtquuurpqqqqutqqtqqDCqqtDDDLHCtqtCDDDtqtDHtDppqtqqDutttttpqHOItqtpptqqqtqqCqCDKDzpCCCCLUDCqLUOtqttq",
-"tDLCqzCCODLLLCDDCDLDDDNO0OztOUUOLTUWUNDOCuDDuIEHDDNOUVOOOOOONNDDOOONDCDODHIDtlllqqtqtDDDtDDDDtqtuuuuuuuuqqtqtuuqqququuvuEuuuuuuqtqqqqqttppmpptttHutqqtuDDIOOOOIOJIIEuuuuDDDDtqqptttqqtCNtqtqtqqqtttqtCCqtttqtDHCtttDHutDtHtttuHuODuDDDDLpCCCKtpKCCzCCCDLDNDqqtDq",
-"DLDDztCDLCqqqqqqCCtzCCCCNCpCNULpsCDCtCtCqppqpptqpqtDHDDCDCCDDNDDDDDqqqtDuDHuqpppptqpqtqpmqDDtqqtuqqqqqqppqqpmmpmmmmmmqqqlmmpqqqquqqpqtqqqplhhllmpmllmpqputuDDIIDEuuurqmqquDDIDtqDLOHCtHVONDNDDHDCNONODOOCONtCOHqDDHODDtDDDtqtCDDIDCttqtCCLNNUTLWLLNUUNLOONDDDDDE",
-"qCDCtzCDDqppppppppppqCqqpqCCqpppptCCCpqqqpqmpqquqpptCDtppmmptDDCppppllmmpqqtttqtttqptqpllppppmommmpmpmiilmlihihhilllllmmililmmpmqmlilmpltqpkhhllhehilmliqqpqtqqptmqqpiipilmpqmllppqqllptDCqqppqtpqDDtCttDNDDtCqpqtDHCtptttttqttCtqpmppmpltzKNCCLpBDNLqppCqpqpppq",
-"ppqtqpqqCCqpqqqppppqCtpspCCqllsDoppqppplppmpmptDCqpmtCqpqpppqqppqrrrqqqpilmqqquuDDHDIOODIDtqpplkmpqqmlllillllmmmmmmmmmmptpmmlmlluqllmqpmpmpllllplmppmlllqqqqqqpmrtuvqilqqmpqqmlihlllhllptqpppllpmmppzCqmCqCDzpmmkmtzqqqqpqpqqCztqpppqqpolppCNCopCzppmlpqqpmppmpq",
-"mpqqpmmpqqppqCqmllpppqpqqqstCtCCmpppqppppppppquIOtqqCDtpttqqttqpqtuDuqqqpqqnqqqqtDDHDNHHNDppppmlmqqqpllmilmlmppmpllmlllmmmmllmmmtqpmpqppmpppllklppmliilmqpqqqqpmqqrtmllqqppqtqppmpmpqqtDCqtDDtpqtqqqLOLqCqqLDppCmpCtztztqpqpqppqtqppqCtppCLNTCopCCCCCpqCpppqqtqq",
-"ppqDCppqCqqpqDCppsqsppsCCszCLLqoNNDDCCDDuDDuuuOUUOOHOOLDqqttCCtqqnqqrrqqrqtrtqqqpptppppqqpmppppppqqqpmmlmmmilmllmllmmlilllllmmpqmmiihhhhpppllkkhllihhlmpmpqqqqmmmmpmmiiliehmqplmlllompqqqppCtqptpplmqLCpqqzCCCzDqDDCCCCqCqmppmpqDtqpqCCqptpCKsloppqCCppmmmpmqtqm",
-"pqCOLDDONLDtLOOCLNNLCCNUNNCCspsqLCppomppppqpmptupptqqppqppqCtqqtnqqruuuuqqqqqrqqipppmpuDpqptqqqpuqttutqqpqppmpmmpmmqqqpqqqqqqqqqutqpmmllqqppomppqpmpqtqqqtDDuqppqqqqqqqlmlltDqpplmppllmptmlmpmtMpmllpCCqlpCmmqqplpmpqDCqqmlmmpCOOHqppCLCpszCNLCNUCCzCzqqCLIDDOEq",
-"qDDDDtCqzCCKDCzyHLCCCDCqDCDLtmllpllmqttqqppqtqppqDDppqDtqqpqppptplpzppzqlmpmmlpqDDDDNOODpmlllhklimmmmmmmimlilmpqmqqpuqlmIumliililllmpqqquuqqnqmmmqqpmlihlmqutmlmmmqqmpqqqquuuquuuuqquuuuIIvuuvuxqutuDOMDDEDHOUODDHHDDNODCCtttDNLuDEIEEIODDDDMLMMCqqpqtttptCqpqCC",
-"pqtqqqqtqqqzCzppztqqCCqlpmpqCCDNpplomqqptpptDCuCpqtmmppmttqqmlilllpzpCLDDDDtttquONDCDNDtCtttDtDHEIEuqppqqqqmmmqpqqqqqqqqtqpmppqqpmmllpqqmqmmmmnmimpmlllimmqtqmmppqqqmiilqpqquqqqqqqqmpqqvutqqmmlmmmmqqtqqqqqpqqmllmllpppHODDDNIDqqqmpmmmqqqqquDDmllppqqtqplpqDtm",
-"mqqppqCzCpppzCBpmpqqqqmlCqppzLOLOLDDDDNLDDCDLCqqLOUONLDCCDLNCpqtppCDzCDCUNDuCutqODqppqqpONDDtqpqtqqqmmmmmqplllmmllllhillmlmlmmmmpplllilmmmmlmnmmlmmmmmmllmpmpmmqmmpnpqqrqqqquqqqqqmpmmmmtqqqqqqmppmllmmlqtqpmmmpqqtttqtqDIDtuDutuqppnppmmmilmmqpttqpqpqptqppCDtl",
-"uDqqpqqqDzptCLCpCDLNLDCqDNDqtDDtDDLCCzCDLDCDDzpppqtpppmlmpqqDtzCCCLNCqzpDCqqqqquCqplmpppqqppqpqqqqqqqqtqppqpmppppmqtmptqpppppppmqppllllmppmpnqqmmpqpqpqpqttDutuDquutqqqquqquuqqqqqqnqqpqqqqtuuuuIODuuDDupqqqqttquttqqqtttttqqqpluuqqtuuqDuDDDILDDDDDDttqCDODDDDu",
-"UOODDDDHCtpzCLCpqDDCqCqtpDLCqCCqpqtqppqCqppqCtpmCCCqqqqqtpmpzqtqppCLtztpqttqpqDDtqpppqqtCqttDtqtDuDDDutqquuqtqtquqHIqtIuuuuqqqqpqqqtqpqqqnqqqqqqqqtqqtqqqqutqqtqqqqmmmmmqpmmpmmlmpnpqmqqqmqmqqqqlmmmmmqpmlmpqqqmqmmmmpqqqqqqqqpmmpqtqppqmpmqqppmpptqtCCuqHODttLU",
-"qqplhlllqpppCCpplpqmllmplpCCqqppqqqqpqtDtpmqqqppmpmlllmpCqptCCCCppCDypqmpqqqpmqDqqqqtpqqDttCtpllmpqtuqqpuDutqqqpmpqqpqqtqpmmppmmmptqqqpqmmmqrrqrmqpmpnpmmppmpqmmlillmppqpmllllilmmpmqqqmqpmmpqpnqqtqmpmmliimqpmimllmmmqqqqqppqmmllqqpmlmqqtqutqqlmpppqqtpqCtqCHO",
-"DDtqppqtmppqCCppqCDtppqCqqqqqpmpppppppqCLzptzqqppmppmpqCmmqzzqzDCCNNCpplmpppmppqttptqpptplmqDtpppqqDLHDDqttqqppmpqpqqttumlklmplklmppmlmmlllqqqqqllmllmmlqqqqqttqqqmmmmmmqmmmmmpqpmqqqpqqmqqqruuuqurqmlihmmmqqpmmlimpqpmqmqqqmmqqptttqpppplmmppppttqqpmppptqpqqtq",
-"qtqmlmllpqCCDCzppzDCmpqqDpmpqqqCzqpqqzCDDtqzDCDLqqCqCCDLCNUVNDDOLCUULCtpqpqqttuuCqqttqDDLDHOOLtmDqCDDMDDtDEDuuuttuqpwDuOutqtuHuqilmmlllmmimmqnmnmpmmpqqpmmpmmqqqmpmmpqqtnpqqqqquqqtqqqqqppqqutqqqquqqmmmmlmqqmmqqqtuuqpmqquqnpqqttqqtttqppppqqtuDDDqpppqqDNDplpp",
-"qtttuDuDuDDNUONCCqppqDOUUDCDNDDDCDDCqqCLzCCCLONCCCpqCDLNLOOCCDLLNCCNDCtpttqtDIIItDCqtDtqtCDNDtqtLMLDCDDODDHLDutuDDuuDDOOVqtDDDOqqtqtqqqqtqqqtqtuuqttuuuDpqqtDutqpquwuuuuHuuuutuDDuuuIHuDqquHIDuqnquqqqquqquruvvuuuuvuqruuuvxuuvuIwuHIIwDIDuDOPODDUOHOMHODOUICtCD",
-"IIDDDDCtDNNNOUUNOLDCDLOUDCDLLDCqmqLLOLNLHDzpmqzqqqqCLOOOCzLOLCCDCCLUHDNDOODDuttqDDDCDNONqDDDtzCDLDtqqqDDDHDDuCuDtqqqqtDDDtqqmtDtpqtDtutuqqquuruuquqtuDtuqtuDuDuquIODuDIIIDuDuuDIIDDIOIIIIIIIOODuvxuEuvEIurqqqqqquruuutquvutqtuvJuuwIIIHwutqtIOIDtOODNNDCNOONDttD",
-"IDDuDwDCDDOOUUOULCqqzCDDXLtqCCDOUULCzqqqCLLDztzCqpqzDLLCzpzONqmzppCHpppplllmpqqtllpmpqqqmptqmpptppqCCtmlDCqpppttttttqtDHtDHtltODmmmppqqqqqquuuuutqtrCuAtqqqqqtqtDHDutDHOOIHDutIUOIHOPOOOutqqqqtttqqtrtqmqqqqqqqntqquurtqqquuuuuutsqCIHDDHuttNOOHLOONVODNONOODDCD",
-"qpppqqqtptHUONGNqpllqDDCUCmlmpCLLCmlllmpmCLLtzCLMLLLNLDzODCLLqqCCtNUCqtqDtutqqqpmppqtttpltDDtpmppqLOLzppqqppmpqqqtqppppqpqtpmpttqmpmmmtuqpqtqqqqppmmpqqqqqqqqtDDqqqppquDtuDuqqtOutuDDuDDtqppppqqqqqqqmmmmmmmmnpqmmmqqpmmlmqquupmplpttttqtqppqqppqtpptCtDDqqDCplm",
-"ppmpppolppCHNCCDCqpqCONMNDDLNDDCCDLLNLCqNMLCpzOYYUOLUUNLUUMLCLCzCtDUHHNDOOIDttqqttqDDDDDDOUODtqtMUNLCqDUpttqpqttqCDqptDDtppqtpmCDDDqqtuDmmmqqmmmlihillmmlllmlmqqmppmpquDqqqtpmpqqqpqtqqtqtqpmpmpmmqnmmjmmlilmmiilhllllllmlllmpppppmpttqtDCppqCqqttqqDCqDDCDODqmp",
-"qtttuuttDttDDDNWDCqqDOUULDCDNDDCLMNMLLDLLLDzqpqLpmlmmqzCpzCqzzqllklpmlmlhhklmptuqmlllppDttqplllmCCzCpmqOpqCqtttqpqtpqDHDttqtLtqDqzCDCqmpmmpmpmmmmllllmpplmmmllmptqtqquDCDDHEDtqDDDDDDDHOuttqqmmleimmiilmnnqnqqqqppqqqpqttqpqtuDuutuHOOHDONDDNONLDOOOUHCDOOUUOHCt",
-"pqquuHDuutqHNDCNCqmppzDLtmillllmhhhilmzLllmppihelhehhillmmllmlihlkopkhklllllllmpqlkhhlmplhhgdhhkmllmpllpipqpmqpphhhhhomilqlhmplllmmpmmllqmpqqpqqtqqqqqqquuHDuuDEuDDtuDIDOOOODuDDIHDIHDMODLIDttqtnqqqqqqqutruuvvvqtttqptDtttDDHDtCtDOUOLDCqqqqqqppCCttqpDpCtqppqp",
-"mpmppmlklllCDpolmllhlmqCpmpqqpmlhlqzpmllzppzLCzqLDzpqqpmDlillhhlhkmpkhmppomlhhlmlkhilhghllhlllmmpihllllphmpllppmhlhdhmlghtpdhpmhmlmllmpqqqqquruuDuuuuqpmmqtqqqtDqtqqtDOOuqqppmmppmmpmmptmpqppmmpurqqqqqnurrqrqqqllmplhlpDqlhklmlllpCDCplqqpppmllpqpmmlqVlqtliptq",
-};
diff --git a/sandbox/texture-paper.xpm b/sandbox/texture-paper.xpm
deleted file mode 100644
index 35f805b..0000000
--- a/sandbox/texture-paper.xpm
+++ /dev/null
@@ -1,87 +0,0 @@
-/* XPM */
-static char *on[] = {
-/* width height num_colors chars_per_pixel */
-" 32 32 48 1",
-/* colors */
-". c #f8e0d8",
-"# c #f8e0d0",
-"a c #f8e0c0",
-"b c #f8e0b8",
-"c c #f8d4d0",
-"d c #f8d4c0",
-"e c #f8d4b8",
-"f c #f8e0e0",
-"g c #f8e0d8",
-"h c #f8e0d0",
-"i c #f8e0c0",
-"j c #f8e0b8",
-"k c #f8d4d0",
-"l c #f8d4c0",
-"m c #f8d4b8",
-"n c #f8d4b0",
-"o c #f8ccc0",
-"p c #f8ccb8",
-"q c #f8ccb0",
-"r c #f8c4b8",
-"s c #f8c4b0",
-"t c #f0e0d0",
-"u c #f0e0c0",
-"v c #f0e0b8",
-"w c #f0d4d0",
-"x c #f0d4c0",
-"y c #f0d4b8",
-"z c #f0d4b0",
-"A c #f0d4a8",
-"B c #f0ccc0",
-"C c #f0ccb8",
-"D c #f0ccb0",
-"E c #f0cca8",
-"F c #f0cca0",
-"G c #f0c4b8",
-"H c #f0c4b0",
-"I c #f0c4a8",
-"J c #f0c4a0",
-"K c #e8e0b8",
-"L c #e8d4b8",
-"M c #e8ccc0",
-"N c #e8ccb8",
-"O c #e8ccb0",
-"P c #e8cca8",
-"Q c #e8c4b8",
-"R c #e8c4b0",
-"S c #e8c4a8",
-"T c #e8c4a0",
-/* pixels */
-"h#kyGCmmmmvmvyjjyyCpjvjvuhhivjia",
-"LmymvvyllyyithLvLyvjvpihjjyli#kg",
-"CDCQyyCCGyikyCCCyLyNMxyyyLmulyRS",
-"NqmvjyCyvuimLLymmCpmmjmCvyyCOAGm",
-"jvliivvyymiyjCCpvmjmjvjjmyyCCvij",
-"uvyvCiiujixCGmyjymvmvljyCCCvvuuj",
-"yyyllBxmONyjyxukxBlxlBCrCjiljkwK",
-"pyCCyQSIDDmymCyyCGCRFIzCLmmyyOTT",
-"yyjvmvyjuuvxlijvjmmjjjjeijjyjDmj",
-"vyvjuiyjjhllliiixljjullylmLjaivv",
-"vihhivuuhiuhwxCGCvhkvvyyCyujvjuj",
-"CopCCxCCpmxCQCCmxBmLCCCyyyCpCCxy",
-"ypmmyyyyyvyyLCyCCRDmyyvymCyvyjpv",
-"vjvjvjlujiiiyyCyDjjKjjmymmvjvyvb",
-"jyliiiyyxiijymyCpmymNCBjuKimmliv",
-"mwhipyliavjjvyCCvmyyuuxmyijyjvmy",
-"yjlDNGvmKmmyNLyyCCCCHRSyylyyCCQG",
-"jmCsOyyGymyCyjyQyryDnmCjvmyjmmyy",
-"NHHyyCyjyjmyCymyyiiuvvuyxlikyyjy",
-"mmCymmyymyrCyvyyyimuyyxhhuCmjyQE",
-"GCmCyyjmpmmmmvxxliyylkllCmyDSCmy",
-"yyCNNNSPCyCCmyByCyyCMPDDOTTRJRTL",
-"yppmyCCmyyylijypjvmymCmmDyvmnmmj",
-"vymCymvvjlvjyymmvmmCmmvvjyppmiyy",
-"CCvmjpjyxlymyyCyyNmjmyvyCyivyyyv",
-"CpyyNNyyyyOOCmyvyvCpmCyyyOyLCCCC",
-"pypNmxilypDzppymyxdmCyvymDpyLyyy",
-"yydhlxyjmyyluvlltiumjyyymjvvjlku",
-"cgljjyvpiilyihxyyjvyyyliiiikjyml",
-"xymNpihiLChlyyymmyCylixvxiyCjl.t",
-"NPREmxyCGCyGryCCCCyCCCLmCypLyLmm",
-"mygfxyzHbypvjvvyjKjrHRbjvLjbtvbe",
-};
diff --git a/sandbox/trash.xbm b/sandbox/trash.xbm
deleted file mode 100644
index 0370f11..0000000
--- a/sandbox/trash.xbm
+++ /dev/null
@@ -1,6 +0,0 @@
-#define trash_width 16
-#define trash_height 16
-static char trash_bits[] = {
- 0x00, 0x01, 0xe0, 0x0f, 0x10, 0x10, 0xf8, 0x3f, 0x10, 0x10, 0x50, 0x15,
- 0x50, 0x15, 0x50, 0x15, 0x50, 0x15, 0x50, 0x15, 0x50, 0x15, 0x50, 0x15,
- 0x50, 0x15, 0x10, 0x10, 0xe0, 0x0f, 0x00, 0x00};
diff --git a/sandbox/triangles.pl b/sandbox/triangles.pl
deleted file mode 100644
index 23dc1f0..0000000
--- a/sandbox/triangles.pl
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/usr/bin/perl -w
-
-use Tk;
-use Tk::Zinc;
-use Controls;
-use Tk::Photo;
-require Tk::PNG;
-
-$mw = MainWindow->new();
-$logo = $mw->Photo(-file => "logo.gif");
-$papier = $mw->Photo(-file => "texture-paper.xpm");
-$penguin = $mw->Photo(-format => 'png',
- -file => "xpenguin.png");
-
-$top = 1;
-$zinc = $mw->Zinc(-render => 1,
- -borderwidth => 0,
- -highlightthickness => 0,
- -relief => 'sunken',
- -takefocus => 1,
- -tile => $papier);
-$zinc->pack(-expand => 1, -fill => 'both');
-$zinc->configure(-width => 500, -height => 500);
-$gr1 = $zinc->add('group', $top);
-$clip = $zinc->add('arc', $gr1, [50, 50, 399, 399],
- -filled => 1,
- -fillcolor => 'Pink:40',
-# -fillpattern => 'AlphaStipple4',
- -linewidth => 0);
-#$zinc->itemconfigure($gr1, -clip => $clip);
-$gr2 = $zinc->add('group', $gr1);
-$clip2 = $zinc->add('rectangle', $gr2, [200, 200, 450, 300],
- -filled => 1,
-# -fillcolor => 'white:100|white:0',
- -fillcolor => 'white:100 0|black:100 100/90',
-# -fillcolor => 'white 0 |blue 20|blue 80|black:0 100/270',
- -linewidth => 0);
-#$zinc->itemconfigure($gr2, -clip => $clip2);
-$view = $zinc->add('group', $gr2, -tags => "controls");
-$zinc->lower($clip);
-$zinc->lower($clip2);
-
-new Controls($zinc);
-
-$cv2 = $zinc->add('curve', $view, [],
- -linewidth => 2);
-$cv3 = $zinc->add('curve', $view, [],
- -linewidth => 2);
-
-$tri2 = $zinc->add('triangles', $view, [50, 50, 300, 50, 150, 150, 300, 150],
- -colors => ['tan:50', '', '', 'red']);
-$zinc->contour($cv2, 'union', $tri2);
-
-$tri3 = $zinc->add('triangles', $view, [150, 150, 50, 50, 150, 50, 300, 50],
- -colors => ['grey50', 'blue', 'red', 'yellow'],
- -fan => 1);
-$tri4 = $zinc->clone($tri3, -colors => ['grey', 'red']);
-$zinc->translate($tri4, 100, 300);
-
-$zinc->contour($cv3, 'union', $tri3);
-$zinc->translate($tri3, 0, 300);
-$zinc->translate($cv3, 0, 300);
-
-$zinc->monitor(1);
-$mw->Tk::bind('<p>', sub { print "perfs: ", join(',', $zinc->monitor()), "\n" });
-$mw->Tk::bind('<t>', sub { $zinc->remove($arc); });
-$mw->Tk::bind('<q>', sub { exit(0); });
-$zinc->focusFollowsMouse();
-MainLoop();
diff --git a/sandbox/xpenguin.png b/sandbox/xpenguin.png
deleted file mode 100644
index 1b1d352..0000000
--- a/sandbox/xpenguin.png
+++ /dev/null
Binary files differ
diff --git a/sandbox/zinc.tcl b/sandbox/zinc.tcl
deleted file mode 100644
index a798e3b..0000000
--- a/sandbox/zinc.tcl
+++ /dev/null
@@ -1,284 +0,0 @@
-lappend auto_path .
-
-package require Tkzinc
-package require Img
-
-set top 1
-
-#memory info
-#memory trace on
-#memory validate on
-
-image create photo logo -file logo.gif
-image create photo logosmall -file logo.gif
-#image create photo bois -file texture-bois1.xpm
-
-#set r [zinc .r -backcolor gray -relief sunken -tile bois]
-set r [zinc .r -backcolor gray -relief sunken]
-pack .r -expand t -fill both
-set scale 1.0
-set centerX 0.0
-set centerY 0.0
-set zincWidth 800
-set zincHeight 500
-#.r configure -width $zincWidth -height $zincHeight
-#.r configure -drawbboxes t
-set view [.r add group $top -tags "controls"]
-
-frame .rc
-button .rc.up -text "Up" \
- -command {set centerY [expr $centerY+30.0]; updateTransform .r}
-button .rc.down -text "Down" \
- -command {set centerY [expr $centerY-30.0]; updateTransform .r}
-button .rc.left -text "Left" \
- -command {set centerX [expr $centerX+30.0]; updateTransform .r}
-button .rc.right -text "Right" \
- -command {set centerX [expr $centerX-30.0]; updateTransform .r}
-button .rc.expand -text "Expand" \
- -command {set scale [expr $scale*1.1]; updateTransform .r}
-button .rc.shrink -text "Shrink" \
- -command {set scale [expr $scale*0.9]; updateTransform .r}
-button .rc.reset -text "Reset" \
- -command {set scale 1.0; set centerX 0.0; set centerY 0.0; \
- updateTransform .r}
-button .rc.quit -text "Quit" -command "exit"
-grid .rc.up -row 0 -column 2 -sticky ew
-grid .rc.down -row 2 -column 2 -sticky ew
-grid .rc.left -row 1 -column 1
-grid .rc.right -row 1 -column 3
-grid .rc.expand -row 1 -column 4
-grid .rc.shrink -row 1 -column 0
-grid .rc.reset -row 1 -column 2 -sticky ew
-grid .rc.quit -row 3 -column 2
-pack .rc
-
-bind .r <Configure> "ZincStyleConfig %W %w %h"
-
-proc ZincStyleConfig {zinc w h} {
- global zincWidth zincHeight
-
- set bw [$zinc cget -borderwidth]
- set zincWidth [expr $w - 2*$bw]
- set zincHeight [expr $h - 2*$bw]
- updateTransform $zinc
-}
-
-proc updateTransform {zinc} {
- global zincWidth zincHeight
- global scale centerX centerY
- global top
-
- $zinc treset $top
- $zinc translate $top [expr -$centerX] [expr -$centerY]
- $zinc scale $top $scale $scale
- $zinc scale $top 1 -1
- $zinc translate $top [expr $zincWidth/2] [expr $zincHeight/2]
-}
-
-#
-# TRACKS
-#
-set track [.r add track $view 6 -tags track -leaderanchors "|0|0"]
-.r itemconfigure $track -position "1 1"
-.r itemconfigure $track -position "10 10"
-.r itemconfigure $track -position "20 20"
-.r itemconfigure $track -position "30 30"
-.r itemconfigure $track -position "40 40"
-.r itemconfigure $track -position "50 50"
-.r itemconfigure $track -position "55 60"
-.r itemconfigure $track -position "60 70"
-.r itemconfigure $track -speedvector "20 0"
-.r itemconfigure $track -symbolcolor salmon -speedvectorcolor salmon -leadercolor salmon \
- -labeldistance 20
-.r itemconfigure $track -markersize 20 \
- -filledmarker 1 \
- -markerfillpattern AlphaStipple4 \
- -markercolor salmon
-.r itemconfigure $track -labelformat "120x40 l0l0+0+0 x80x20+0+0 x40x20+80+0 x40x20+0+20 x20x20>3>2 x60x20>1>1"
-.r itemconfigure $track 0 -filled 1 -backcolor gray -bordercolor gray -relief groove
-.r itemconfigure $track 1 -filled 1 -backcolor tan -bordercolor tan -relief groove \
- -font "cenapii-etiquette-m17" -text "AFR451"
-.r itemconfigure $track 2 -text "WPY" \
- -font "cenapii-etiquette-m17"
-.r itemconfigure $track 3 -text "400" -filled 1 -backcolor wheat \
- -font "cenapii-etiquette-m17"
-.r itemconfigure $track 4 -text "-" -filled 1 -backcolor wheat \
- -font "cenapii-etiquette-m17"
-.r itemconfigure $track 5 -text "450" -font "cenapii-etiquette-m17"
-
-.r bind $track:speedvector <Enter> ".r itemconfigure $track -speedvectorcolor red"
-.r bind $track:speedvector <Leave> ".r itemconfigure $track -speedvectorcolor salmon"
-
-set track2 [.r add track $view 4 -speedvector "-20 0" \
- -symbolcolor salmon -speedvectorcolor salmon -leadercolor salmon \
- -labeldx -20 -labeldy 20 -leaderanchors "%30x30" \
- -historycolor MistyRose -lastasfirst t ]
-.r itemconfigure $track2 -labelformat "a3f110+0+0 a3f110>0^0 a3f110^0>0 a3f110>2>0"
-.r itemconfigure $track2 0 -filled 1 -backcolor tan -text "BAW452"
-.r itemconfigure $track2 1 -filled 1 -backcolor wheat -text "450"
-.r itemconfigure $track2 2 -filled 1 -backcolor wheat -text "KMC"
-#.r itemconfigure $track2 3 -filled 1 -backcolor wheat -text ""
-.r itemconfigure $track2 -connecteditem $track -connectioncolor green
-.r itemconfigure $track2 -position "10 0"
-.r itemconfigure $track2 -position "-20 10"
-.r itemconfigure $track2 -position "-30 20"
-.r itemconfigure $track2 -position "-40 30"
-.r itemconfigure $track2 -position "-50 40"
-.r itemconfigure $track2 -position "-60 50"
-.r itemconfigure $track2 -position "-70 50"
-.r itemconfigure $track2 -position "-80 50"
-.r itemconfigure $track2 -position "-90 50"
-
-#
-# WAY POINTS
-#
-puts "creating way points"
-set wp [.r add waypoint $view 1 -tags borders]
-.r itemconfigure $wp -symbolcolor bisque -leadercolor bisque -position "-100 120" \
- -labelformat "40x20"
-.r itemconfigure $wp 0 -bordercolor bisque -text "NCY" -tile logo -filled t
-set wp2 [.r add waypoint $view 1 -tags borders]
-.r itemconfigure $wp2 -symbolcolor bisque \
- -leadercolor bisque \
- -position "50 160" \
- -labelformat "40x20" \
- -connectioncolor bisque \
- -connecteditem $wp
-.r itemconfigure $wp2 0 -bordercolor bisque -text "MPW"
-set wp3 [.r add waypoint $view 1 -tags borders]
-.r itemconfigure $wp3 -symbolcolor bisque \
- -leadercolor bisque \
- -position "200 140" \
- -labelformat "40x20" \
- -connectioncolor bisque \
- -connecteditem $wp2
-.r itemconfigure $wp3 0 -bordercolor bisque -text "ART"
-
-#
-# MACROS
-#
-puts "creating macros"
-set macro [.r add tabular $view 10 -labelformat "x40x20+0+0 x40x20+40+0" \
- -tags f0borders -connecteditem $track]
-.r itemconfigure $macro 0 -text une
-.r itemconfigure $macro 1 -text macro
-
-#
-# MINISTRIPS
-#
-puts "creating ministrips"
-set ministrip [.r add tabular $view 1 \
- -labelformat "60x20" -position "10 10"]
-.r itemconfigure $ministrip 0 -text "ministrip" -sensitive f
-set ministrip2 [.r add tabular $view 1 \
- -labelformat "60x20" -connecteditem $ministrip]
-.r itemconfigure $ministrip2 0 -text "ministrip2" -sensitive f
-set ministrip3 [.r add tabular $view 1 \
- -labelformat "60x20" -connecteditem $ministrip2]
-.r itemconfigure $ministrip3 0 -text "ministrip3" -sensitive f
-
-#
-# MAPS
-#
-puts "creating maps"
-videomap load "/usr/share/toccata/maps/videomap_paris-w_90_2" 0 paris-w
-videomap load "/usr/share/toccata/maps/videomap_orly" 17 orly
-videomap load "/usr/share/toccata/maps/hegias_parouest_TE.vid" 0 paris-ouest
-
-set map [.r add map $view -color darkblue]
-.r itemconfigure $map -mapinfo orly
-
-set map2 [.r add map $view -color darkblue -filled 1 -priority 0 -fillpattern AlphaStipple1]
-.r itemconfigure $map2 -mapinfo paris-ouest
-
-set map3 [.r add map $view -color orange]
-
-mapinfo mpessai create
-mapinfo mpessai add text normal simple 0 200 "Et voilà"
-mapinfo mpessai add line simple 5 0 0 100 100
-mapinfo mpessai add line simple 0 100 100 0 200
-mapinfo mpessai add line simple 2 -100 100 0 0
-.r itemconfigure $map3 -mapinfo mpessai
-
-#
-# Clip
-#
-puts "crée les clips"
-set clip [.r add rectangle $view "-100 -100 300 200" -filled t \
- -linewidth 0 -fillcolor darkgray -visible f]
-#.r rotate $clip [expr 3.14159 / 4]
-.r lower $clip
-#.r itemconfigure $view -clip $clip
-
-.r add rectangle $top "-5 -5 5 5" -filled t -fillcolor red
-set topclip [.r add rectangle $top "-400 -400 400 400" \
- -filled t -fillcolor lightgray -linewidth 0 -visible t]
-.r lower $topclip
-#.r rotate $topclip [expr 3.14159 / 4]
-#.r itemconfigure $top -clip $topclip
-
-#
-# CONTROLS
-#
-proc borders {onoff} {
- set part [.r currentpart]
- puts "part $part $onoff"
- set contour noborder
- if { $onoff == "on" } {
- set contour "contour oblique"
- }
- if { [regexp {^[0-9]+$} $part] } {
- .r itemconfigure current $part -border $contour
- }
-}
-
-.r bind borders <Enter> "borders on"
-.r bind borders <Leave> "borders off"
-.r bind f0borders:0 <Enter> "borders on"
-.r bind f0borders:0 <Leave> "borders off"
-.r bind track <Enter> {puts "Entre dans item"}
-.r bind track <Leave> {puts "Sort d'item"}
-.r bind track:0 <Enter> {puts "Entre dans champ 0"}
-.r bind track:0 <Leave> {puts "Sort de champ 0"}
-.r bind track:1 <Enter> {puts "Entre dans champ 1"}
-.r bind track:1 <Leave> {puts "Sort de champ 1"}
-.r bind track:2 <Enter> {puts "Entre dans champ 2"}
-.r bind track:2 <Leave> {puts "Sort de champ 2"}
-.r bind track:3 <Enter> {puts "Entre dans champ 3"}
-.r bind track:3 <Leave> {puts "Sort de champ 3"}
-
-bind .r <2> {puts "%x@%y, item: [.r find atpoint %x %y]"}
-
-proc finditems {cornerx cornery} {
- global origx origy
-
- puts "--- enclosed ---"
- puts "++ [.r find enclosed $origx $origy $cornerx $cornery] ++"
- puts "--- overlapping ---"
- puts "++ [.r find overlapping $origx $origy $cornerx $cornery] ++"
- puts ""
-}
-
-bind .r <ButtonPress-1> "set origx %x; set origy %y"
-bind .r <ButtonRelease-1> "finditems %x %y"
-
-.r bind all <1> { if {! [catch {.r find withtag current} item] } { \
- puts "<1> in $item" } else { puts "None" } }
-
-#
-#for {set j 0} {$j < 20} {incr j} {
-# memory info
-# for {set i 0} {$i < 10} {incr i} {
-# set a($i) [.r add icon 1 -image logo]
-# set b($i) [.r add rectangle 1 "10 10 1000 1000" -filled t -tile logosmall]
-# set c($i) [.r add curve 1 "10 10 10 100 100 100" -filled t -tile logosmall]
-# }
-# for {set i 0} {$i < 10} {incr i} {
-# .r remove $a($i)
-# .r remove $b($i)
-# .r remove $c($i)
-# }
-#}
-
-source "controls.tcl"
-
diff --git a/sandbox/zinc.test b/sandbox/zinc.test
deleted file mode 100644
index d5ce7fe..0000000
--- a/sandbox/zinc.test
+++ /dev/null
@@ -1,154 +0,0 @@
-#-*- mode:tcl -*-
-
-if {[lsearch [namespace children] ::tcltest] == -1} {
-# package require tcltest
-# namespace import ::tcltest::*
- source [file join [pwd] [file dirname [info script]] defs.tcl]
-}
-
-proc setupHier {} {
- set view [.r add group 1]
- .r add rectangle $view "50 -150 100 -50" -tags "poly rectangle"
- set model [.r add group $view]
- .r add curve $model "50 -150 100 -50" -tags "poly foo"
- .r add rectangle $model "50 -150 100 -50" -tags "rectangle"
- .r add text $model -text "UnTexte" -tags "title"
- .r clone $model
- .r clone $model
- .r clone $model
- .r remove $model
-}
-
-load tkzinc3.1.so
-zinc .r
-pack .r
-update
-setupHier
-
-test FindItems-1.0 {Test subcommand 'all' with no args} {} {
- .r find all
-} {2 3 16 19 18 17 12 15 14 13 8 11 10 9}
-
-test FindItems-1.1 {Test subcommand 'all' with top group} {} {
- .r find all 1
-} {2 3 16 19 18 17 12 15 14 13 8 11 10 9}
-
-test FindItems-1.2 {Test subcommand 'all' with top group, non-recursive} {} {
- .r find all 1 f
-} {2}
-
-test FindItems-1.3 {Test subcommand 'all' with inner group} {} {
- .r find all 2
-} {3 16 19 18 17 12 15 14 13 8 11 10 9}
-
-test FindItems-1.4 {Test subcommand 'all' with inner group, non-recursive} {} {
- .r find all 2 f
-} {3 16 12 8}
-
-test FindItems-1.5 {Test subcommand 'all' with inner most group} {} {
- .r find all 8
-} {11 10 9}
-
-test FindItems-1.6 {Test subcommand 'all' with inner most group, non-recursive} {} {
- .r find all 8 f
-} {11 10 9}
-
-test FindItems-2.0 {Test subcommand 'above' with id} {} {
- .r find above 9
-} {10}
-
-test FindItems-2.1 {Test subcommand 'above' with tag} {} {
- .r find above foo
-} {18}
-
-test FindItems-2.2 {Test subcommand 'above' with tag in group} {} {
- .r find above foo 8
-} {10}
-
-test FindItems-2.3 {Test subcommand 'above' with tag in group} {} {
- .r find above foo 2 f
-} {}
-
-test FindItems-3.0 {Test subcommand 'below' with id} {} {
- .r find below 10
-} {9}
-
-test FindItems-3.1 {Test subcommand 'below' with tag} {} {
- .r find below title
-} {10}
-
-test FindItems-3.2 {Test subcommand 'below' with tag in group} {} {
- .r find below title 12
-} {14}
-
-test FindItems-3.3 {Test subcommand 'below' with tag in group, non-recursive} {} {
- .r find below title 2 f
-} {}
-
-test FindItems-4.0 {Test subcommand 'atpriority'} {} {
- .r find atpriority 2
-} {3 19 18 17 15 14 13 11 10 9}
-
-test FindItems-4.1 {Test subcommand 'atpriority' in group} {} {
- .r find atpriority 2 2
-} {3 19 18 17 15 14 13 11 10 9}
-
-test FindItems-4.2 {Test subcommand 'atpriority' in group, non-recursive} {} {
- .r find atpriority 2 2 f
-} {3}
-
-test FindItems-5.0 {Test subcommand 'withtag'} {} {
- .r find withtag poly
-} {3 17 13 9}
-
-test FindItems-5.1 {Test subcommand 'withtag' in group} {} {
- .r find withtag poly 2
-} {3 17 13 9}
-
-test FindItems-5.2 {Test subcommand 'withtag' in group, non-recursive} {} {
- .r find withtag poly 2 f
-} {3}
-
-test FindItems-6.0 {Test subcommand 'withtype'} {} {
- .r find withtype rectangle
-} {3 18 14 10}
-
-test FindItems-6.1 {Test subcommand 'withtype' in group} {} {
- .r find withtype rectangle 2
-} {3 18 14 10}
-
-test FindItems-6.2 {Test subcommand 'withtype' in group, non-recursive} {} {
- .r find withtype rectangle 2 f
-} {3}
-
-test FindItems-7.0 {Test tag operator '&&'} {} {
- .r find withtag {poly && rectangle}
-} {3}
-
-test FindItems-7.1 {Test tag operator '||'} {} {
- .r find withtag {poly || rectangle}
-} {3 18 17 14 13 10 9}
-
-test FindItems-7.2 {Test tag operator '!'} {} {
- .r find withtag {!rectangle&&!poly}
-} {2 16 19 12 15 8 11}
-
-test FindItems-7.3 {Test tag operator '^'} {} {
- .r find withtag {rectangle^poly}
-} {18 17 14 13 10 9}
-
-test FindItems-7.4 {Test tag grouping operator '()'} {} {
- .r find withtag {!(rectangle&&poly)}
-} {2 16 19 18 17 12 15 14 13 8 11 10 9}
-
-test FindItems-7.5 {Test not using tag grouping operator '()'} {} {
- .r find withtag {!rectangle&&poly}
-} {17 13 9}
-
-catch {destroy .r}
-#zinc .r
-#pack .r
-#update
-
-::tcltest::cleanupTests
-return