summaryrefslogtreecommitdiffstats
path: root/contrib/ppmtoansi
diff options
context:
space:
mode:
authorMichael Brown2005-05-17 18:44:57 +0200
committerMichael Brown2005-05-17 18:44:57 +0200
commit1097cf8685cd81f0003bd6f17d050e5174a85b90 (patch)
tree47a39f2a1e980cca43c28c4d1a6dfdf431b910b2 /contrib/ppmtoansi
parentQuickly hacked to use a buffer rather than a processor. (diff)
downloadipxe-1097cf8685cd81f0003bd6f17d050e5174a85b90.tar.gz
ipxe-1097cf8685cd81f0003bd6f17d050e5174a85b90.tar.xz
ipxe-1097cf8685cd81f0003bd6f17d050e5174a85b90.zip
Initial revision
Diffstat (limited to 'contrib/ppmtoansi')
-rw-r--r--contrib/ppmtoansi/Makefile67
-rw-r--r--contrib/ppmtoansi/demo/dos.ansi1
-rw-r--r--contrib/ppmtoansi/demo/dos.ppm51
-rw-r--r--contrib/ppmtoansi/demo/dos.xpm29
-rw-r--r--contrib/ppmtoansi/demo/etherboot.ansibin0 -> 1005 bytes
-rw-r--r--contrib/ppmtoansi/demo/etherboot.ppm99
-rw-r--r--contrib/ppmtoansi/demo/etherboot.xpm27
-rw-r--r--contrib/ppmtoansi/demo/flash.ansi1
-rw-r--r--contrib/ppmtoansi/demo/flash.ppm35
-rw-r--r--contrib/ppmtoansi/demo/flash.xpm25
-rw-r--r--contrib/ppmtoansi/demo/floppy.ansi1
-rw-r--r--contrib/ppmtoansi/demo/floppy.ppm51
-rw-r--r--contrib/ppmtoansi/demo/floppy.xpm29
-rw-r--r--contrib/ppmtoansi/demo/hd.ansibin0 -> 213 bytes
-rw-r--r--contrib/ppmtoansi/demo/hd.ppm51
-rw-r--r--contrib/ppmtoansi/demo/hd.xpm30
-rw-r--r--contrib/ppmtoansi/demo/ibmmap.ppm11
-rw-r--r--contrib/ppmtoansi/demo/ibmmap.xpm16
-rw-r--r--contrib/ppmtoansi/demo/linux-logo.ansibin0 -> 1490 bytes
-rw-r--r--contrib/ppmtoansi/demo/linux-logo.ppm552
-rw-r--r--contrib/ppmtoansi/demo/linux-logo.xpm73
-rwxr-xr-xcontrib/ppmtoansi/demo/make-ansi.sh17
-rw-r--r--contrib/ppmtoansi/demo/text.ansibin0 -> 200 bytes
-rw-r--r--contrib/ppmtoansi/demo/text.ppm51
-rw-r--r--contrib/ppmtoansi/demo/text.xpm28
-rw-r--r--contrib/ppmtoansi/demo/x.ansi1
-rw-r--r--contrib/ppmtoansi/demo/x.ppm51
-rw-r--r--contrib/ppmtoansi/demo/x.xpm25
-rw-r--r--contrib/ppmtoansi/ppmtoansi.c235
-rw-r--r--contrib/ppmtoansi/ppmtoansi.man120
30 files changed, 1677 insertions, 0 deletions
diff --git a/contrib/ppmtoansi/Makefile b/contrib/ppmtoansi/Makefile
new file mode 100644
index 00000000..bc0ca0a6
--- /dev/null
+++ b/contrib/ppmtoansi/Makefile
@@ -0,0 +1,67 @@
+CPPFLAGS =
+LDLIBS =
+CFLAGS = -pipe -g -O2 -Wall
+LDFLAGS = -pipe
+CC = gcc
+LD = gcc
+# Some "black" magic to determine optimal compiler flags for target
+# architecture
+TARGET_ARCH:= $(shell if [ \! -r .compile-options ] ; then ( \
+ cpu=`grep cpu /proc/cpuinfo 2>&1 |head -1| \
+ cut -d : -f 2-| sed -e 's/ //g'`; \
+ if [ x"$$cpu" = x"" ] ; then \
+ echo -fno-strength-reduce; \
+ else if [ "$$cpu" = "386" ] ; then \
+ echo -m386 -fno-strength-reduce; \
+ else if [ "$$cpu" = "486" ] ; then \
+ echo -m486 -fno-strength-reduce; \
+ else if [ "$$cpu" = "Alpha" ] ; then \
+ echo -fno-strength-reduce; \
+ else echo main\(\)\{\} >.compile-options.c; \
+ if gcc -mpentium -o .compile-options.o -c \
+ .compile-options.c &>/dev/null; then \
+ echo -mpentium -fstrength-reduce; \
+ else if gcc -m486 -malign-functions=2 -malign-jumps=2 \
+ -malign-loops=2 -o .compile-options.o -c \
+ .compile-options.c &>/dev/null; then \
+ echo -n -m486 -malign-functions=2 -malign-jumps=2; \
+ echo ' '-malign-loops=2 -fno-strength-reduce; \
+ else echo -m486; \
+ fi;fi;fi;fi;fi;fi) > .compile-options; \
+ rm -f .compile-options.c .compile-options.o; \
+ fi; cat .compile-options)
+ASFLAGS = $(TARGET_ARCH)
+
+OBJS = ppmtoansi.o
+
+##############################################################################
+
+ifeq (.depend,$(wildcard .depend))
+all: ppmtoansi
+include .depend
+else
+all: depend
+ @$(MAKE) all
+endif
+
+##############################################################################
+
+ppmtoansi: $(OBJS)
+
+##############################################################################
+
+clean:
+ $(RM) *~ *.o *.dvi *.log *.aux *yacc.tab.[ch] *yacc.output *lex.[co] \
+ *.dat .depend .tmp_depend .compile-options*
+ strip ppmtoansi >&/dev/null || true
+
+distclean: clean
+ $(RM) -rf ppmtoansi
+
+##############################################################################
+
+depend:
+ for i in *.c;do $(CPP) $(CPPFLAGS) -MM $$i;done >.tmp_depend
+ mv .tmp_depend .depend
+
+##############################################################################
diff --git a/contrib/ppmtoansi/demo/dos.ansi b/contrib/ppmtoansi/demo/dos.ansi
new file mode 100644
index 00000000..2ce5cda4
--- /dev/null
+++ b/contrib/ppmtoansi/demo/dos.ansi
@@ -0,0 +1 @@
+[9;;1- [15;;1- [18;;5-l[9;1;3-$[13;1;3-$[17;1;1-[9;2;1- [12;2;1- [15;2;1- [17;2;1-[9;3;1- [15;3;1- [18;3;5-l[9;4;1- [15;4;1- [23;4;1-[9;5;1- [15;5;1- [23;5;1-[9;6;1- [15;6;1- [18;6;5-l[8;8;4-I [14;8;4-m[19;8;5-[8;9;1-@[12;9;2-L[18;9;2-[8;10;1-@[11;10;1-`[13;10;1-@[18;10;1-[20;10;1-`[8;11;1-@[11;11;1-`[13;11;1-@[19;11;5-[8;12;1-@[11;12;1-`[13;12;1-@[20;12;1-`[24;12;1-[8;13;1-@[12;13;2-L[18;13;2-l[24;13;1-[8;14;4-I [14;14;4-m[19;14;5- \ No newline at end of file
diff --git a/contrib/ppmtoansi/demo/dos.ppm b/contrib/ppmtoansi/demo/dos.ppm
new file mode 100644
index 00000000..6efde7fa
--- /dev/null
+++ b/contrib/ppmtoansi/demo/dos.ppm
@@ -0,0 +1,51 @@
+P3
+17 16
+65535
+0 0 0 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 65535 0 0 0 0 0 0 0 0 0 65535 65535 0 65535 65535
+0 65535 65535 0 65535 65535 0 65535 65535 0 0 0 0 0 0
+0 0 0 65535 0 0 65535 0 0 65535 0 0 0 0 0 65535 0 0
+65535 0 0 65535 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 65535 0 0 0 0 0 0 0 0 65535 0 0 0 0 0
+0 0 0 65535 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 65535 0 0 0 0 0 0 0 0 0 65535 65535 0 65535 65535
+0 65535 65535 0 65535 65535 0 65535 65535 0 0 0 0 0 0
+0 0 0 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 65535 65535 0 0 0
+0 0 0 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 65535 65535 0 0 0
+0 0 0 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 65535 0 0 0 0 0 0 0 0 0 65535 65535 0 65535 65535
+0 65535 65535 0 65535 65535 0 65535 65535 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 0 0 0 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 0 0 0 65535 0 65535
+65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 0 0 0
+0 65535 0 0 0 0 0 0 0 0 0 0 0 65535 0 65535 65535 0
+0 0 0 0 0 0 0 0 0 0 0 0 65535 0 65535 65535 65535 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 65535 0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 65535 0
+0 0 0 0 0 0 0 0 0 0 0 0 65535 0 65535 0 0 0
+65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 65535 0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 65535 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 65535
+65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 0 0 0
+0 65535 0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 65535 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+65535 65535 0 0 0 0 0 0 0 0 0 0 65535 0 65535
+0 65535 0 0 0 0 0 0 0 0 0 0 0 65535 0 65535 65535 0
+0 0 0 0 0 0 0 0 0 0 0 0 65535 65535 0 65535 65535 0
+0 0 0 0 0 0 0 0 0 0 0 0 65535 0 65535
+0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 0 0 0 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 0 0 0 65535 0 65535
+65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
diff --git a/contrib/ppmtoansi/demo/dos.xpm b/contrib/ppmtoansi/demo/dos.xpm
new file mode 100644
index 00000000..471c4edf
--- /dev/null
+++ b/contrib/ppmtoansi/demo/dos.xpm
@@ -0,0 +1,29 @@
+/* XPM */
+static char *noname[] = {
+/* width height ncolors chars_per_pixel */
+"17 16 6 1",
+/* colors */
+"` c #000000",
+"a c #00FFFF",
+"b c #00FF00",
+"c c #FF00FF",
+"d c #FF0000",
+"e c #FFFF00",
+/* pixels */
+"`d`````d``aaaaa``",
+"`ddd`ddd`a```````",
+"`d``d``d`a```````",
+"`d`````d``aaaaa``",
+"`d`````d```````a`",
+"`d`````d```````a`",
+"`d`````d``aaaaa``",
+"`````````````````",
+"bbbb``eeee`ccccc`",
+"b```be````ce`````",
+"b``e`b````c`e````",
+"b``e`b`````ccccc`",
+"b``e`b``````e```c",
+"b```be````ee````c",
+"bbbb``eeee`ccccc`",
+"`````````````````"
+};
diff --git a/contrib/ppmtoansi/demo/etherboot.ansi b/contrib/ppmtoansi/demo/etherboot.ansi
new file mode 100644
index 00000000..7975f36c
--- /dev/null
+++ b/contrib/ppmtoansi/demo/etherboot.ansi
Binary files differ
diff --git a/contrib/ppmtoansi/demo/etherboot.ppm b/contrib/ppmtoansi/demo/etherboot.ppm
new file mode 100644
index 00000000..da5b2458
--- /dev/null
+++ b/contrib/ppmtoansi/demo/etherboot.ppm
@@ -0,0 +1,99 @@
+P3
+32 16
+65535
+0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535
+0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535
+0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535
+0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535
+0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535
+0 0 0 0 0 0
+0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535
+0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535
+0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535
+0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535
+0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535
+0 0 0 0 0 0
+65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0
+65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0
+65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0
+65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0
+65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0
+65535 0 0 65535 0 0
+65535 0 0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 65535 0
+0 65535 0 0 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0
+0 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 0
+0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 0
+0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 0 0 0 0
+0 0 0 65535 0 0
+65535 0 0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 65535 0
+0 65535 0 0 0 0 0 65535 0 0 0 0 0 0 0 0 65535 0
+0 0 0 0 65535 0 0 0 0 0 0 0 0 65535 0 0 0 0
+0 0 0 0 0 0 0 65535 0 0 0 0 0 0 0 0 0 0
+0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 0 0 0 0
+0 0 0 65535 0 0
+65535 0 0 0 0 0 0 0 0 0 65535 0 0 0 0 0 0 0
+0 65535 0 0 0 0 0 65535 0 0 0 0 0 0 0 0 65535 0
+0 0 0 0 65535 0 0 0 0 0 0 0 0 65535 0 0 0 0
+0 0 0 0 0 0 0 65535 0 0 0 0 0 0 0 0 0 0
+0 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 65535 0 0
+0 0 0 65535 0 0 0 0 0 0 65535 0 0 65535 0 0 65535 0
+0 65535 0 0 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0
+0 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 0
+0 0 0 0 0 0 0 65535 0 0 0 0 0 0 0 0 0 0
+0 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 65535 0 0
+0 0 0 0 0 0 65535 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 65535 0 0
+0 0 0 65535 0 0 0 0 0 0 65535 0 0 65535 0 0 65535 0
+0 65535 0 0 65535 0 0 0 0 0 65535 0 0 65535 0 0 65535 0
+0 65535 0 0 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0
+0 65535 0 0 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 65535 0 0
+65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0
+0 0 0 0 0 0 0 0 0 0 65535 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 0 0
+0 0 0 0 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 65535 0 0
+65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0
+0 0 0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 65535 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 0 0
+0 0 0 0 0 0 0 65535 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 65535 0 0
+65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0
+0 0 0 0 0 0 0 0 0 0 65535 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 0 0
+0 0 0 0 0 0 0 65535 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 65535 0 0
+65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0
+65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0
+65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0
+65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0
+65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0
+65535 0 0 65535 0 0
+0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535
+0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535
+0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535
+0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535
+0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535
+0 0 0 0 0 0
+0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535
+0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535
+0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535
+0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535
+0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535
+0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0
diff --git a/contrib/ppmtoansi/demo/etherboot.xpm b/contrib/ppmtoansi/demo/etherboot.xpm
new file mode 100644
index 00000000..d4217146
--- /dev/null
+++ b/contrib/ppmtoansi/demo/etherboot.xpm
@@ -0,0 +1,27 @@
+/* XPM */
+static char *noname[] = {
+/* width height ncolors chars_per_pixel */
+"32 16 4 1",
+/* colors */
+"` c #000000",
+"a c #00FFFF",
+"b c #00FF00",
+"c c #FF0000",
+/* pixels */
+"``a``a``a``a``a``a``a``a``a``a``",
+"``a``a``a``a``a``a``a``a``a``a``",
+"cccccccccccccccccccccccccccccccc",
+"c``bbbb`bbbb`bbbb`bbbbb`bbbb```c",
+"c``bbbb`b``b`b``b```b```bbbb```c",
+"c``b``b`b``b`b``b```b```b``````c",
+"`c`bbbb`bbbb`bbbb```b```b``````c",
+"``c````````````````````````````c",
+"`c`bbbbb`bbbb`bbbbb`bbbb```````c",
+"c````b```b``````b```bbbb```````c",
+"c````b```bbb````b```b``````````c",
+"c````b```b``````b```b``````````c",
+"cccccccccccccccccccccccccccccccc",
+"``a``a``a``a``a``a``a``a``a``a``",
+"``a``a``a``a``a``a``a``a``a``a``",
+"````````````````````````````````"
+};
diff --git a/contrib/ppmtoansi/demo/flash.ansi b/contrib/ppmtoansi/demo/flash.ansi
new file mode 100644
index 00000000..43837a78
--- /dev/null
+++ b/contrib/ppmtoansi/demo/flash.ansi
@@ -0,0 +1 @@
+[11;;2-l[11;1;2-l[17;1;1-`[11;2;2-l[16;2;2-l[11;3;2-l[15;3;3-m[11;4;2-l[14;4;4-m[11;5;2-l[14;5;4-m[11;6;4-m[16;6;2-l[11;7;4-m[16;7;2-l[11;8;3-m[16;8;2-l[11;9;2-l[16;9;2-l[11;10;1-`[16;10;2-l[16;11;2-l[13;12;2-l[16;12;2-l[19;12;2-l[14;13;6-m[15;14;4-m[16;15;2-l \ No newline at end of file
diff --git a/contrib/ppmtoansi/demo/flash.ppm b/contrib/ppmtoansi/demo/flash.ppm
new file mode 100644
index 00000000..1464af6e
--- /dev/null
+++ b/contrib/ppmtoansi/demo/flash.ppm
@@ -0,0 +1,35 @@
+P3
+10 16
+65535
+65535 65535 0 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0
+65535 65535 0 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0
+65535 65535 0 0 0 0 0 0 0 0 0 0
+65535 65535 0 65535 65535 0 0 0 0 0 0 0 0 0 0 65535 65535 0
+65535 65535 0 0 0 0 0 0 0 0 0 0
+65535 65535 0 65535 65535 0 0 0 0 0 0 0 65535 65535 0 65535 65535 0
+65535 65535 0 0 0 0 0 0 0 0 0 0
+65535 65535 0 65535 65535 0 0 0 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 0 0 0 0 0 0 0 0 0
+65535 65535 0 65535 65535 0 0 0 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 0 0 0 0 0 0 0 0 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 0 0 0 65535 65535 0
+65535 65535 0 0 0 0 0 0 0 0 0 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 0 0 0 65535 65535 0
+65535 65535 0 0 0 0 0 0 0 0 0 0
+65535 65535 0 65535 65535 0 65535 65535 0 0 0 0 0 0 0 65535 65535 0
+65535 65535 0 0 0 0 0 0 0 0 0 0
+65535 65535 0 65535 65535 0 0 0 0 0 0 0 0 0 0 65535 65535 0
+65535 65535 0 0 0 0 0 0 0 0 0 0
+65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 65535 0
+65535 65535 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 65535 0
+65535 65535 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 65535 65535 0 65535 65535 0 0 0 0 65535 65535 0
+65535 65535 0 0 0 0 65535 65535 0 65535 65535 0
+0 0 0 0 0 0 0 0 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 65535 0
+65535 65535 0 0 0 0 0 0 0 0 0 0
diff --git a/contrib/ppmtoansi/demo/flash.xpm b/contrib/ppmtoansi/demo/flash.xpm
new file mode 100644
index 00000000..25419d70
--- /dev/null
+++ b/contrib/ppmtoansi/demo/flash.xpm
@@ -0,0 +1,25 @@
+/* XPM */
+static char *noname[] = {
+/* width height ncolors chars_per_pixel */
+"10 16 2 1",
+/* colors */
+" c #000000",
+"x c #FFFF00",
+/* pixels */
+"xx ",
+"xx x ",
+"xx xx ",
+"xx xxx ",
+"xx xxxx ",
+"xx xxxx ",
+"xxxx xx ",
+"xxxx xx ",
+"xxx xx ",
+"xx xx ",
+"x xx ",
+" xx ",
+" xx xx xx",
+" xxxxxx ",
+" xxxx ",
+" xx ",
+};
diff --git a/contrib/ppmtoansi/demo/floppy.ansi b/contrib/ppmtoansi/demo/floppy.ansi
new file mode 100644
index 00000000..f4267f40
--- /dev/null
+++ b/contrib/ppmtoansi/demo/floppy.ansi
@@ -0,0 +1 @@
+[9;;14-%m@[8;1;16-$[l[8;2;17-$[l [8;3;17-$[l [8;4;17-$m [8;5;17;1+[8;6;17;1+[8;7;17-$m [8;8;17-$mۉ [8;9;17-$m [8;10;17-$mۉ [8;11;17-$m [8;12;17-$mۉ [8;13;17-2mm [8;14;17-2kmۤ [9;15;15-'mlH \ No newline at end of file
diff --git a/contrib/ppmtoansi/demo/floppy.ppm b/contrib/ppmtoansi/demo/floppy.ppm
new file mode 100644
index 00000000..2b0b2863
--- /dev/null
+++ b/contrib/ppmtoansi/demo/floppy.ppm
@@ -0,0 +1,51 @@
+P3
+17 16
+65535
+0 0 0 65535 0 0 65535 0 0 65535 65535 0 65535 0 0 65535 0 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 0 0 0 0 0 0 0 0
+65535 0 0 65535 0 0 65535 0 0 65535 65535 0 65535 0 0 65535 0 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 0 0 65535 0 0
+65535 0 0 65535 65535 0 65535 0 0 65535 0 0 0 0 0
+65535 0 0 65535 0 0 65535 0 0 65535 65535 0 65535 0 0 65535 0 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 0 0 65535 0 0
+65535 0 0 65535 65535 0 65535 0 0 65535 0 0 65535 0 0
+65535 0 0 65535 0 0 65535 0 0 65535 65535 0 65535 0 0 65535 0 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 0 0 65535 0 0
+65535 0 0 65535 65535 0 65535 0 0 65535 0 0 65535 0 0
+65535 0 0 65535 0 0 65535 0 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 0 0 65535 0 0 65535 0 0
+65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0
+65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0
+65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0
+65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0
+65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0
+65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0
+65535 0 0 65535 0 0 65535 0 0 0 65535 65535 0 65535 65535 0 65535 65535
+0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535
+0 65535 65535 0 65535 65535 65535 0 0 65535 0 0 65535 0 0
+65535 0 0 65535 0 0 65535 0 0 0 65535 65535 65535 0 65535 65535 0 65535
+65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535
+65535 0 65535 0 65535 65535 65535 0 0 65535 0 0 65535 0 0
+65535 0 0 65535 0 0 65535 0 0 0 65535 65535 0 65535 65535 0 65535 65535
+0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535
+0 65535 65535 0 65535 65535 65535 0 0 65535 0 0 65535 0 0
+65535 0 0 65535 0 0 65535 0 0 0 65535 65535 65535 0 65535 65535 0 65535
+65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535
+65535 0 65535 0 65535 65535 65535 0 0 65535 0 0 65535 0 0
+65535 0 0 65535 0 0 65535 0 0 0 65535 65535 0 65535 65535 0 65535 65535
+0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535
+0 65535 65535 0 65535 65535 65535 0 0 65535 0 0 65535 0 0
+65535 0 0 65535 0 0 65535 0 0 0 65535 65535 65535 0 65535 65535 0 65535
+65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535
+65535 0 65535 0 65535 65535 65535 0 0 65535 0 0 65535 0 0
+65535 0 0 0 0 65535 0 0 65535 0 65535 65535 0 65535 65535 0 65535 65535
+0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535
+0 65535 65535 0 65535 65535 0 0 65535 0 0 65535 65535 0 0
+65535 0 0 0 0 65535 0 0 65535 0 65535 65535 65535 0 65535 65535 0 65535
+65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535
+65535 0 65535 0 65535 65535 0 0 65535 0 0 65535 65535 0 0
+0 0 0 65535 0 0 65535 0 0 0 65535 65535 0 65535 65535 0 65535 65535
+0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535
+0 65535 65535 0 65535 65535 65535 0 0 65535 0 0 0 0 0
diff --git a/contrib/ppmtoansi/demo/floppy.xpm b/contrib/ppmtoansi/demo/floppy.xpm
new file mode 100644
index 00000000..8bb60d29
--- /dev/null
+++ b/contrib/ppmtoansi/demo/floppy.xpm
@@ -0,0 +1,29 @@
+/* XPM */
+static char *noname[] = {
+/* width height ncolors chars_per_pixel */
+"17 16 6 1",
+/* colors */
+"` c #000000",
+"a c #00FFFF",
+"b c #FF00FF",
+"c c #FF0000",
+"d c #FFFF00",
+"e c #0000FF",
+/* pixels */
+"`ccdccddddddddc``",
+"cccdccddddcccdcc`",
+"cccdccddddcccdccc",
+"cccdccddddcccdccc",
+"cccdddddddddddccc",
+"ccccccccccccccccc",
+"ccccccccccccccccc",
+"cccaaaaaaaaaaaccc",
+"cccabbbbbbbbbaccc",
+"cccaaaaaaaaaaaccc",
+"cccabbbbbbbbbaccc",
+"cccaaaaaaaaaaaccc",
+"cccabbbbbbbbbaccc",
+"ceeaaaaaaaaaaaeec",
+"ceeabbbbbbbbbaeec",
+"`ccaaaaaaaaaaacc`"
+};
diff --git a/contrib/ppmtoansi/demo/hd.ansi b/contrib/ppmtoansi/demo/hd.ansi
new file mode 100644
index 00000000..33bda53c
--- /dev/null
+++ b/contrib/ppmtoansi/demo/hd.ansi
Binary files differ
diff --git a/contrib/ppmtoansi/demo/hd.ppm b/contrib/ppmtoansi/demo/hd.ppm
new file mode 100644
index 00000000..34878bf9
--- /dev/null
+++ b/contrib/ppmtoansi/demo/hd.ppm
@@ -0,0 +1,51 @@
+P3
+17 16
+65535
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0
+65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0
+65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+65535 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0
+0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0
+65535 0 0 65535 0 0 65535 0 0 0 0 0 0 0 0
+65535 0 0 0 65535 0 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535
+0 65535 0 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 0 65535 0
+65535 0 0 65535 65535 0 65535 65535 0 65535 0 0 0 0 0
+65535 0 0 0 65535 0 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535
+0 65535 0 65535 0 65535 0 65535 0 0 65535 0 0 65535 0 0 65535 0
+65535 0 0 65535 65535 0 65535 65535 0 65535 0 0 0 0 0
+65535 0 0 0 65535 0 65535 0 65535 0 65535 0 0 65535 0 0 65535 0
+0 65535 0 65535 0 65535 0 65535 0 0 65535 0 0 65535 0 0 65535 0
+65535 0 0 65535 65535 0 65535 65535 0 65535 0 0 0 0 0
+65535 0 0 0 65535 0 65535 0 65535 0 65535 0 0 65535 0 0 65535 0
+0 65535 0 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 0 65535 0
+65535 0 0 65535 65535 0 65535 0 0 0 0 0 0 0 0
+65535 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0
+0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0
+65535 0 0 65535 0 0 0 0 65535 0 0 65535 0 0 65535
+65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0
+65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0
+65535 0 0 0 65535 65535 0 65535 65535 0 0 65535 0 0 65535
+0 0 0 0 0 65535 0 65535 65535 65535 0 0 65535 0 0 65535 0 0
+65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 65535 65535
+0 65535 65535 0 65535 65535 0 0 65535 0 65535 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 65535 65535 0 65535 65535 0 0 65535
+0 0 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535
+0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535
+0 65535 65535 0 0 65535 0 65535 65535 0 65535 65535 0 0 65535
+0 0 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535
+0 65535 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 65535 65535 0 0 65535 0 65535 65535 0 0 65535 0 0 0
+0 0 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535
+0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535
+0 65535 65535 0 0 65535 0 0 65535 0 0 0 0 0 0
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
diff --git a/contrib/ppmtoansi/demo/hd.xpm b/contrib/ppmtoansi/demo/hd.xpm
new file mode 100644
index 00000000..280c7abc
--- /dev/null
+++ b/contrib/ppmtoansi/demo/hd.xpm
@@ -0,0 +1,30 @@
+/* XPM */
+static char *noname[] = {
+/* width height ncolors chars_per_pixel */
+"17 16 7 1",
+/* colors */
+"` c #000000",
+"a c #00FFFF",
+"b c #00FF00",
+"c c #FF00FF",
+"d c #FF0000",
+"e c #FFFF00",
+"f c #0000FF",
+/* pixels */
+"`````````````````",
+"ddddddddddddd````",
+"dbbbbbbbbbbbddd``",
+"dbccccbccccbdeed`",
+"dbccccbcbbbbdeed`",
+"dbcbbbbcbbbbdeed`",
+"dbcbbbbccccbded``",
+"dbbbbbbbbbbbddfff",
+"dddddddddddddaaff",
+"`faddddddddaaafaf",
+"ffffffffffffffaaf",
+"faaaaaaaaaaaafaaf",
+"faaaaaafffffafaf`",
+"faaaaaaaaaaaaff``",
+"ffffffffffffff```",
+"`````````````````"
+};
diff --git a/contrib/ppmtoansi/demo/ibmmap.ppm b/contrib/ppmtoansi/demo/ibmmap.ppm
new file mode 100644
index 00000000..648676e4
--- /dev/null
+++ b/contrib/ppmtoansi/demo/ibmmap.ppm
@@ -0,0 +1,11 @@
+P3
+8 1
+255
+ 0 0 0
+255 0 0
+ 0 255 0
+ 0 0 255
+255 255 0
+255 0 255
+ 0 255 255
+255 255 255
diff --git a/contrib/ppmtoansi/demo/ibmmap.xpm b/contrib/ppmtoansi/demo/ibmmap.xpm
new file mode 100644
index 00000000..06d4d990
--- /dev/null
+++ b/contrib/ppmtoansi/demo/ibmmap.xpm
@@ -0,0 +1,16 @@
+/* XPM */
+static char *noname[] = {
+/* width height ncolors chars_per_pixel */
+"8 1 8 1",
+/* colors */
+"` c #000000",
+"a c #00FFFF",
+"b c #00FF00",
+"c c #FF00FF",
+"d c #FF0000",
+"e c #FFFFFF",
+"f c #FFFF00",
+"g c #0000FF",
+/* pixels */
+"`dbgfcae"
+};
diff --git a/contrib/ppmtoansi/demo/linux-logo.ansi b/contrib/ppmtoansi/demo/linux-logo.ansi
new file mode 100644
index 00000000..165f834b
--- /dev/null
+++ b/contrib/ppmtoansi/demo/linux-logo.ansi
Binary files differ
diff --git a/contrib/ppmtoansi/demo/linux-logo.ppm b/contrib/ppmtoansi/demo/linux-logo.ppm
new file mode 100644
index 00000000..18604b44
--- /dev/null
+++ b/contrib/ppmtoansi/demo/linux-logo.ppm
@@ -0,0 +1,552 @@
+P3
+52 61
+65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0
+0 0 0 65535 65535 65535 65535 65535 65535 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0
+0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 0 0 0 0 0 0
+0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0
+65535 65535 65535 0 0 0 0 0 0 65535 65535 65535 0 0 0 0 0 0
+0 0 0 65535 65535 65535 65535 65535 65535 0 0 0 0 0 0 65535 65535 65535
+65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0
+65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0
+65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0
+65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0
+0 0 0 65535 65535 65535 0 0 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 0 0 0 0 0 65535 65535 65535
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0
+0 0 0 65535 0 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0
+0 0 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0
+0 0 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0
+0 0 0 0 0 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 0 0 65535 65535 0 65535 65535 0 65535 65535 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0
+0 0 0 65535 65535 65535 65535 0 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 0 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 65535
+65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0
+0 0 0 65535 65535 65535 65535 65535 65535 65535 0 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 0 0 65535 65535 0 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0
+0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 0 0 65535 0 0
+65535 65535 0 65535 65535 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 0 0 0
+0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 0 0 0 0 0 0 0
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 0 0 0 0 0 0 0 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 0 0 0 0 0 0 0 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 0 0 0 0 0 0 0 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 0 0 0 0 0 0 0 0 0 0 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 0 0 0 0 0 0 0 0 0 0 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0
+0 0 0 0 0 0 0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0
+0 0 0 0 0 0 0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0
+0 0 0 0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 0 0 0
+0 0 0 0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 0 0 0
+0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 0 0 0 0 0 0 0
+0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 0 0 0 0 0 0 0
+0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 0 0 0 0 0 0 0
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 0 0 0 0 0 0 0 0 0 0
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 0 0 0
+0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 0
+65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+0 0 0 0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 65535 65535 0 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 0 0 0 0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 0 65535 65535 0
+65535 65535 0 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 65535 65535 0 65535 65535 0 65535 0 0 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 0 0 0 0 0 0 0 0 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 0 65535 65535 0
+65535 65535 0 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 0 0 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 65535 0 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 0 0 0 0 0 0 0 0 0 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 0 0 65535 0 0 0 0 0 65535 0 0
+65535 0 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+65535 0 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 0 0 0 0 0 0 0 0 0
+0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 0 0
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+65535 0 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 0 0 0 0 0 0 0 0 0
+0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+65535 0 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 0 0 0 0 0 0
+0 0 0 0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 0 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 0 0 0 0 65535 0 0 65535
+0 0 65535 65535 0 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 0 0 0
+0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 0 0 0 0 0 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 0 0 65535
+0 0 65535 65535 0 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 0 0 0 0 0 0 65535 0 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 0 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 0 0 0 0 0 0 0 0 0 65535 0 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 0 0 65535
+65535 0 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 0 0 0 0 65535 0 0 65535
+0 0 65535 65535 0 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 0 0 0 0 0 0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 65535 0 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 0 0 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 65535 0 0 65535 0 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 0 0 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 65535 0 65535 65535 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 0 0
+0 0 65535 0 0 65535 0 0 65535 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 65535 65535 0 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 0 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 65535 0 0 65535 0 0
+65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 65535 0 0
+65535 0 0 65535 0 0 65535 65535 0 65535 0 0 65535 0 0 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 65535 0 0 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 65535
diff --git a/contrib/ppmtoansi/demo/linux-logo.xpm b/contrib/ppmtoansi/demo/linux-logo.xpm
new file mode 100644
index 00000000..fd2dd671
--- /dev/null
+++ b/contrib/ppmtoansi/demo/linux-logo.xpm
@@ -0,0 +1,73 @@
+/* XPM */
+static char *noname[] = {
+/* width height ncolors chars_per_pixel */
+"52 61 5 1",
+/* colors */
+"` c #000000",
+"a c #FF0000",
+"b c #FFFFFF",
+"c c #FFFF00",
+"d c #0000FF",
+/* pixels */
+"dddddddddddddddddddddd```````ddddddddddddddddddddddd",
+"dddddddddddddddddddd```````````ddddddddddddddddddddd",
+"ddddddddddddddddddd`````````````dddddddddddddddddddd",
+"dddddddddddddddddd```````````````ddddddddddddddddddd",
+"ddddddddddddddddd`````````````````dddddddddddddddddd",
+"ddddddddddddddddd`````````````````dddddddddddddddddd",
+"ddddddddddddddddd``````````````````ddddddddddddddddd",
+"ddddddddddddddddd``````````````````ddddddddddddddddd",
+"ddddddddddddddddd``````````````````ddddddddddddddddd",
+"ddddddddddddddddd``bb`````bbbb`````ddddddddddddddddd",
+"ddddddddddddddddd``bbb```bbbbb`````ddddddddddddddddd",
+"ddddddddddddddddd`b``b```bb``bb````ddddddddddddddddd",
+"ddddddddddddddddd`b``````b````b````ddddddddddddddddd",
+"ddddddddddddddddd`````cccc````b````ddddddddddddddddd",
+"ddddddddddddddddd``b`cccccca`b``````dddddddddddddddd",
+"ddddddddddddddddd``acccccccccc``````dddddddddddddddd",
+"ddddddddddddddddd``cccccccccccc`````dddddddddddddddd",
+"ddddddddddddddddd``ccccccccccca`````dddddddddddddddd",
+"ddddddddddddddddd```ccccccaccc``````dddddddddddddddd",
+"ddddddddddddddddd``bacccaccccbb``````ddddddddddddddd",
+"ddddddddddddddddd``bbacccacbbbb```````dddddddddddddd",
+"ddddddddddddddddd``bbbaaccbbbbbb``````dddddddddddddd",
+"dddddddddddddddd```bbbbbbbbbbbbb```````ddddddddddddd",
+"ddddddddddddddd```bbbbbbbbbbbbbbb``````ddddddddddddd",
+"dddddddddddddd```bbbbbbbbbbbbbbbb```````dddddddddddd",
+"dddddddddddddd```bbbbbbbbbbbbbbbbb```````ddddddddddd",
+"ddddddddddddd```bbbbbbbbbbbbbbbbbb````````dddddddddd",
+"dddddddddddd````bbbbbbbbbbbbbbbbbb````````dddddddddd",
+"dddddddddddd````bbbbbbbbbbbbbbbbbbb````````ddddddddd",
+"ddddddddddd````bbbbbbbbbbbbbbbbbbbb`````````dddddddd",
+"ddddddddddd````bbbbbbbbbbbbbbbbbbbbb````````dddddddd",
+"ddddddddddd```bbbbbbbbbbbbbbbbbbbbbb````````dddddddd",
+"dddddddddd````bbbbbbbbbbbbbbbbbbbbbbb````````ddddddd",
+"dddddddddd```bbbbbbbbbbbbbbbbbbbbbbbb````````ddddddd",
+"ddddddddd````bbbbbbbbbbbbbbbbbbbbbbbb````````ddddddd",
+"ddddddddd````bbbbbbbbbbbbbbbbbbbbbbbb`````````dddddd",
+"ddddddddd```bbbbbbbbbbbbbbbbbbbbbbbbb`````````dddddd",
+"dddddddd````bbbbbbbbbbbbbbbbbbbbbbbbb`````````dddddd",
+"ddddddd`````bbbbbbbbbbbbbbbbbbbbbbbbb`````````dddddd",
+"ddddddd`````bbbbbbbbbbbbbbbbbbbbbbbbb`````````dddddd",
+"ddddddd`````bbbbbbbbbbbbbbbbbbbbbbbbb`````````dddddd",
+"ddddddd``c``bbbbbbbbbbbbbbbbbbbbbbbbb`````````dddddd",
+"dddddddcccc``bbbbbbbbbbbbbbbbbbbbbbcc`````````dddddd",
+"dddddddccccc``bbbbbbbbbbbbbbbbbbbbcccc```````cdddddd",
+"ddddddccccccc``bbbbbbbbbbbbbbbbbbbccca``````ccaddddd",
+"dddddcccccccca``bbbbbbbbbbbbbbbbbbccca`````cccaddddd",
+"dacccccccccccc```bbbbbbbbbbbbbbbbbccccaa`aaccccddddd",
+"acccccccccccccc````bbbbbbbbbbbbbbbcccccccccccccadddd",
+"acccccccccccccc````bbbbbbbbbbbbbbbccccccccccccccdddd",
+"accccccccccccccc````bbbbbbbbbbbbbbaccccccccccccccadd",
+"daccccccccccccccc``bbbbbbbbbbbbbb``ccccccccccccccccd",
+"daccccccccccccccccbbbbbbbbbbbbbb``accccccccccccccccc",
+"acccccccccccccccccbbbbbbbbbbbbb```accccccccccccccccd",
+"acccccccccccccccccabbbbbbbbbb`````accccccccccccccadd",
+"dacccccccccccccccca``bbbb`````````acccccccccccccdddd",
+"dacccccccccccccccca```````````````acccccccccccaddddd",
+"ddaacccccccccccccca```````````````acccccccccaddddddd",
+"ddddddaaaacccccccaddd```````````dddaccccccaddddddddd",
+"ddddddddddaaaaaaaddddddddddddddddddaaacaaddddddddddd",
+"ddddddddddddddadddddddddddddddddddddaaaadddddddddddd",
+"dddddddddddddddddddddddddddddddddddddddddddddddddddd"
+};
diff --git a/contrib/ppmtoansi/demo/make-ansi.sh b/contrib/ppmtoansi/demo/make-ansi.sh
new file mode 100755
index 00000000..16d7b98d
--- /dev/null
+++ b/contrib/ppmtoansi/demo/make-ansi.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+xpmtoppm <linux-logo.xpm >linux-logo.ppm
+../ppmtoansi -b 0/0/255 -y 10 -t 0/0/0:4 linux-logo.ppm >linux-logo.ansi
+xpmtoppm <etherboot.xpm >etherboot.ppm
+../ppmtoansi -b 0/0/0 etherboot.ppm >etherboot.ansi
+xpmtoppm <text.xpm >text.ppm
+../ppmtoansi -b 0/0/0 -x 10 text.ppm >text.ansi
+xpmtoppm <x.xpm >x.ppm
+../ppmtoansi -b 0/0/0 -x 8 x.ppm >x.ansi
+xpmtoppm <dos.xpm >dos.ppm
+../ppmtoansi -b 0/0/0 -x 8 dos.ppm >dos.ansi
+xpmtoppm <hd.xpm >hd.ppm
+../ppmtoansi -b 0/0/0 -x 8 hd.ppm >hd.ansi
+xpmtoppm <floppy.xpm >floppy.ppm
+../ppmtoansi -b 0/0/0 -x 8 floppy.ppm >floppy.ansi
+xpmtoppm <flash.xpm >flash.ppm
+../ppmtoansi -b 0/0/0 -x 11 flash.ppm >flash.ansi
diff --git a/contrib/ppmtoansi/demo/text.ansi b/contrib/ppmtoansi/demo/text.ansi
new file mode 100644
index 00000000..bbe7998a
--- /dev/null
+++ b/contrib/ppmtoansi/demo/text.ansi
Binary files differ
diff --git a/contrib/ppmtoansi/demo/text.ppm b/contrib/ppmtoansi/demo/text.ppm
new file mode 100644
index 00000000..c6f87610
--- /dev/null
+++ b/contrib/ppmtoansi/demo/text.ppm
@@ -0,0 +1,51 @@
+P3
+13 16
+65535
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535
+0 0 65535 0 0 65535 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535
+0 0 65535 0 0 65535 0 0 65535 0 0 0 0 0 0 0 0 0
+0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 65535 65535 65535
+0 0 65535 65535 65535 65535 0 0 65535 0 0 0 0 0 0 0 0 0
+0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 65535 65535 0
+65535 65535 0 0 0 65535 0 0 65535 0 0 0 0 0 0 0 0 0
+0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 65535 65535 0
+65535 65535 0 65535 0 0 0 0 65535 0 0 0 0 0 0 0 0 0
+0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 65535 65535
+65535 65535 65535 65535 65535 65535 0 0 65535 0 0 65535 0 0 0 0 0 0
+0 0 0
+0 0 0 0 0 0 0 0 0 0 0 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 0 0 65535 0 0 65535 0 0 0 0 0 0
+0 0 0
+0 0 0 0 0 0 0 0 0 0 0 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 0 0 65535 0 0 65535 0 0 0
+0 0 0
+0 0 0 0 0 0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 0 0 65535 0 0 65535 0 0 0
+0 0 0
+0 0 0 0 0 0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 0 0 65535 0 0 65535 0 0 65535
+0 0 0
+0 0 0 0 0 0 65535 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 0 0 65535 0 0 65535 0 0 0
+0 0 0
+0 0 0 65535 65535 0 65535 65535 0 65535 0 0 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 0 0 0 0 65535 65535 65535 0
+0 0 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 65535 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+65535 0 0
+65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 65535
+65535 65535 65535 65535 65535 65535 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0
+0 0 0
+0 0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
+0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0
diff --git a/contrib/ppmtoansi/demo/text.xpm b/contrib/ppmtoansi/demo/text.xpm
new file mode 100644
index 00000000..5261b962
--- /dev/null
+++ b/contrib/ppmtoansi/demo/text.xpm
@@ -0,0 +1,28 @@
+/* XPM */
+static char *noname[] = {
+/* width height ncolors chars_per_pixel */
+"13 16 5 1",
+/* colors */
+"` c #000000",
+"a c #FF0000",
+"b c #FFFFFF",
+"c c #FFFF00",
+"d c #0000FF",
+/* pixels */
+"`````ddd`````",
+"````ddddd````",
+"````dbdbd````",
+"````dccdd````",
+"````dccad````",
+"`````bbbdd```",
+"```dbbbbdd```",
+"```dbbbbbdd``",
+"``dbbbbbbdd``",
+"``dbbbbbbddd`",
+"``abbbbbbdd``",
+"`ccabbbbbadc`",
+"ccccbbbbcccca",
+"cccccbbbcccc`",
+"```aa````aa``",
+"`````````````"
+};
diff --git a/contrib/ppmtoansi/demo/x.ansi b/contrib/ppmtoansi/demo/x.ansi
new file mode 100644
index 00000000..e2844b34
--- /dev/null
+++ b/contrib/ppmtoansi/demo/x.ansi
@@ -0,0 +1 @@
+[8;1;4-$[23;1;1- [9;2;4-$[22;2;1- [10;3;4-$[21;3;1- [11;4;4-$[20;4;1- [12;5;4-$[19;5;1- [13;6;4-$[18;6;1- [14;7;2-$[17;7;2-$[14;8;1- [16;8;4-$[13;9;1- [17;9;4-$[12;10;1- [18;10;4-$[11;11;1- [19;11;4-$[10;12;1- [20;12;4-$[9;13;1- [21;13;4-$ \ No newline at end of file
diff --git a/contrib/ppmtoansi/demo/x.ppm b/contrib/ppmtoansi/demo/x.ppm
new file mode 100644
index 00000000..53e5bcfc
--- /dev/null
+++ b/contrib/ppmtoansi/demo/x.ppm
@@ -0,0 +1,51 @@
+P3
+17 16
+65535
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 65535 0 0 0 0 0
+0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 65535 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 65535 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 65535 0 0
+65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535 0 0
+65535 0 0 65535 0 0 0 0 0 0 0 0 0 0 0 65535 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0
+65535 0 0 65535 0 0 65535 0 0 0 0 0 65535 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+65535 0 0 65535 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+65535 0 0 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0
+0 0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 65535 0 0
+65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535 0 0
+65535 0 0 65535 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 65535 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0
+65535 0 0 65535 0 0 65535 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 65535 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 0 0
+0 0 0 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
diff --git a/contrib/ppmtoansi/demo/x.xpm b/contrib/ppmtoansi/demo/x.xpm
new file mode 100644
index 00000000..d0695270
--- /dev/null
+++ b/contrib/ppmtoansi/demo/x.xpm
@@ -0,0 +1,25 @@
+/* XPM */
+static char *noname[] = {
+/* width height ncolors chars_per_pixel */
+"17 16 2 1",
+/* colors */
+"` c #000000",
+"a c #FF0000",
+/* pixels */
+"`````````````````",
+"aaaa```````````a`",
+"`aaaa`````````a``",
+"``aaaa```````a```",
+"```aaaa`````a````",
+"````aaaa```a`````",
+"`````aaaa`a``````",
+"``````aa`aa``````",
+"``````a`aaaa`````",
+"`````a```aaaa````",
+"````a`````aaaa```",
+"```a```````aaaa``",
+"``a`````````aaaa`",
+"`a```````````aaaa",
+"`````````````````",
+"`````````````````"
+};
diff --git a/contrib/ppmtoansi/ppmtoansi.c b/contrib/ppmtoansi/ppmtoansi.c
new file mode 100644
index 00000000..71d95cba
--- /dev/null
+++ b/contrib/ppmtoansi/ppmtoansi.c
@@ -0,0 +1,235 @@
+#include <getopt.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+static int palette[8][3] = {
+/* black, red, green, yellow, */
+ { 0, 0, 0},{255, 0, 0},{ 0,255, 0},{255,255, 0},
+ { 0, 0,255},{255, 0,255},{ 0,255,255},{255,255,255}};
+/* blue, magenta, cyan, white */
+
+static struct trans {
+ struct trans *next;
+ int idx,r,g,b;
+} *trans = NULL;
+
+static int skipcomment(FILE *fp)
+{
+ int ch;
+
+ for (;;) {
+ ch = getc(fp);
+ if (ch != '#')
+ return(ch);
+ while (ch != '\n' && ch != EOF)
+ ch = getc(fp); }
+}
+
+static int readentry(FILE *fp,int format,int depth)
+{
+ int ch,i = 0;
+
+ if (format == '3') {
+ while ((ch = getc(fp)) == ' ' || ch == '\t' || ch == '\r' || ch == '\n');
+ if (ch < '0' || ch > '9') {
+ error:
+ fprintf(stderr,"Format error in input file\n");
+ exit(1); }
+ for (; ch >= '0' && ch <= '9'; ch = getc(fp))
+ i = 10*i + ch - '0'; }
+ else {
+ if ((i = getc(fp)) > depth || i < 0)
+ goto error; }
+ return((i*256)/(depth+1));
+}
+
+static void packpixel(char *data,int c)
+{
+ int i = 0, n = 0;
+
+ while (c--) {
+ i = (i << 3) | (*data++ & 0x7);
+ if ((n += 3) >= 8)
+ putchar((i >> (n -= 8)) & 0xFF); }
+ if (n)
+ putchar(i << (8 - n));
+ return;
+}
+
+static int dg(int i)
+{
+ int d;
+
+ for (d = 0; i; d++, i /= 10);
+ return(d);
+}
+
+static char *i2s(char *buf,int i)
+{
+/* if (!i)
+ *buf = '\000';
+ else*/
+ sprintf(buf,"%d",i);
+ return(buf);
+}
+
+static void flushdata(int x,int y,int c,char *data)
+{
+ char b1[10],b2[10],b3[10],b4[10];
+ int i,j,rle,v;
+
+ for (i = j = v = 0; i < c; ) {
+ for (rle = 0; i+rle < c && data[i] == data[i+rle]; rle++);
+ if (rle > (i != j ? (v ? 4 : 6) : 0) +
+ ((v || (i != j)) ? 4+dg(rle)+dg(data[i])
+ : 6+dg(x+i)+dg(y)+dg(rle)+dg(data[i]))) {
+ if (i != j) {
+ if (v)
+ printf("[%s-",i2s(b1,i-j));
+ else
+ printf("[%s;%s;%s-",i2s(b1,x+j),i2s(b2,y),i2s(b3,i-j));
+ packpixel(data+j,i-j); }
+ if (v++ || (i != j))
+ printf("[%s;%s+",i2s(b1,rle),i2s(b2,data[i]));
+ else
+ printf("[%s;%s;%s;%s+",i2s(b1,x+i),i2s(b2,y),
+ i2s(b3,rle),i2s(b4,data[i]));
+ j = i += rle; }
+ else
+ i++; }
+ if (j != c) {
+ if (v)
+ printf("[%s-",i2s(b1,c-j));
+ else
+ printf("[%s;%s;%s-",i2s(b1,x+j),i2s(b2,y),i2s(b3,c-j));
+ packpixel(data+j,c-j); }
+ return;
+}
+
+int main(int argc,char *argv[])
+{
+ extern int optind;
+ extern char *optarg;
+ FILE *infile = NULL;
+ int ch,i,j,dist,idx;
+ int format,width,height,depth;
+ int bg = 0,bgred = 0,bggreen = 0,bgblue = 0;
+ int xoffset = 0,yoffset = 0;
+ int w,h,r,g,b,c;
+ struct trans *tp;
+ char *buf;
+
+ while ((i = getopt(argc,argv,"b:t:x:y:")) >= 0) switch(i) {
+ case 'b':
+ bg++;
+ for (i = bgred = 0; optarg[i] >= '0' && optarg[i] <= '9';
+ bgred = 10*bgred + optarg[i++] - '0');
+ if (optarg[i++] != '/')
+ goto usage;
+ for (bggreen = 0; optarg[i] >= '0' && optarg[i] <= '9';
+ bggreen = 10*bggreen + optarg[i++] - '0');
+ if (optarg[i++] != '/')
+ goto usage;
+ for (bgblue = 0; optarg[i] >= '0' && optarg[i] <= '9';
+ bgblue = 10*bgblue + optarg[i++] - '0');
+ if (optarg[i])
+ goto usage;
+ break;
+ case 't':
+ if ((tp = malloc(sizeof(struct trans))) == NULL)
+ goto usage;
+ for (i = tp->r = 0; optarg[i] >= '0' && optarg[i] <= '9';
+ tp->r = 10*tp->r + optarg[i++] - '0');
+ if (optarg[i++] != '/')
+ goto usage;
+ for (tp->g = 0; optarg[i] >= '0' && optarg[i] <= '9';
+ tp->g = 10*tp->g + optarg[i++] - '0');
+ if (optarg[i++] != '/')
+ goto usage;
+ for (tp->b = 0; optarg[i] >= '0' && optarg[i] <= '9';
+ tp->b = 10*tp->b + optarg[i++] - '0');
+ if (optarg[i++] != ':')
+ goto usage;
+ if (optarg[i] == '-') {
+ j = -1; i++; }
+ else j = 1;
+ for (tp->idx = 0; optarg[i] >= '0' && optarg[i] <= '9';
+ tp->idx = 10*tp->idx + optarg[i++] - '0');
+ tp->idx *= j;
+ if (tp->idx < -1 || tp->idx >= 8)
+ goto usage;
+ if (optarg[i])
+ goto usage;
+ tp->next = trans;
+ trans = tp;
+ break;
+ case 'x':
+ for (i = xoffset = 0; optarg[i] >= '0' && optarg[i] <= '9';
+ xoffset = 10*xoffset + optarg[i++] - '0');
+ if (optarg[i])
+ goto usage;
+ break;
+ case 'y':
+ for (i = yoffset = 0; optarg[i] >= '0' && optarg[i] <= '9';
+ yoffset = 10*yoffset + optarg[i++] - '0');
+ if (optarg[i])
+ goto usage;
+ break;
+ default:
+ usage:
+ fprintf(stderr,"Usage: %s [-b r/g/b] [-t r/g/b:idx] "
+ "[-x offset] [-y offset] [ppmfile]\n",argv[0]);
+ exit(1); }
+ if (argc-optind == 0)
+ infile = stdin;
+ else if (argc-optind == 1)
+ infile = fopen(argv[optind],"r");
+ if (!infile)
+ goto usage;
+ if ((ch = skipcomment(infile)) != 'P' ||
+ ((format = getc(infile)) != '3' && format != '6') ||
+ ((ch = getc(infile)) != '\n' && ch != '\r' && getc(infile) != '\n'))
+ goto usage;
+ for (width = 0; (ch = skipcomment(infile)) >= '0' && ch <= '9';
+ width = 10*width + ch - '0');
+ while (ch == ' ') ch = getc(infile);
+ for (height = 0; ch >= '0' && ch <= '9'; ch = getc(infile))
+ height = 10*height + ch - '0';
+ if (ch != '\n' && ch != '\r' && getc(infile) != '\n')
+ goto usage;
+ for (depth = 0; (ch = skipcomment(infile)) >= '0' && ch <= '9';
+ depth = 10*depth + ch - '0');
+ if (ch != '\n' && ch != '\r' && getc(infile) != '\n')
+ goto usage;
+ if (!width || !height || !depth /* || depth > 255 */)
+ goto usage;
+ if ((buf = malloc(width)) == NULL)
+ goto usage;
+ for (h = 0; h < height; h++) {
+ for (w = c = 0; w < width; w++) {
+ r = readentry(infile,format,depth);
+ g = readentry(infile,format,depth);
+ b = readentry(infile,format,depth);
+ idx = 255;
+ if (bg && bgred == r &&
+ bggreen == g && bgblue == b)
+ idx = -1;
+ else for (tp = trans; tp; tp = tp->next)
+ if (tp->r == r && tp->g == g && tp->b == b) {
+ idx = tp->idx;
+ break; }
+ if (idx == 255)
+ for (idx = -1, dist = 3*255*255, i = 8; i--;)
+ if ((j = (r-palette[i][0])*(r-palette[i][0]) +
+ (g-palette[i][1])*(g-palette[i][1]) +
+ (b-palette[i][2])*(b-palette[i][2])) < dist) {
+ dist = j; idx = i; }
+ if (idx >= 0)
+ buf[c++] = idx;
+ else if (c) {
+ flushdata(w-c+xoffset,h+yoffset,c,buf);
+ c = 0; } }
+ if (c)
+ flushdata(w-c+xoffset,h+yoffset,c,buf); }
+ exit(0);
+}
diff --git a/contrib/ppmtoansi/ppmtoansi.man b/contrib/ppmtoansi/ppmtoansi.man
new file mode 100644
index 00000000..b19f9795
--- /dev/null
+++ b/contrib/ppmtoansi/ppmtoansi.man
@@ -0,0 +1,120 @@
+.TH PPMTOANSI 1 "January 12, 1997"
+.SH NAME
+ppmtoansi \- Graphics Conversion Program For Extended ANSI Escape Codes
+.SH SYNOPSIS
+.B ppmtoansi
+[
+.SM \-b
+r/g/b ] [
+.SM \-t
+r/g/b:idx] [
+.SM \-x
+<xoffset> ] [
+.SM \-y
+<yoffset> ] [
+<filename> ]
+.SH DESCRIPTION
+.I ppmtoansi
+converts input files in
+.IR ppm (5)
+format to escape sequences that are understood by
+.IR etherboot .
+This allows for displaying icons and logos on the BOOT-Prom's splash
+screen.
+.PP
+If no input file is specified, data is read from
+.IR standard
+.IR input .
+All output is send to
+.IR standard
+.IR output ,
+error messages go to
+.IR standard
+.IR error .
+.I ppmtoansi
+tries to do some compression and minimizes the output filesize.
+.SH OPTIONS
+.TP
+.B \-b
+Specifies the
+.IR red ,
+.IR green , and
+.IR blue
+intensities for the background color. This information is
+used for providing a shape mask. All values are in the range from 0 to
+255.
+.TP
+.B \-t
+Allows for explicitly providing a translation between color values and
+color indices. The indices are in the range 0 to 7 and conform to the
+standard
+.IR ANSI
+.IR colorcodes .
+.RS
+.PP
+0 black 4 blue
+.PP
+1 red 5 magenta
+.PP
+2 green 6 cyan
+.PP
+3 yellow 7 white
+.PP
+If no translations apply,
+.IR ppmtoansi
+will automatically select the color that is closest.
+.RE
+.TP
+.B \-x
+Specify an X offset relative to the current text cursor position.
+.TP
+.B \-y
+Specify an Y offset relative to the current text cursor position.
+.SH FILE FORMAT
+.IR ppmtoansi
+uses these extensions to the standard
+.B ANSI escape
+.BR codes .
+.TP
+.B <esc>[a;b;c;d+<data>
+Draw pixel data. Use one byte per pixel. Colors are encoded as shown
+above. In text mode, graphics is approximated by outputting suitable
+characters. Parameters differ depending on the number of parameters
+passed:
+.RS
+.TP
+.B cnt
+.IR cnt
+data bytes follow. They will be drawn to the right of the last
+graphics position.
+.TP
+.B rle;col
+The next
+.IR rle
+pixels have the value
+.IR col .
+They will be drawn to the right of the last graphics position. No data
+bytes follow.
+.TP
+.B x;y;cnt
+.IR cnt
+data bytes follow. They will be drawn relative to the top left corner
+of the text cursor with an offset of
+.RI ( x / y ).
+.TP
+.B x;y;rle;col
+the next
+.IR rle
+pixels have the value
+.IR col .
+They will be drawn relative to the top left corner of the text cursor
+with an offset of
+.RI ( x / y ).
+No data bytes follow.
+.RE
+.TP
+.B <esc>[a;b;c;d\-<data>
+same as above, but pack pixels into three bits. The first pixel is
+stored in the three most significant bits of the first data byte.
+.SH "SEE ALSO"
+ppm(5), mknbi-linux(8), mknbi-dos(8).