aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2020-03-04 11:09:50 +0100
committerCharles <sircharlesaze@gmail.com>2020-03-04 11:11:24 +0100
commit9bbc949c432f6a981fdac5aec4b36edd2f4dcdba (patch)
treeb5cf3c8591267d3bc1f9fca800c1a048bd5b6004
parentdab9efb7b745fe884fb72017591dce95978c19c4 (diff)
downloadfractol-9bbc949c432f6a981fdac5aec4b36edd2f4dcdba.tar.gz
fractol-9bbc949c432f6a981fdac5aec4b36edd2f4dcdba.tar.bz2
fractol-9bbc949c432f6a981fdac5aec4b36edd2f4dcdba.zip
Linux branch with minilibx_linux(https://framagit.org/ggenois/minilibx_linux)linux
-rw-r--r--Makefile6
-rw-r--r--README.md2
-rw-r--r--include/fractol.h36
-rw-r--r--minilibx/.gitignore3
-rwxr-xr-x[-rw-r--r--]minilibx/Makefile37
-rwxr-xr-xminilibx/Makefile.mk71
-rwxr-xr-xminilibx/README42
-rw-r--r--minilibx/README.md131
-rwxr-xr-xminilibx/configure95
-rw-r--r--minilibx/font.c3525
-rw-r--r--minilibx/font.xcfbin52570 -> 0 bytes
-rwxr-xr-xminilibx/man/man3/mlx.393
-rwxr-xr-xminilibx/man/man3/mlx_loop.3141
-rwxr-xr-xminilibx/man/man3/mlx_new_image.3192
-rwxr-xr-xminilibx/man/man3/mlx_new_window.379
-rwxr-xr-xminilibx/man/man3/mlx_pixel_put.381
-rwxr-xr-x[-rw-r--r--]minilibx/mlx.h38
-rwxr-xr-xminilibx/mlx.pc12
-rwxr-xr-xminilibx/mlx_clear_window.c21
-rwxr-xr-xminilibx/mlx_destroy_image.c31
-rwxr-xr-xminilibx/mlx_destroy_window.c38
-rwxr-xr-xminilibx/mlx_expose_hook.c22
-rwxr-xr-xminilibx/mlx_flush_event.c25
-rwxr-xr-xminilibx/mlx_get_color_value.c33
-rwxr-xr-xminilibx/mlx_get_data_addr.c23
-rwxr-xr-xminilibx/mlx_hook.c40
-rwxr-xr-xminilibx/mlx_init.c91
-rw-r--r--minilibx/mlx_init_loop.m192
-rwxr-xr-x[-rw-r--r--]minilibx/mlx_int.h205
-rwxr-xr-xminilibx/mlx_int_anti_resize_win.c28
-rwxr-xr-xminilibx/mlx_int_do_nothing.c16
-rwxr-xr-xminilibx/mlx_int_get_visual.c39
-rwxr-xr-xminilibx/mlx_int_param_event.c100
-rwxr-xr-xminilibx/mlx_int_set_win_event_mask.c34
-rwxr-xr-x[-rw-r--r--]minilibx/mlx_int_str_to_wordtab.c16
-rwxr-xr-xminilibx/mlx_int_wait_first_expose.c23
-rwxr-xr-xminilibx/mlx_key_hook.c22
-rwxr-xr-xminilibx/mlx_lib_xpm.c96
-rwxr-xr-xminilibx/mlx_loop.c38
-rwxr-xr-xminilibx/mlx_loop_hook.c21
-rw-r--r--minilibx/mlx_mouse.m52
-rwxr-xr-xminilibx/mlx_mouse_hook.c22
-rwxr-xr-xminilibx/mlx_new_image.c155
-rw-r--r--minilibx/mlx_new_image.m198
-rwxr-xr-xminilibx/mlx_new_window.c61
-rw-r--r--minilibx/mlx_new_window.h57
-rw-r--r--minilibx/mlx_new_window.m766
-rw-r--r--minilibx/mlx_opengl.h21
-rw-r--r--minilibx/mlx_opengl.m57
-rwxr-xr-xminilibx/mlx_pixel_put.c26
-rw-r--r--minilibx/mlx_png.c418
-rw-r--r--minilibx/mlx_png.h4
-rwxr-xr-xminilibx/mlx_put_image_to_window.c37
-rwxr-xr-x[-rw-r--r--]minilibx/mlx_rgb.c1
-rw-r--r--minilibx/mlx_shaders.c240
-rwxr-xr-xminilibx/mlx_string_put.c26
-rwxr-xr-x[-rw-r--r--]minilibx/mlx_xpm.c101
-rwxr-xr-xminilibx/mlx_xpm.c.ok310
-rwxr-xr-xminilibx/rgb2c.pl38
-rwxr-xr-xminilibx/test/Makefile.mk24
-rwxr-xr-xminilibx/test/main.c284
-rwxr-xr-xminilibx/test/new_win.c31
-rwxr-xr-xminilibx/test/open.xpm1439
-rwxr-xr-xminilibx/test/open24.xpm230
-rwxr-xr-xminilibx/test/open30.xpm1439
-rw-r--r--src/event.c12
-rw-r--r--src/fractals/burningship.c7
-rw-r--r--src/fractals/tricorn.c4
-rw-r--r--src/main.c2
69 files changed, 6045 insertions, 5755 deletions
diff --git a/Makefile b/Makefile
index 1e9eccc..1150c16 100644
--- a/Makefile
+++ b/Makefile
@@ -27,7 +27,9 @@ CCFLAGS = -I$(LIBFT_DIR)/include -I$(MINILIBX_DIR) -I$(INCLUDE_DIR) \
-Ofast -Wall -Wextra #-Werror
LDFLAGS = -L$(LIBFT_DIR) -lft \
-L$(MINILIBX_DIR) -lmlx \
- -framework OpenGL -framework AppKit -lm -lpthread
+ -lm -lpthread \
+ -lXext -lX11
+ # -framework OpenGL -framework AppKit
NAME = fractol
SRC_FILES = main.c \
@@ -56,7 +58,7 @@ prebuild:
$(NAME): $(OBJ)
$(CC) -o $@ $^ $(LDFLAGS)
-$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
+$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
$(CC) $(CCFLAGS) -c -o $@ $<
clean: libft_clean minilibx_clean
diff --git a/README.md b/README.md
index fad5007..85718bf 100644
--- a/README.md
+++ b/README.md
@@ -2,6 +2,8 @@
fractol project of school 42.
+THIS IS THE LINUX VERSION, the minilibx used is https://framagit.org/ggenois/minilibx_linux (modified).
+
## Mandelbrot
![screenshot\_mandelbrot](./screenshots/mandelbrot.png)
diff --git a/include/fractol.h b/include/fractol.h
index 99d350c..80696d3 100644
--- a/include/fractol.h
+++ b/include/fractol.h
@@ -16,6 +16,7 @@
# include <unistd.h>
# include <stdlib.h>
# include <stdbool.h>
+# include <stdint.h>
# include <fcntl.h>
# include <math.h>
# include <pthread.h>
@@ -48,26 +49,27 @@
// # define WINDOW_WIDTH_DOUBLE 640.0
// # define WINDOW_HEIGHT_DOUBLE 480.0
-# define MLXK_ESC 53
-# define MLXK_UP 126
-# define MLXK_DOWN 125
-# define MLXK_LEFT 123
-# define MLXK_RIGHT 124
-# define MLXK_H 4
-# define MLXK_J 38
-# define MLXK_K 40
-# define MLXK_L 37
-# define MLXK_D 2
-# define MLXK_F 3
-# define MLXK_S 1
-# define MLXK_E 14
-# define MLXK_R 15
-# define MLXK_C 8
-# define MLXK_PLUS 24
-# define MLXK_MINUS 27
+# define MLXK_ESC 65307
+# define MLXK_UP 65289
+# define MLXK_DOWN 65362
+# define MLXK_LEFT 65364
+# define MLXK_RIGHT 65361
+# define MLXK_H 104
+# define MLXK_J 106
+# define MLXK_K 107
+# define MLXK_L 108
+# define MLXK_D 100
+# define MLXK_F 102
+# define MLXK_S 115
+# define MLXK_E 101
+# define MLXK_R 114
+# define MLXK_C 99
+# define MLXK_PLUS 61
+# define MLXK_MINUS 45
# define MLX_MOUSE_SCROLL_UP 5
# define MLX_MOUSE_SCROLL_DOWN 4
+# define MLX_MOUSE_LEFT 1
# define MLX_LITTLE_ENDIAN 0
# define MLX_BIG_ENDIAN 1
diff --git a/minilibx/.gitignore b/minilibx/.gitignore
new file mode 100644
index 0000000..faf9101
--- /dev/null
+++ b/minilibx/.gitignore
@@ -0,0 +1,3 @@
+*.o
+*.a
+*.gen
diff --git a/minilibx/Makefile b/minilibx/Makefile
index 2e44836..ccf7387 100644..100755
--- a/minilibx/Makefile
+++ b/minilibx/Makefile
@@ -1,24 +1,25 @@
-#
-#
+##
+## Makefile for MiniLibX in /home/boulon/work/c/raytraceur/minilibx
+##
+## Made by Olivier Crouzet
+## Login <ol@epitech.net>
+##
+## Started on Tue Oct 5 15:56:43 2004 Olivier Crouzet
+## Last update Tue May 15 15:44:41 2007 Olivier Crouzet
+##
-NOM=libmlx.a
-SRC= mlx_shaders.c mlx_new_window.m mlx_init_loop.m mlx_new_image.m mlx_xpm.c mlx_int_str_to_wordtab.c
-SRC+= mlx_png.c mlx_mouse.m
-OBJ1=$(SRC:.c=.o)
-OBJ=$(OBJ1:.m=.o)
-CFLAGS+=-O2
+## Please use configure script
-# add to match string put with X11 in size and position
-CFLAGS+= -DSTRINGPUTX11
-all: $(NOM)
+all : do_configure
-$(NOM): $(OBJ)
- ar -r $(NOM) $(OBJ)
- ranlib $(NOM)
+do_configure :
+ ./configure
-clean:
- rm -f $(NOM) $(OBJ) *~
- rm -f mlx_app
+clean :
+ ./configure clean
-re: clean all
+re : clean all
+
+install:
+ $(MAKE) -f Makefile.gen $@
diff --git a/minilibx/Makefile.mk b/minilibx/Makefile.mk
new file mode 100755
index 0000000..4f919ac
--- /dev/null
+++ b/minilibx/Makefile.mk
@@ -0,0 +1,71 @@
+##
+## Makefile for MiniLibX in /home/boulon/work/c/raytraceur/minilibx
+##
+## Made by Olivier Crouzet
+## Login <ol@epitech.net>
+##
+## Started on Tue Oct 5 15:56:43 2004 Olivier Crouzet
+## Last update Tue May 15 15:41:20 2007 Olivier Crouzet
+##
+
+## Please use configure script
+
+
+INC = %%%%
+HT = %%%%
+DOCP = %%%%
+
+CC = gcc
+
+NAME = libmlx.a
+
+SRC = mlx_init.c \
+ mlx_new_window.c \
+ mlx_pixel_put.c \
+ mlx_loop.c \
+ mlx_mouse_hook.c \
+ mlx_key_hook.c \
+ mlx_expose_hook.c \
+ mlx_loop_hook.c \
+ mlx_int_anti_resize_win.c \
+ mlx_int_do_nothing.c \
+ mlx_int_wait_first_expose.c \
+ mlx_int_get_visual.c \
+ mlx_flush_event.c \
+ mlx_string_put.c \
+ mlx_new_image.c \
+ mlx_get_data_addr.c \
+ mlx_put_image_to_window.c \
+ mlx_get_color_value.c \
+ mlx_clear_window.c \
+ mlx_xpm.c \
+ mlx_int_str_to_wordtab.c \
+ mlx_destroy_window.c \
+ mlx_int_param_event.c \
+ mlx_int_set_win_event_mask.c \
+ mlx_hook.c \
+ mlx_rgb.c \
+ mlx_destroy_image.c
+
+OBJ = $(SRC:.c=.o)
+CFLAGS = -O3 -I$(INC)
+
+DESTDIR = /usr/local
+
+all: $(NAME) $(DOCP)
+
+$(NAME): $(OBJ)
+ ar -r $(NAME) $(OBJ)
+ ranlib $(NAME)
+
+do_cp:
+ cp $(NAME) libmlx_$(HT).a
+
+clean:
+ rm -f $(OBJ) $(NAME) *~ core *.core
+
+install:
+ mkdir -p $(DESTDIR)/lib && cp $(NAME) $(DESTDIR)/lib
+ mkdir -p $(DESTDIR)/lib/pkgconfig && cp mlx.pc $(DESTDIR)/lib/pkgconfig
+ mkdir -p $(DESTDIR)/include && cp mlx.h $(DESTDIR)/include
+ mkdir -p $(DESTDIR)/man/man3 && cp man/man3/*.3 $(DESTDIR)/man/man3
diff --git a/minilibx/README b/minilibx/README
new file mode 100755
index 0000000..7adcb2f
--- /dev/null
+++ b/minilibx/README
@@ -0,0 +1,42 @@
+
+This is the MinilibX, a simple X-Window (X11R6) programming API
+in C, designed for students, suitable for X-beginners.
+
+
+Contents
+
+ - source code in C to create the mlx library
+ - man pages (in man/ directory)
+ - a test program (in test/ directory) is built
+ with the library
+ - a public include file mlx.h
+ - a tiny configure script to generate an appropriate Makefile.gen
+
+
+Requirements
+
+ - MinilibX only support TrueColor visual type (8,15,16,24 or 32 bits depth)
+ - gcc
+ - X11 include files
+ - XShm extension must be present
+
+
+Compile MinilibX
+
+ - run ./configure or make
+ both will make a few tests, create Makefile.gen
+ and then automatically run make on this generated Makefile.gen .
+ libmlx.a and libmlx_$(HOSTTYPE).a are created.
+ test/mlx-test binary is also created.
+
+
+Install MinilibX
+
+ - no installation script is provided. You may want to install
+ - libmlx.a and/or libmlx_$(HOSTTYPE).a in /usr/X11/lib or /usr/local/lib
+ - mlx.h in /usr/X11/include or /usr/local/include
+ - man/man3/mlx*.1 in /usr/X11/man/man3 or /usr/local/man/man3
+ - or make DESTDIR=/usr/local install
+
+
+ Olivier CROUZET - 2014-01-06 -
diff --git a/minilibx/README.md b/minilibx/README.md
new file mode 100644
index 0000000..f75e806
--- /dev/null
+++ b/minilibx/README.md
@@ -0,0 +1,131 @@
+# minilibx_linux
+
+This is a mirror of the minilibx library.
+
+Ubuntu: You need to install Xlib.h (pd-maxlib) and XShm.h (libxtst-dev) libraries to make it work on a classic 18.04/18.10 installation.
+
+```
+# sudo apt install pd-maxlib
+# sudo apt install libxtst-dev
+
+```
+
+## Original minilibx for Linux readme
+
+## What is minilibx?
+
+Minilibx is a very basic graphical library writting in C used in
+[42](https://42.fr) (also exported in US in the Silicon Valley, see [42
+US](https://42.us.org)) and in [Epitech](http://www.epitech.eu/) for infography
+project such like *fdf* and *Raytracer*.
+
+You can find a mirror to the native version for Mac OSX
+[here](https://github.com/dannywillems/minilix-mac-osx).
+
+## Compile
+
+1. Add a variable named PKG_CONFIG_PATH containing the path to the minilibx
+directory.
+2. Compile and install with
+```
+make && sudo make install
+```
+
+## Tutorials
+
+Here some tutorials and articles (in French):
+* [Installation and basic usage](https://achedeuzot.me/2014/12/20/installer-la-minilibx/)
+* [Manual](http://thomas.tissotdupont.free.fr/MinilibX%20Manual/)
+
+## Related projects
+
+* [Binding OCaml](https://github.com/dannywillems/ocaml-minilibx)
+
+## Licence
+
+Licence BSD: Copyright Olivier Crouzet - 2014
+
+Minilibx
+======================================
+
+Ce dépot est un mirroir pour la librairie graphique *minilibx*.
+
+## Qu'est-ce que minilibx ?
+
+Minilibx est une librairie graphique très basique écrite en C utilisée à
+[42](https://42.fr) (aussi exporté aux USA dans la Silicon Valley, voir [42
+US](https://42.us.org)) et à [Epitech](http://www.epitech.eu)
+
+Vous pouvez trouver un mirroir pour la version native pour Mac OSX
+[ici](https://github.com/dannywillems/minilibx-mac-osx).
+
+## Compiler
+
+1. Ajouter une variable PKG_CONFIG_PATH contenant le chemin vers le dossier de
+ la minilibx.
+2. Compilation and installation avec
+```
+make && sudo make install
+```
+
+## Tutoriels
+
+Ici des articles et des tutoriels (en français):
+
+* [Installation et utilisation basique](https://achedeuzot.me/2014/12/20/installer-la-minilibx/)
+* [Manuel](http://thomas.tissotdupont.free.fr/MinilibX%20Manual/)
+
+## Projets connexes
+
+* [Binding OCaml](https://github.com/dannywillems/ocaml-minilibx)
+
+## License
+
+License BSD: Copyright Olivier Crouzet - 2014
+
+
+## Original README
+
+
+This is the MinilibX, a simple X-Window (X11R6) programming API
+in C, designed for students, suitable for X-beginners.
+
+
+Contents
+
+ - source code in C to create the mlx library
+ - man pages (in man/ directory)
+ - a test program (in test/ directory) is built
+ with the library
+ - a public include file mlx.h
+ - a tiny configure script to generate an appropriate Makefile.gen
+
+
+Requirements
+
+ - MinilibX only support TrueColor visual type (8,15,16,24 or 32 bits depth)
+ - gcc
+ - X11 include files
+ - XShm extension must be present
+
+
+Compile MinilibX
+
+ - run ./configure or make
+ both will make a few tests, create Makefile.gen
+ and then automatically run make on this generated Makefile.gen .
+ libmlx.a and libmlx_$(HOSTTYPE).a are created.
+ test/mlx-test binary is also created.
+
+
+Install MinilibX
+
+ - no installation script is provided. You may want to install
+ - libmlx.a and/or libmlx_$(HOSTTYPE).a in /usr/X11/lib or /usr/local/lib
+ - mlx.h in /usr/X11/include or /usr/local/include
+ - man/man3/mlx*.1 in /usr/X11/man/man3 or /usr/local/man/man3
+ - or make DESTDIR=/usr/local install
+
+## Credits
+
+ Olivier CROUZET - 2014-01-06 -
diff --git a/minilibx/configure b/minilibx/configure
new file mode 100755
index 0000000..8366568
--- /dev/null
+++ b/minilibx/configure
@@ -0,0 +1,95 @@
+#!/bin/sh
+
+
+if [ -n "$1" -a "$1" = "--help" ] ; then
+ echo "Usage : $0\n Auto-configure and make MinilibX"
+ exit
+fi
+
+
+conf_inc=NO
+
+for inc in \
+ /usr/X11/include \
+ /usr/X11R6/include \
+ /usr/X11R5/include \
+ /usr/X11R4/include \
+ \
+ /usr/include \
+ /usr/include/X11 \
+ /usr/include/X11R6 \
+ /usr/include/X11R5 \
+ /usr/include/X11R4 \
+ \
+ /usr/local/X11/include \
+ /usr/local/X11R6/include \
+ /usr/local/X11R5/include \
+ /usr/local/X11R4/include \
+ \
+ /usr/local/include/X11 \
+ /usr/local/include/X11R6 \
+ /usr/local/include/X11R5 \
+ /usr/local/include/X11R4 \
+ \
+ /usr/X386/include \
+ /usr/x386/include \
+ /usr/XFree86/include/X11 \
+ \
+ /usr/include \
+ /usr/local/include \
+ /usr/athena/include \
+ /usr/local/x11r5/include \
+ /usr/lpp/Xamples/include \
+ \
+ /usr/openwin/include \
+ /usr/openwin/share/include
+ do
+ if [ -f "$inc/X11/Xlib.h" -a -f "$inc/X11/extensions/XShm.h" ]; then
+ conf_inc=$inc
+ break
+ fi
+ done
+
+
+if [ "$conf_inc" = "NO" ]; then
+ echo "Can't find a suitable X11 include directory...."
+ exit
+else
+ echo "X11 include dir : $conf_inc"
+fi
+
+if [ -z "$HOSTTYPE" ]; then
+ conf_ht=`uname -s`
+else
+ conf_ht=$HOSTTYPE
+fi
+
+if [ -z "$conf_ht" ]; then
+ conf_docp=""
+else
+ conf_docp="do_cp"
+ echo "lib_$conf_ht generation"
+fi
+
+
+/bin/echo "INC=$conf_inc" > Makefile.gen
+/bin/echo "HT=$conf_ht" >> Makefile.gen
+/bin/echo "DOCP=$conf_docp" >> Makefile.gen
+cat Makefile.mk | grep -v %%%% >> Makefile.gen
+
+/bin/echo "INC=$conf_inc" > test/Makefile.gen
+/bin/echo "HT=$conf_ht" >> test/Makefile.gen
+/bin/echo "DOCP=$conf_docp" >> test/Makefile.gen
+cat test/Makefile.mk | grep -v %%%% >> test/Makefile.gen
+
+
+if [ -n "$1" -a "$1" = "clean" ] ; then
+ echo "Now make it clean."
+ make -f Makefile.gen clean
+ (cd test ; make -f Makefile.gen clean)
+ exit
+fi
+
+echo "Now make it."
+make -f Makefile.gen all
+#(cd test ; make -f Makefile.gen all )
diff --git a/minilibx/font.c b/minilibx/font.c
deleted file mode 100644
index 656d248..0000000
--- a/minilibx/font.c
+++ /dev/null
@@ -1,3525 +0,0 @@
-/* GIMP RGBA C-Source image dump (font.c) */
-
-static const struct {
- unsigned int width;
- unsigned int height;
- unsigned int bytes_per_pixel; /* 2:RGB16, 3:RGB, 4:RGBA */
- unsigned char pixel_data[1140 * 20 * 4 + 1];
-} font_atlas = {
- 1140, 20, 4,
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\214\377\377\377\224\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377I\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377"
- ")\377\377\377\33\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\216\377\377\377\263\377\377\377\13\0"
- "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377b\377\377\377V\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\215\377\377\377\270\377\377"
- "\377u\377\377\377\13\377\377\377\252\377\377\377\255\377\377\377\13\0\0\0"
- "\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\317\377\377\377\374\377\377"
- "\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377"
- "\377e\377\377\3775\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\234\377\377\377\267"
- "\377\377\377B\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\343\377\377"
- "\377\375\377\377\377M\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377"
- "\377\377\13\377\377\377\355\377\377\377\367\377\377\3778\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377j\377\377\377\373\377\377\377\243\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377b\377\377\377\237\377\377\377\233\377\377\377Z\0\0\0\0\0"
- "\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "b\377\377\377c\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377)\377\377\377e\377\377\377I\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377U\377\377\377"
- "c\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377b\377\377\377c\377\377\377\13\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377S\377\377\377c\377\377\3775\0\0\0\0\0\0\0\0\0"
- "\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\213\377"
- "\377\377\363\377\377\377\364\377\377\377\364\377\377\377\372\377\377\377"
- "\225\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377u\377\377"
- "\377\371\377\377\377\233\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\215\377\377\377\372"
- "\377\377\377\364\377\377\377\364\377\377\377\363\377\377\377\224\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377U\377\377\377e\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\377\377\377\13\377\377\377\351\377\377\377\376\377\377\377s\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\377\377\377\214\377\377\377\372\377"
- "\377\377\\\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377K\377\377\377\367\377\377\377"
- "\315\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\3775\377\377\377\340"
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\304\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\377\377\377\214\377\377\377\372\377\377\377\\\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\377\377\377s\377\377\377\366\377\377\377\342\377\377\377%"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377s\377\377\377\366\377\377\377\342\377\377\377%\0\0\0"
- "\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377K\377\377\377"
- "\372\377\377\377\225\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\377\377\377\306\377\377\377\374\377"
- "\377\377\370\377\377\377\370\377\377\377\304\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377E\377\377"
- "\377\317\377\377\377\357\377\377\377\373\377\377\377\225\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\320"
- "\377\377\377\374\377\377\377)\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\377\377\377\215\377\377\377\372\377\377\377\363\377"
- "\377\377\333\377\377\377m\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\1\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\13\377\377\377\364\377\377\377\366\377\377\377%\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\13\377\377"
- "\377\361\377\377\377\377\377\377\377\254\377\377\377=\377\377\377\375\377"
- "\377\377\372\377\377\377)\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\215\377\377\377\363\377\377\377%\377\377\377"
- "\224\377\377\377\363\377\377\377%\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\3772\377\377\377\336\377\377\377\375\377"
- "\377\377x\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\377\377\377\262\377\377\377\372\377\377\377\370\377\377\377\246\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\224\377\377\377=\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\377\377\377~\377\377\377\374\377\377\377\377\377\377"
- "\377\376\377\377\377\224\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377V\377\377\377\375\377\377\377"
- "\376\377\377\377l\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\325\377\377\377\377"
- "\377\377\377\271\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377\355\377\377\377\33\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377\376\377\377\377v\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377"
- "\315\377\377\377\367\377\377\377\373\377\377\377\334\377\377\377B\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377`\377\377\377\300\377\377\377\342\377\377\377Z\0\0\0\0\0\0\0\0\0\0\0"
- "\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\224\377\377"
- "\377\347\377\377\377\373\377\377\377\364\377\377\377\312\377\377\377)\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377"
- "\226\377\377\377\346\377\377\377\370\377\377\377\360\377\377\377\327\377"
- "\377\377b\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\214\377\377\377\343\377\377\377\273"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\13\377"
- "\377\377\315\377\377\377\337\377\377\377\333\377\377\377\333\377\377\377"
- "\333\377\377\377\343\377\377\377\223\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\215\377\377\377\346\377\377\377"
- "\370\377\377\377\364\377\377\377\320\377\377\377O\0\0\0\0\377\377\377\377"
- "\377\377\377\377\377\377\377\13\377\377\377\315\377\377\377\337\377\377\377"
- "\333\377\377\377\333\377\377\377\333\377\377\377\333\377\377\377\333\377"
- "\377\377\323\377\377\377\33\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0"
- "\0\377\377\3772\377\377\377\316\377\377\377\366\377\377\377\373\377\377\377"
- "\344\377\377\377\200\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\377\377\377u\377\377\377\342\377\377\377\370\377\377\377\364"
- "\377\377\377\305\377\377\377%\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377)\377\377\3775\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\371\371\377.\377\377\377V\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\377\377\377\13\377\377\377\321\377\377\377\377\377\377\377\377"
- "\377\377\377\377\377\377\377\377\377\377\377\271\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377Q\377\377\377"
- "\273\377\377\377\332\377\377\377\322\377\377\377\206\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\3778\377\377"
- "\377\367\377\377\377\376\377\377\377s\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377"
- "\377\377\377\377\377\377\377\377\374\377\377\377\360\377\377\377\253\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377"
- "\13\377\377\377\304\377\377\377\375\377\377\377\377\377\377\377\377\377\377"
- "\377\373\377\377\377\247\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\377\377\377\307\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
- "\377\374\377\377\377\324\377\377\377B\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\377\377\377K\377\377\377\374\377\377\377\377\377\377"
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\346"
- "\377\377\377\13\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\13\377"
- "\377\377\352\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
- "\377\377\377\377\377\377\377\377\376\377\377\377l\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\377\377\3775\377\377\377\333\377\377\377\377\377"
- "\377\377\377\377\377\377\377\377\377\377\361\377\377\377\202\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\377\377\377\307\377\377\377\376\377"
- "\377\377i\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\352\377\377\377\364"
- "\377\377\377%\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377"
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\373\377\377\377"
- "\377\377\377\377\377\377\377\377\303\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\377\377\377\13\377\377\377\361\377\377\377\377\377\377\377\377"
- "\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377\225\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377"
- "\377\377\377\225\0\0\0\0\0\0\0\0\377\377\377\33\377\377\377\356\377\377\377"
- "\376\377\377\377v\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\13"
- "\377\377\377\352\377\377\377\364\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\307\377"
- "\377\377\377\377\377\377\243\0\0\0\0\0\0\0\0\377\377\377u\377\377\377\375"
- "\377\377\377\321\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377"
- "\377\307\377\377\377\377\377\377\377\251\0\0\0\0\0\0\0\0\377\377\377\13\377"
- "\377\377\355\377\377\377\330\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\377\377\377\206\377\377\377\366\377\377\377\377\377\377\377"
- "\377\377\377\377\373\377\377\377\246\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377\377\377"
- "\377\377\377\377\377\377\377\377\377\377\370\377\377\377\324\377\377\377"
- "B\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\206"
- "\377\377\377\370\377\377\377\377\377\377\377\377\377\377\377\373\377\377"
- "\377\240\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377"
- "\377\224\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
- "\377\377\377\364\377\377\377\312\377\377\377\33\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\377\377\377\204\377\377\377\365\377\377\377"
- "\377\377\377\377\377\377\377\377\377\377\377\377\342\377\377\377V\0\0\0\0"
- "\377\377\377\377\377\377\377\377\377\377\377\224\377\377\377\377\377\377"
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\373\377\377\377\377"
- "\377\377\377\377\377\377\377\377\377\377\377\252\377\377\377\377\377\377"
- "\377\377\0\0\0\0\377\377\377\307\377\377\377\376\377\377\377i\0\0\0\0\0\0"
- "\0\0\377\377\377\13\377\377\377\352\377\377\377\364\377\377\377%\377\377"
- "\377\377\377\377\377\377\377\377\377}\377\377\377\376\377\377\377\332\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\262\377\377\377\377\377\377\377"
- "\216\377\377\377\377\377\377\377\377\377\377\377\345\377\377\377\372\377"
- "\377\377=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\355"
- "\377\377\377\356\377\377\377\377\377\377\377\377\377\377\377\13\377\377\377"
- "\345\377\377\377\376\377\377\377~\0\0\0\0\0\0\0\0\377\377\3778\377\377\377"
- "\367\377\377\377\360\377\377\377\33\377\377\377\377\377\377\377\377\377\377"
- "\377\206\377\377\377\377\377\377\377\332\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\266\377\377\377\377\377\377\377\234\377\377\377\377\377\377"
- "\377\377\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377\377\377\377"
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\361"
- "\377\377\377%\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\224\377\377\377\377\377\377\377\312\377\377\377\255\377\377\377"
- "\266\377\377\377u\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377"
- "\377;\377\377\377\373\377\377\377\347\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377`\377\377"
- "\377\266\377\377\377\263\377\377\377\256\377\377\377\373\377\377\377\254"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\33\377\377\377\371\377\377\377\376\377\377\377_\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377b\377\377\377\374"
- "\377\377\377\355\377\377\377\33\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377"
- "\224\377\377\377\376\377\377\377l\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377K\377"
- "\377\377\374\377\377\377\333\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\334\377\377\377\377\377\377\377\346\377\377\377\272\377\377\377"
- "\342\377\377\377\276\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\376\377\377\377"
- "l\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\215\377\377\377\377"
- "\377\377\377\377\377\377\377l\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\215\377\377\377\377\377"
- "\377\377\377\377\377\377l\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\377\377\377K\377\377\377\375\377\377\377\254\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377"
- "\377\377\247\377\377\377\343\377\377\377\340\377\377\377\377\377\377\377"
- "\333\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377`\377\377\377\262\377\377\377=\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\342\377\377\377\377\377\377\377"
- "\325\377\377\377\266\377\377\377u\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377\371\377\377"
- "\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377"
- "\377\377`\377\377\377\263\377\377\377\307\377\377\377\376\377\377\377\363"
- "\377\377\377\33\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\0\377\377\377\0\377\377\377\0\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377"
- "\377\351\377\377\377\366\377\377\377)\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\377\377\377\13\377\377\377\356\377\377\377\377"
- "\377\377\377\243\377\377\377;\377\377\377\374\377\377\377\364\377\377\377"
- "%\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\313\377\377\377\355\0\0\0\0\377\377\377\320\377\377\377\346\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\247"
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
- "\377\352\377\377\377S\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377"
- "}\377\377\377\377\377\377\377\326\377\377\377\334\377\377\377\376\377\377"
- "\377l\0\0\0\0\377\377\377}\377\377\377\377\377\377\377\323\377\377\377\377"
- "\377\377\377\377\0\0\0\0\377\377\377\13\377\377\377\354\377\377\377\364\377"
- "\377\377\226\377\377\377\373\377\377\377\337\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\33\377\377"
- "\377\362\377\377\377\376\377\377\377l\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\232\377"
- "\377\377\377\377\377\377\336\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\302\377\377\377\377\377"
- "\377\377\277\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377|\377\377\377\205\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377_\377\377\377\232\377\377\377\13\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "!\377\377\377\371\377\377\377\352\377\377\377\13\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\377\377\377\13\377\377\377\345\377\377\377\377\377"
- "\377\377\365\377\377\377\353\377\377\377\377\377\377\377\367\377\377\377"
- "2\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\313"
- "\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377l\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\314\377"
- "\377\377\377\377\377\377\376\377\377\377\335\377\377\377\371\377\377\377"
- "\377\377\377\377\352\377\377\377\33\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\377\377\377\302\377\377\377\377\377\377\377\377\377\377\377\342"
- "\377\377\377\362\377\377\377\377\377\377\377\375\377\377\377\\\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "U\377\377\377\374\377\377\377\377\377\377\377\333\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\377\377\377\13\377\377\377\361\377\377\377"
- "\377\377\377\377\373\377\377\377\377\377\377\377\377\377\377\377\377\377"
- "\377\377\251\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377"
- "\377\377\247\377\377\377\377\377\377\377\377\377\377\377\360\377\377\377"
- "\373\377\377\377\377\377\377\377\360\377\377\377\33\377\377\377\377\377\377"
- "\377\377\0\0\0\0\377\377\377\332\377\377\377\377\377\377\377\376\377\377"
- "\377\374\377\377\377\374\377\377\377\376\377\377\377\377\377\377\377\367"
- "\377\377\377%\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\25\377"
- "\377\377\356\377\377\377\377\377\377\377\351\377\377\377\350\377\377\377"
- "\376\377\377\377\376\377\377\377s\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\377\377\377|\377\377\377\376\377\377\377\377\377\377\377\345\377"
- "\377\377\356\377\377\377\377\377\377\377\355\377\377\377%\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377}\377\377\377\374\377\377\377\254\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377"
- "\377\377V\377\377\377\375\377\377\377\241\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\3778\377"
- "\377\377\372\377\377\377\343\377\377\377u\377\377\377\217\377\377\377\374"
- "\377\377\377\375\377\377\377M\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\377\377\377\233\377\377\377\376\377\377\377\377\377\377\377"
- "\354\377\377\377\375\377\377\377\377\377\377\377\257\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\232\377\377\377"
- "\377\377\377\377\377\377\377\377\277\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377"
- "\342\377\377\377\304\377\377\377\332\377\377\377\376\377\377\377\377\377"
- "\377\377\227\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377"
- "\377\377\331\377\377\377\377\377\377\377\373\377\377\377\306\377\377\377"
- "\307\377\377\377\375\377\377\377\376\377\377\377Q\377\377\377\377\377\377"
- "\377\377\0\0\0\0\377\377\377\313\377\377\377\377\377\377\377\330\377\377"
- "\377\310\377\377\377\370\377\377\377\377\377\377\377\375\377\377\377f\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377K\377\377\377\374"
- "\377\377\377\376\377\377\377\323\377\377\377\327\377\377\377\327\377\377"
- "\377\327\377\377\377\316\377\377\377\33\377\377\377\377\377\377\377\377\0"
- "\0\0\0\377\377\377\13\377\377\377\356\377\377\377\376\377\377\377\324\377"
- "\377\377\327\377\377\377\327\377\377\377\327\377\377\377\312\377\377\377"
- "%\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\33\377\377\377\362"
- "\377\377\377\377\377\377\377\365\377\377\377\277\377\377\377\321\377\377"
- "\377\377\377\377\377\366\377\377\377\33\377\377\377\377\377\377\377\377\0"
- "\0\0\0\377\377\377\313\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\377\377"
- "\377\13\377\377\377\356\377\377\377\366\377\377\377%\377\377\377\377\377"
- "\377\377\377\0\0\0\0\377\377\377}\377\377\377\332\377\377\377\323\377\377"
- "\377\371\377\377\377\377\377\377\377\331\377\377\377\327\377\377\377\266"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\13\377\377\377"
- "\302\377\377\377\323\377\377\377\322\377\377\377\322\377\377\377\342\377"
- "\377\377\377\377\377\377\252\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\377\377\377\224\377\377\377\377\377\377\377\252\0\0\0\0\0\0\0\0\377"
- "\377\377\335\377\377\377\377\377\377\377\315\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\377\377\377\13\377\377\377\356\377\377\377\366\377\377"
- "\377%\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\377\377\377\313\377\377\377\377\377\377\377\336\0\0\0\0\0\0"
- "\0\0\377\377\377\275\377\377\377\377\377\377\377\330\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\377\377\377\312\377\377\377\377\377\377\377"
- "\364\377\377\377%\0\0\0\0\377\377\377\13\377\377\377\361\377\377\377\333"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377j\377\377\377"
- "\375\377\377\377\377\377\377\377\325\377\377\377\313\377\377\377\376\377"
- "\377\377\377\377\377\377\225\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\377\377\377\224\377\377\377\377\377\377\377\342\377\377\377\310\377"
- "\377\377\322\377\377\377\366\377\377\377\377\377\377\377\355\377\377\377"
- "\33\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377j\377\377\377\375"
- "\377\377\377\377\377\377\377\321\377\377\377\307\377\377\377\376\377\377"
- "\377\377\377\377\377\216\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\377\377\377\224\377\377\377\377\377\377\377\342\377\377\377\310\377\377"
- "\377\322\377\377\377\371\377\377\377\377\377\377\377\336\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\377\377\377K\377\377\377\374\377\377\377"
- "\377\377\377\377\330\377\377\377\271\377\377\377\351\377\377\377\377\377"
- "\377\377\334\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377}\377\377"
- "\377\332\377\377\377\327\377\377\377\323\377\377\377\371\377\377\377\377"
- "\377\377\377\331\377\377\377\326\377\377\377\332\377\377\377p\377\377\377"
- "\377\377\377\377\377\0\0\0\0\377\377\377\313\377\377\377\376\377\377\377"
- "i\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\356\377\377\377\366\377\377"
- "\377%\377\377\377\377\377\377\377\377\377\377\377\33\377\377\377\365\377"
- "\377\377\375\377\377\3778\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\345"
- "\377\377\377\375\377\377\377Q\377\377\377\377\377\377\377\377\377\377\377"
- "\313\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\13\377\377\377\361\377\377\377\347\377\377\377\377\377\377\377\377\0"
- "\0\0\0\377\377\377\214\377\377\377\377\377\377\377\343\0\0\0\0\0\0\0\0\377"
- "\377\377\261\377\377\377\377\377\377\377\272\0\0\0\0\377\377\377\377\377"
- "\377\377\377\377\377\377\13\377\377\377\351\377\377\377\376\377\377\377i"
- "\0\0\0\0\0\0\0\0\377\377\377\33\377\377\377\366\377\377\377\372\377\377\377"
- "8\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377v\377\377\377\327\377"
- "\377\377\322\377\377\377\322\377\377\377\316\377\377\377\351\377\377\377"
- "\377\377\377\377\360\377\377\377\33\377\377\377\377\377\377\377\377\0\0\0"
- "\0\0\0\0\0\0\0\0\0\377\377\377\224\377\377\377\376\377\377\377U\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377"
- "\377\377\320\377\377\377\376\377\377\377_\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\13\377\377\377\364\377\377\377\254\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\224\377"
- "\377\377\377\377\377\377\377\377\377\377\272\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\233\377\377\377\371\377\377\377"
- "i\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\376\377\377"
- "\377i\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377K\377\377\377\374\377\377\377\333"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377I\377\377\377\373\377\377\377"
- "\356\377\377\377\33\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377"
- "\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "S\377\377\377\314\377\377\377\271\377\377\377\13\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377S\377"
- "\377\377\314\377\377\377\271\377\377\377\13\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\377\377\377K\377\377\377\375\377\377\377\252\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\360\377\377\377\334\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\247\377\377\377\377\377\377\377l\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\361\377\377\377\337\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\377\377\377\313\377\377\377\371\377\377\377%\0\0\0\0\0\0\0"
- "\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\377\377\377\313\377\377\377\372\377\377\377)\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377\377\377\0\377\377\377\3\0"
- "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\377\377\377\313\377\377\377\371\377\377\377%\0\0\0\0\0\0\0"
- "\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\331"
- "\377\377\377\376\377\377\377i\377\377\377K\377\377\377\374\377\377\377\366"
- "\377\377\377)\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\316\377\377\377\333\0\0\0\0\377\377\377\316\377\377\377"
- "\333\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377"
- "8\377\377\377\372\377\377\377\377\377\377\377\307\377\377\377\237\377\377"
- "\377\364\377\377\377\377\377\377\377\244\0\0\0\0\377\377\377\377\377\377"
- "\377\377\377\377\377\232\377\377\377\375\377\377\3772\377\377\377=\377\377"
- "\377\375\377\377\377\254\377\377\377!\377\377\377\371\377\377\377\367\377"
- "\377\3778\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377;\377\377\377"
- "\372\377\377\377\346\377\377\377\13\377\377\377\371\377\377\377\333\0\0\0"
- "\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0"
- "\0\377\377\377\13\377\377\377\355\377\377\377\375\377\377\377\\\0\0\0\0\0"
- "\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\13\377\377\377\355\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377!\377\377\377\372\377\377\377\375\377\377\3778\0\0\0\0\0\0\0\0\0\0\0"
- "\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\327\377\377\377\343\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\320\377\377"
- "\377\374\377\377\377)\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377\252\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\204\377"
- "\377\377\377\377\377\377\353\377\377\377\13\0\0\0\0\377\377\377\320\377\377"
- "\377\377\377\377\377\260\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\377\377\377\205\377\377\377\322\377\377\377\353\377\377\377\376"
- "\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\377\377\377\325\377\377\377\375\377\377\377M\0\0\0\0\377\377\377\33"
- "\377\377\377\356\377\377\377\376\377\377\377l\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\377\377\377\215\377\377\377\375\377\377\377Z\0\0\0\0"
- "\0\0\0\0\377\377\377\325\377\377\377\377\377\377\377\257\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\25\377\377\377"
- "\356\377\377\377\377\377\377\377\377\377\377\377\326\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\377\377\377K\377\377\377\374\377\377"
- "\377\330\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\377\377\377!\377\377\377\371\377\377\377\377\377"
- "\377\377\216\0\0\0\0\0\0\0\0\377\377\377\302\377\377\377\224\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\302\377\377\377\377\377\377\377\252\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\377\377\377V\377\377\377\375\377\377\377\333"
- "\0\0\0\0\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377\260\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\330\377\377\377\377"
- "\377\377\377\251\0\0\0\0\377\377\377\13\377\377\377\336\377\377\377\377\377"
- "\377\377\227\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\250\377\377\377\276\377\377\377\33\0\0\0\0\0\0\0"
- "\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\377\377\377\250\377\377\377\276\377\377\377\33\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\276\377\377\377\377\377\377\377\377\377\377\377\225\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\377\377\377I\377\377\377\373\377\377\377\377\377\377\377\325\377"
- "\377\377\33\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\377\377\377)\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\306\377"
- "\377\377\376\377\377\377l\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\377\377\377K\377\377\377\374\377\377\377\375\377\377\377q\0\0\0\0\377\377"
- "\377\33\377\377\377\362\377\377\377\366\377\377\377%\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\334\377\377\377\377\377"
- "\377\377\376\377\377\377\360\377\377\377\33\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377\243"
- "\0\0\0\0\0\0\0\0\377\377\377\223\377\377\377\377\377\377\377\327\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377s\377\377\377\376\377"
- "\377\377\375\377\377\377_\0\0\0\0\0\0\0\0\377\377\377z\377\377\377\257\0"
- "\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\313\377\377\377"
- "\376\377\377\377U\0\0\0\0\377\377\377\33\377\377\377\353\377\377\377\377"
- "\377\377\377\333\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377"
- "\377K\377\377\377\374\377\377\377\326\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\13\377\377"
- "\377\355\377\377\377\366\377\377\377\33\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\247\377\377\377"
- "\377\377\377\377\364\377\377\377)\0\0\0\0\0\0\0\0\377\377\377\246\377\377"
- "\377\213\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\313"
- "\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377"
- "\355\377\377\377\366\377\377\377%\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\355\377\377\377\363\377\377\377\13\0"
- "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\213\377\377\377\377\377\377\377"
- "\252\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377"
- "\377\377\377\377\377\377\252\0\0\0\0\377\377\377\270\377\377\377\377\377"
- "\377\377\355\377\377\377\33\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0"
- "\0\377\377\377\13\377\377\377\355\377\377\377\366\377\377\377%\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377"
- "\377\377\307\377\377\377\377\377\377\377\375\377\377\3778\377\377\377\13"
- "\377\377\377\352\377\377\377\377\377\377\377\327\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\377\377\377\307\377\377\377\377\377\377\377\377"
- "\377\377\377\251\0\0\0\0\377\377\377\13\377\377\377\361\377\377\377\333\0"
- "\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\313\377\377\377"
- "\377\377\377\377\315\0\0\0\0\0\0\0\0\377\377\377\253\377\377\377\377\377"
- "\377\377\346\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377"
- "\224\377\377\377\377\377\377\377\243\0\0\0\0\0\0\0\0\377\377\377\25\377\377"
- "\377\356\377\377\377\376\377\377\377l\377\377\377\377\377\377\377\377\0\0"
- "\0\0\377\377\377\313\377\377\377\377\377\377\377\310\0\0\0\0\0\0\0\0\377"
- "\377\377\253\377\377\377\377\377\377\377\342\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377\243\0\0"
- "\0\0\0\0\0\0\377\377\377!\377\377\377\371\377\377\377\367\377\377\377)\377"
- "\377\377\377\377\377\377\377\0\0\0\0\377\377\377\232\377\377\377\377\377"
- "\377\377\315\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\302\377\377\377z\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\355\377\377\377\363\377\377\377\13\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\377\377\377\313\377\377\377\376\377\377\377"
- "i\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\355\377\377\377\366\377\377"
- "\377%\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\312\377\377\377"
- "\377\377\377\377\215\0\0\0\0\0\0\0\0\377\377\377K\377\377\377\374\377\377"
- "\377\347\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\247\377\377"
- "\377\377\377\377\377\206\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377K\377"
- "\377\377\374\377\377\377\333\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\377\377\377\342\377\377\377\376\377\377\377v\377\377\377\33\377\377"
- "\377\366\377\377\377\367\377\377\377)\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\377\377\377\214\377\377\377\377\377\377\377\316\0\0\0\0\0\0"
- "\0\0\377\377\377\232\377\377\377\377\377\377\377\264\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\25\377\377\377\356\377\377\377\376\377\377\377v\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\224\377\377\377\376"
- "\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\377\377\377}\377\377\377\377\377\377\377\277\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\364\377\377\377\254\0"
- "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0"
- "\0\0\0\377\377\377\335\377\377\377\370\377\377\377\353\377\377\377\363\377"
- "\377\377%\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377)\377\377\377V\377\377\377\33\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224"
- "\377\377\377\376\377\377\377b\0\0\0\0\377\377\377S\377\377\3775\0\0\0\0\0"
- "\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\377\377\377S\377\377\377I\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377S\377"
- "\377\3775\377\377\377;\377\377\377\374\377\377\377\333\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377)\377\377"
- "\377V\377\377\377\13\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377;\377\377\377\374\377\377\377\326"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377E\377\377\377E\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377"
- "\377\376\377\377\377b\0\0\0\0\377\377\377E\377\377\377S\0\0\0\0\0\0\0\0\0"
- "\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377K\377\377"
- "\377\375\377\377\377\252\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377"
- "\377\377\361\377\377\377\333\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377)\377\377\377X\0"
- "\0\0\0\0\0\0\0\377\377\377V\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377E\377\377\377S\0\0\0"
- "\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\377\377\377E\377\377\377K\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377S\377\377\3775\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377S\377\377\3775\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377)\377\377\377U\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377E\377\377\377U\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377\376\377\377"
- "\377b\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\361"
- "\377\377\377\333\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377\371"
- "\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377\371\377\377\377"
- "%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377"
- "\377\377\0\377\377\377\6\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377\371"
- "\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\377\377\377\313\377\377\377\376\377\377\377l\377\377\377\33"
- "\377\377\377\364\377\377\377\352\377\377\377\13\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\377\377\3772\377\377\377\274\377\377\377\361\377\377"
- "\377\375\377\377\377\265\377\377\377\367\377\377\377\372\377\377\377\221"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377V\377\377\377"
- "\374\377\377\377\336\0\0\0\0\0\0\0\0\377\377\3775\377\377\377\261\377\377"
- "\377\13\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\232\377\377\377"
- "\371\377\377\377\33\377\377\377;\377\377\377\374\377\377\377\217\377\377"
- "\377\335\377\377\377\375\377\377\377\\\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\377\377\377\33\377\377\377\371\377\377\377\333\377\377\377e"
- "\377\377\377\374\377\377\377\326\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\361\377"
- "\377\377\364\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377b\377\377\377\375\377\377\377"
- "\333\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\266\377\377\377\377\377\377\377"
- "\227\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\316\377\377\377\334\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\313\377\377\377\371\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\335\377\377"
- "\377\375\377\377\377=\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\377\377\377\306\377\377\377\377\377\377\377\225\0\0\0\0\0\0\0\0\377"
- "\377\377`\377\377\377\375\377\377\377\346\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\213\377\377\377\376"
- "\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\377\377\3772\377\377\377f\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\253\377"
- "\377\377\376\377\377\377i\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\231\377\377\377\377"
- "\377\377\377\257\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\313\377\377\377\377\377\377\377\356\377\377\377\374"
- "\377\377\377\332\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\377\377\377K\377\377\377\374\377\377\377\326\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377"
- "\224\377\377\377\377\377\377\377\326\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377b\377\377\377\375\377\377\377\347\377\377\377\13"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377U\377\377\377"
- "\375\377\377\377\266\0\0\0\0\0\0\0\0\377\377\377;\377\377\377\374\377\377"
- "\377\236\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\25\377\377\377"
- "\361\377\377\377\367\377\377\377)\0\0\0\0\0\0\0\0\377\377\377j\377\377\377"
- "\376\377\377\377\322\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\214\377\377\377\377\377\377\377\377\377\377\377"
- "\260\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\214\377\377\377\377\377\377\377\377\377\377\377"
- "\260\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377G\377\377\377\350\377\377\377\377\377\377\377\367"
- "\377\377\377y\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377"
- "\377\377\207\377\377\377\307\377\377\377\304\377\377\377\304\377\377\377"
- "\304\377\377\377\304\377\377\377\304\377\377\377\243\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377S\377\377\377\351\377\377"
- "\377\377\377\377\377\365\377\377\377n\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\13\377\377\377\345\377\377\377\376\377\377\377_\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\377\377\377\273\377\377\377\377\377\377\377\234"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\232\377\377\377\376\377\377\377i\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377;\377\377\377\373"
- "\377\377\377\344\377\377\377\317\377\377\377\376\377\377\377v\0\0\0\0\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377"
- "\377\377\377\377\252\0\0\0\0\0\0\0\0\377\377\377X\377\377\377\375\377\377"
- "\377\327\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\300"
- "\377\377\377\377\377\377\377\277\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\313\377\377"
- "\377\376\377\377\377i\0\0\0\0\0\0\0\0\377\377\377K\377\377\377\374\377\377"
- "\377\375\377\377\377Q\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377"
- "K\377\377\377\374\377\377\377\332\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\13\377\377\377"
- "\355\377\377\377\366\377\377\377)\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\342\377\377\377\377"
- "\377\377\377\225\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\377\377\377\313\377\377\377\376\377\377"
- "\377b\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\355\377\377\377\366\377"
- "\377\377%\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\13\377\377\377\355\377\377\377\366\377\377\377)\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377\252\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377\377"
- "\377\377\237\377\377\377\203\377\377\377\377\377\377\377\375\377\377\377"
- "Q\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\13"
- "\377\377\377\355\377\377\377\366\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\312\377"
- "\377\377\377\377\377\377\377\377\377\377\217\377\377\377X\377\377\377\375"
- "\377\377\377\373\377\377\377\332\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\377\377\377\313\377\377\377\373\377\377\377\371\377\377\377\366"
- "\377\377\377%\377\377\377\13\377\377\377\361\377\377\377\333\0\0\0\0\377"
- "\377\377\377\377\377\377\377\377\377\377\33\377\377\377\362\377\377\377\375"
- "\377\377\377\\\0\0\0\0\0\0\0\0\377\377\377\33\377\377\377\366\377\377\377"
- "\375\377\377\377Q\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224"
- "\377\377\377\377\377\377\377\252\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\306"
- "\377\377\377\375\377\377\377\\\377\377\377\377\377\377\377\377\377\377\377"
- "\33\377\377\377\362\377\377\377\375\377\377\377Q\0\0\0\0\0\0\0\0\377\377"
- "\377!\377\377\377\371\377\377\377\375\377\377\377M\377\377\377\377\377\377"
- "\377\377\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377\252\0\0\0\0"
- "\0\0\0\0\377\377\377\25\377\377\377\370\377\377\377\364\377\377\377%\377"
- "\377\377\377\377\377\377\377\0\0\0\0\377\377\377\232\377\377\377\377\377"
- "\377\377\304\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\355"
- "\377\377\377\366\377\377\377)\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\377\377\377\313\377\377\377\376\377\377\377i\0\0\0\0"
- "\0\0\0\0\377\377\377\13\377\377\377\355\377\377\377\366\377\377\377%\377"
- "\377\377\377\377\377\377\377\0\0\0\0\377\377\377\204\377\377\377\377\377"
- "\377\377\311\0\0\0\0\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377"
- "\260\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\222\377\377\377"
- "\377\377\377\377\252\0\0\0\0\377\377\377\307\377\377\377\355\377\377\377"
- "%\377\377\377K\377\377\377\374\377\377\377\260\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\377\377\377l\377\377\377\376\377\377\377\333\377\377"
- "\377\243\377\377\377\377\377\377\377\244\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\377\377\377\13\377\377\377\345\377\377\377\375\377"
- "\377\377M\377\377\377\13\377\377\377\351\377\377\377\372\377\377\377)\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\317\377\377\377\377\377\377\377\277\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\224\377"
- "\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\25\377\377\377\362\377\377\377"
- "\363\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\364\377"
- "\377\377\254\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\377\377\377U\377\377\377\374\377\377\377\316\377\377\377\247"
- "\377\377\377\377\377\377\377\206\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\216\377\377\377\345\377\377"
- "\377\377\377\377\377\377\377\377\377\376\377\377\377\275\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\376"
- "\377\377\377\271\377\377\377\364\377\377\377\377\377\377\377\377\377\377"
- "\377\313\377\377\377\13\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0"
- "\0\0\0\377\377\377\13\377\377\377\272\377\377\377\371\377\377\377\377\377"
- "\377\377\377\377\377\377\355\377\377\377\200\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\377\377\377}\377\377\377\361\377\377\377\377"
- "\377\377\377\377\377\377\377\325\377\377\377\377\377\377\377\332\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\3775\377\377\377"
- "\327\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377\267\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\205\377"
- "\377\377\361\377\377\377\363\377\377\377\377\377\377\377\374\377\377\377"
- "\364\377\377\377\367\377\377\377\354\377\377\377%\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\377\377\377b\377\377\377\350\377\377\377\377\377"
- "\377\377\377\377\377\377\360\377\377\377\360\377\377\377\375\377\377\377"
- "\243\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377"
- "\376\377\377\377\215\377\377\377\350\377\377\377\377\377\377\377\377\377"
- "\377\377\346\377\377\3772\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\377\377\377\301\377\377\377\370\377\377\377\364\377\377\377\364\377\377"
- "\377\360\377\377\377\350\377\377\377%\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\377\377\377\301\377\377\377\370\377\377\377\364\377"
- "\377\377\364\377\377\377\360\377\377\377\350\377\377\377%\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377K\377\377\377\375\377"
- "\377\377\252\0\0\0\0\0\0\0\0\377\377\377S\377\377\377\354\377\377\377\363"
- "\377\377\377I\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\13\377\377\377\361\377\377\377\333\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\377\377\377\377\377\377\377\377\377\377\377\13\377\377\377\342\377\377"
- "\377\332\377\377\377\374\377\377\377\377\377\377\377\276\377\377\377\353"
- "\377\377\377\377\377\377\377\352\377\377\377)\377\377\377\377\377\377\377"
- "\377\0\0\0\0\377\377\377\214\377\377\377\371\377\377\377\212\377\377\377"
- "\350\377\377\377\377\377\377\377\377\377\377\377\346\377\377\3772\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377u\377\377\377"
- "\351\377\377\377\377\377\377\377\377\377\377\377\364\377\377\377\222\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\213\377"
- "\377\377\371\377\377\377\262\377\377\377\365\377\377\377\377\377\377\377"
- "\377\377\377\377\313\377\377\377\13\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\377\377\377}\377\377\377\361\377\377\377\377\377\377\377"
- "\377\377\377\377\310\377\377\377\347\377\377\377\315\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\301\377\377\377\351\377"
- "\377\377)\377\377\377\326\377\377\377\377\377\377\377\377\377\377\377\372"
- "\377\377\377M\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377"
- "\224\377\377\377\365\377\377\377\377\377\377\377\377\377\377\377\373\377"
- "\377\377\300\377\377\377=\0\0\0\0\377\377\377\377\377\377\377\377\377\377"
- "\377\13\377\377\377\332\377\377\377\360\377\377\377\373\377\377\377\377\377"
- "\377\377\376\377\377\377\364\377\377\377\367\377\377\377\354\377\377\377"
- "%\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\301\377\377\377\354"
- "\377\377\3772\0\0\0\0\0\0\0\0\377\377\377I\377\377\377\364\377\377\377\275"
- "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377I\377\377\377\364\377"
- "\377\377\330\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\267\377\377\377"
- "\367\377\377\377\\\377\377\377\377\377\377\377\377\377\377\377\335\377\377"
- "\377\360\377\377\3778\0\0\0\0\377\377\377~\377\377\377\224\0\0\0\0\377\377"
- "\377\13\377\377\377\332\377\377\377\342\377\377\377\377\377\377\377\377\0"
- "\0\0\0\377\377\377\275\377\377\377\373\377\377\377\255\0\0\0\0\0\0\0\0\377"
- "\377\377r\377\377\377\370\377\377\377\315\0\0\0\0\377\377\377\377\377\377"
- "\377\377\377\377\377I\377\377\377\364\377\377\377\330\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\254\377\377\377\367\377\377\377\\\377\377\377\377"
- "\377\377\377\377\0\0\0\0\377\377\377K\377\377\377\365\377\377\377\364\377"
- "\377\377\364\377\377\377\364\377\377\377\360\377\377\377\360\377\377\377"
- "\354\377\377\377%\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\13\377\377\377\361\377\377\377\333\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\313\377\377\377\371\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313"
- "\377\377\377\371\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\0\377\377\377\0\377\377\377\7\0\0\0\0\0\0\0\0\0"
- "\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\313\377\377\377\372\377\377\377)\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\306\377\377\377\375"
- "\377\377\3778\377\377\377\13\377\377\377\364\377\377\377\334\0\0\0\0\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377K\377\377\377\364"
- "\377\377\377\376\377\377\377\370\377\377\377\364\377\377\377\376\377\377"
- "\377\374\377\377\377\320\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\377\377\3778\377\377\377\372\377\377\377\376\377\377\377\307\377\377\377"
- "O\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377"
- "\377\223\377\377\377\377\377\377\377\234\377\377\377\243\377\377\377\376"
- "\377\377\377\217\377\377\377\373\377\377\377v\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\331\377\377\377\377\377"
- "\377\377\377\377\377\377\367\377\377\3778\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\323"
- "\377\377\377\374\377\377\377)\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\245\377\377\377\377\377"
- "\377\377\215\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377V\377\377\377\375\377\377"
- "\377\322\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\377\377\377\260\377\377\377\354\377\377\377\236\377\377\377\326\377\377"
- "\377\361\377\377\377\224\377\377\377\341\377\377\377\314\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313"
- "\377\377\377\371\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377K\377\377\377\374\377\377\377\333\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\325"
- "\377\377\377\374\377\377\3772\377\377\377\215\377\377\377\241\377\377\377"
- "\13\377\377\377\361\377\377\377\367\377\377\377)\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\224\377\377\377\376"
- "\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\307\377\377\377"
- "\376\377\377\377l\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\200\377\377\377\363\377\377\377\376"
- "\377\377\377s\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377"
- "\377\377\240\377\377\377\377\377\377\377\363\377\377\377V\377\377\377\374"
- "\377\377\377\333\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\377\377\377K\377\377\377\374\377\377\377\333\377\377\377\274\377\377\377"
- "\310\377\377\377\251\377\377\377=\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\377\377\377\314\377\377\377\376\377\377\377l\377\377\377"
- "j\377\377\377\237\377\377\377\223\377\377\377%\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\342\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\377\377\3778\377\377\377\372\377\377\377\376\377\377\377"
- "\237\0\0\0\0\377\377\377\254\377\377\377\377\377\377\377\243\0\0\0\0\377"
- "\377\377\377\377\377\377\377\377\377\377\25\377\377\377\361\377\377\377\366"
- "\377\377\377\33\0\0\0\0\0\0\0\0\377\377\377\33\377\377\377\366\377\377\377"
- "\355\377\377\377\33\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0"
- "\0\377\377\377\232\377\377\377\377\377\377\377\377\377\377\377\323\0\0\0"
- "\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0"
- "\0\377\377\377\232\377\377\377\377\377\377\377\377\377\377\377\323\0\0\0"
- "\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377"
- "\377\224\377\377\377\374\377\377\377\377\377\377\377\314\377\377\377\33\0"
- "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377"
- "\274\377\377\377\377\377\377\377\370\377\377\377\370\377\377\377\370\377"
- "\377\377\370\377\377\377\373\377\377\377\321\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\264\377\377\377"
- "\377\377\377\377\377\377\377\377\262\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\337"
- "\377\377\377\377\377\377\377\271\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\377\377\377\25\377\377\377\361\377\377\377\352\0\0\0\0\0\0\0\0\0"
- "\0\0\0\377\377\377U\377\377\377\237\377\377\377\376\377\377\377l\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\232\377\377\377\377"
- "\377\377\377\266\377\377\377\213\377\377\377\377\377\377\377\304\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377"
- "\377\377\377\377\377\265\377\377\377E\377\377\377y\377\377\377\337\377\377"
- "\377\377\377\377\377\227\0\0\0\0\377\377\377\377\377\377\377\377\377\377"
- "\377\13\377\377\377\352\377\377\377\375\377\377\377Q\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377"
- "\377\377\313\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\324\377\377\377\376\377\377\377l\377\377\377\377\377\377\377\377\0\0"
- "\0\0\377\377\377K\377\377\377\374\377\377\377\337\377\377\377Z\377\377\377"
- "p\377\377\377p\377\377\377f\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\377\377\377\13\377\377\377\355\377\377\377\366\377\377\377)\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377"
- "\377\3775\377\377\377\371\377\377\377\367\377\377\377)\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377"
- "\377\377\313\377\377\377\376\377\377\377\224\377\377\377m\377\377\377v\377"
- "\377\377h\377\377\377\362\377\377\377\366\377\377\377%\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\355\377\377"
- "\377\366\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\224\377"
- "\377\377\377\377\377\377\252\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\377\377\377\224\377\377\377\377\377\377\377\300\377\377\377\372\377"
- "\377\377\377\377\377\377\236\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\377\377\377\13\377\377\377\355\377\377\377\366\377\377"
- "\377%\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\377\377\377\313\377\377\377\370\377\377\377\366\377\377\377"
- "\317\377\377\377\243\377\377\377\376\377\377\377\372\377\377\377\333\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\313\377\377\377"
- "\367\377\377\377\304\377\377\377\377\377\377\377\251\377\377\377\13\377\377"
- "\377\361\377\377\377\333\0\0\0\0\377\377\377\377\377\377\377\377\377\377"
- "\377U\377\377\377\374\377\377\377\343\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\314\377\377\377\376\377\377\377i\377\377\377\377\377\377\377\377"
- "\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377\243\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\335\377\377\377\376\377\377\377l\377\377\377\377\377"
- "\377\377\377\377\377\377U\377\377\377\374\377\377\377\336\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\317\377\377\377\376\377\377\377l\377\377\377"
- "\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377"
- "\243\0\0\0\0\0\0\0\0\377\377\377`\377\377\377\373\377\377\377\366\377\377"
- "\377%\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377`\377\377\377\374"
- "\377\377\377\377\377\377\377\336\377\377\377\205\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\13\377\377\377\355\377\377\377\366\377\377\377%\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\313\377\377\377"
- "\376\377\377\377i\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\355\377\377"
- "\377\366\377\377\377%\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377"
- "\33\377\377\377\371\377\377\377\360\377\377\377\33\0\0\0\0\377\377\377\320"
- "\377\377\377\376\377\377\377_\0\0\0\0\377\377\377\377\377\377\377\377\377"
- "\377\377U\377\377\377\375\377\377\377\277\377\377\377\33\377\377\377\366"
- "\377\377\377\376\377\377\377m\377\377\377\213\377\377\377\377\377\377\377"
- "\243\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\324\377\377\377\377\377\377\377\377\377\377\377\355\377\377\377\33\0\0\0"
- "\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\204"
- "\377\377\377\377\377\377\377\304\377\377\377\204\377\377\377\377\377\377"
- "\377\260\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\214\377\377\377\377\377\377\377\355\377\377"
- "\377\33\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0"
- "\0\0\0\377\377\377\224\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\266\377\377\377\377\377\377\377\206\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\13\377\377\377\364\377\377\377\254\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\266\377\377\377\377\377"
- "\377\377\207\377\377\377K\377\377\377\374\377\377\377\327\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377}\377\377\377"
- "\377\377\377\377\373\377\377\377\313\377\377\377\303\377\377\377\374\377"
- "\377\377\377\377\377\377\252\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\377\377\377\224\377\377\377\377\377\377\377\377\377\377\377\351\377"
- "\377\377\300\377\377\377\365\377\377\377\377\377\377\377\316\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\377\377\377\13\377\377\377\346\377\377"
- "\377\377\377\377\377\365\377\377\377\305\377\377\377\315\377\377\377\376"
- "\377\377\377\366\377\377\377\33\377\377\377\377\377\377\377\377\0\0\0\0\377"
- "\377\377}\377\377\377\376\377\377\377\377\377\377\377\325\377\377\377\321"
- "\377\377\377\376\377\377\377\377\377\377\377\332\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\377\377\3778\377\377\377\371\377\377\377\377\377"
- "\377\377\335\377\377\377\263\377\377\377\351\377\377\377\377\377\377\377"
- "\304\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377S\377\377"
- "\377\330\377\377\377\343\377\377\377\377\377\377\377\364\377\377\377\327"
- "\377\377\377\333\377\377\377\322\377\377\377\33\377\377\377\377\377\377\377"
- "\377\0\0\0\0\377\377\3778\377\377\377\372\377\377\377\376\377\377\377\275"
- "\377\377\377\307\377\377\377\376\377\377\377\377\377\377\377\324\377\377"
- "\377y\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377"
- "\377\377\377\377\377\377\377\377\370\377\377\377\306\377\377\377\356\377"
- "\377\377\377\377\377\377\322\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\377\377\377\224\377\377\377\336\377\377\377\333\377\377\377\327\377"
- "\377\377\377\377\377\377\366\377\377\377)\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\336\377\377\377\333"
- "\377\377\377\327\377\377\377\377\377\377\377\366\377\377\377)\0\0\0\0\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377K\377\377\377\375"
- "\377\377\377\252\0\0\0\0\377\377\377`\377\377\377\373\377\377\377\377\377"
- "\377\377\242\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\13\377\377\377\361\377\377\377\333\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\13\377\377\377\355"
- "\377\377\377\377\377\377\377\346\377\377\377\362\377\377\377\377\377\377"
- "\377\362\377\377\377\347\377\377\377\377\377\377\377\215\377\377\377\377"
- "\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377\377"
- "\377\377\377\370\377\377\377\306\377\377\377\356\377\377\377\377\377\377"
- "\377\322\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377u\377"
- "\377\377\376\377\377\377\377\377\377\377\321\377\377\377\307\377\377\377"
- "\375\377\377\377\377\377\377\377\243\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377\377\377\377\377"
- "\352\377\377\377\300\377\377\377\365\377\377\377\377\377\377\377\316\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377}\377\377\377\376"
- "\377\377\377\377\377\377\377\325\377\377\377\321\377\377\377\376\377\377"
- "\377\377\377\377\377\332\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\377\377\377\313\377\377\377\376\377\377\377\366\377\377\377\377"
- "\377\377\377\335\377\377\377\322\377\377\377\343\377\377\377%\377\377\377"
- "\377\377\377\377\377\0\0\0\0\377\377\377u\377\377\377\377\377\377\377\370"
- "\377\377\377\277\377\377\377\262\377\377\377\346\377\377\377\377\377\377"
- "\377\231\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\13\377\377\377"
- "\315\377\377\377\330\377\377\377\370\377\377\377\377\377\377\377\335\377"
- "\377\377\327\377\377\377\333\377\377\377\322\377\377\377\33\377\377\377\377"
- "\377\377\377\377\0\0\0\0\377\377\377\313\377\377\377\376\377\377\377l\0\0"
- "\0\0\0\0\0\0\377\377\377K\377\377\377\374\377\377\377\333\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\377\377\377\341\377\377\377\376\377\377"
- "\377v\0\0\0\0\0\0\0\0\377\377\377!\377\377\377\371\377\377\377\366\377\377"
- "\377)\377\377\377\377\377\377\377\377\377\377\377\313\377\377\377\377\377"
- "\377\377\205\377\377\377\13\377\377\377\364\377\377\377\376\377\377\377Q"
- "\377\377\377!\377\377\377\371\377\377\377\352\377\377\377\377\377\377\377"
- "\377\0\0\0\0\377\377\377I\377\377\377\372\377\377\377\376\377\377\377v\377"
- "\377\377\33\377\377\377\362\377\377\377\376\377\377\377}\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\377\377\377\335\377\377\377\376\377\377"
- "\377v\0\0\0\0\0\0\0\0\377\377\377\33\377\377\377\364\377\377\377\372\377"
- "\377\3772\377\377\377\377\377\377\377\377\0\0\0\0\377\377\3775\377\377\377"
- "\323\377\377\377\333\377\377\377\333\377\377\377\327\377\377\377\377\377"
- "\377\377\377\377\377\377\326\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\320\377\377\377\355\377\377\377"
- "\13\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377\371\377\377\377%\0\0\0\0\0"
- "\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\377\377\377\313\377\377\377\371\377\377\377\33\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377}\377\377"
- "\377\313\377\377\377\257\377\377\377\13\0\0\0\0\377\377\377\223\377\377\377"
- "\252\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\316"
- "\377\377\377\352\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\377\377\377z\377\377\377\325\377\377\377\33\377"
- "\377\377\13\377\377\377\314\377\377\377\267\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377!\377\377\377\373\377\377\377"
- "\211\377\377\377!\377\377\377\374\377\377\377\200\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\205\377\377\377\370"
- "\377\377\377\377\377\377\377\377\377\377\377\345\377\377\377\200\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\13\377\377\377\333\377"
- "\377\377\377\377\377\377\377\377\377\377\321\0\0\0\0\377\377\377r\377\377"
- "\377z\377\377\377%\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377"
- "\377\25\377\377\377\337\377\377\377\377\377\377\377\375\377\377\3778\0\0"
- "\0\0\377\377\377U\377\377\377\365\377\377\377\256\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\255\377\377\377\275"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\314\377\377\377\376\377\377\377b\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\33\377\377\377\371\377\377\377\333\0\0\0\0\0\0\0"
- "\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377~\377\377\377"
- "\347\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
- "\377\377\361\377\377\377\227\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\377\377\377\312\377\377\377\377\377\377\377\377\377\377\377\377\377"
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\322\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\377\377\377\312\377\377\377\377\377\377\377\377\377\377\377\377\377"
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\322\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\261\377\377\377\377\377\377\377"
- "\215\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377"
- "\25\377\377\377\361\377\377\377\363\377\377\377E\377\377\377\375\377\377"
- "\377\377\377\377\377V\377\377\377\324\377\377\377\366\377\377\377%\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\224"
- "\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377j\377\377"
- "\377\375\377\377\377\361\377\377\377%\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377\377\377\377\377"
- "\377\377\377\377\377\377\377\377\215\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\377\377\377b\377\377\377\374\377\377\377\375\377\377"
- "\377Q\377\377\377K\377\377\377\374\377\377\377\332\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\377\377\377K\377\377\377\375\377\377\377"
- "\377\377\377\377\374\377\377\377\376\377\377\377\377\377\377\377\375\377"
- "\377\377s\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\312"
- "\377\377\377\377\377\377\377\360\377\377\377\377\377\377\377\377\377\377"
- "\377\377\377\377\377\376\377\377\377\213\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377}\377\377\377\377\377"
- "\377\377\315\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\377\377\377\215\377\377\377\377\377\377\377\377\377\377\377"
- "\377\377\377\377\377\377\377\377\333\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\377\377\377\321\377\377\377\377\377\377\377\315\377"
- "\377\377q\377\377\377\221\377\377\377\363\377\377\377\377\377\377\377\364"
- "\377\377\377)\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377G\377\377\377\330\377\377\377\343\377\377\377c\0\0\0\0\0\0\0\0\0"
- "\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "G\377\377\377\330\377\377\377\343\377\377\377c\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\377\377\377V\377\377\377\375\377\377"
- "\377\376\377\377\377\214\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377U\377\377\377\374\377\377\377"
- "\377\377\377\377m\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\330\377\377\377\377\377\377\377\271\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377U\377\377\377"
- "\375\377\377\377\252\0\0\0\0\377\377\377\233\377\377\377\366\377\377\377"
- "\377\377\377\377\377\377\377\377\376\377\377\377i\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\377\377\377\334\377\377\377\376\377\377\377U\377"
- "\377\377!\377\377\377\371\377\377\377\363\377\377\377%\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377"
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\371\377"
- "\377\377)\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\13\377\377"
- "\377\355\377\377\377\366\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\313\377"
- "\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377"
- "\377\376\377\377\377i\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377"
- "K\377\377\377\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
- "\377\377\377\377\377\375\377\377\377)\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\377\377\377\13\377\377\377\355\377\377\377\377\377\377\377\377"
- "\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377l\0\0\0\0\377"
- "\377\377\377\377\377\377\377\377\377\377K\377\377\377\374\377\377\377\333"
- "\0\0\0\0\0\0\0\0\377\377\377\247\377\377\377\327\377\377\377\322\377\377"
- "\377\300\377\377\377\13\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377"
- "\312\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
- "\377\377\377\377\377\377\377\377\377\377\364\377\377\377%\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\355\377"
- "\377\377\366\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\224"
- "\377\377\377\377\377\377\377\252\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377\377\377\377\377\377"
- "\377\377\377\377\377\377\377\332\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\377\377\377\13\377\377\377\355\377\377\377\366\377"
- "\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\377\377\377\313\377\377\377\363\377\377\377\301\377\377"
- "\377\373\377\377\377\356\377\377\377\333\377\377\377\352\377\377\377\333"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\313\377\377"
- "\377\376\377\377\377w\377\377\377\371\377\377\377\366\377\377\377!\377\377"
- "\377\360\377\377\377\333\0\0\0\0\377\377\377\377\377\377\377\377\377\377"
- "\377K\377\377\377\374\377\377\377\327\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\312\377\377\377\377\377\377\377\251\377\377\377\377\377\377\377"
- "\377\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377\326\377\377\377"
- "\247\377\377\377\262\377\377\377\351\377\377\377\377\377\377\377\355\377"
- "\377\377\33\377\377\377\377\377\377\377\377\377\377\377K\377\377\377\374"
- "\377\377\377\343\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377"
- "\377\376\377\377\377i\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377"
- "\224\377\377\377\377\377\377\377\356\377\377\377\340\377\377\377\343\377"
- "\377\377\376\377\377\377\377\377\377\377\304\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\377\377\377}\377\377\377\365\377\377\377\377"
- "\377\377\377\377\377\377\377\364\377\377\377\247\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377"
- "\355\377\377\377\366\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\377\377\377\313\377\377\377\376\377\377\377i\0\0"
- "\0\0\0\0\0\0\377\377\377\13\377\377\377\355\377\377\377\366\377\377\377%"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\321\377\377"
- "\377\376\377\377\377i\377\377\377\33\377\377\377\365\377\377\377\355\377"
- "\377\377\13\0\0\0\0\377\377\377\377\377\377\377\377\377\377\3778\377\377"
- "\377\372\377\377\377\327\377\377\377c\377\377\377\377\377\377\377\377\377"
- "\377\377\271\377\377\377\205\377\377\377\376\377\377\377i\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377l\377\377\377\377\377"
- "\377\377\377\377\377\377\226\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\344\377\377\377\376\377"
- "\377\377\372\377\377\377\367\377\377\377)\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377!\377\377\377\371\377"
- "\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\224\377\377\377\376\377\377"
- "\377i\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377V\377\377\377\375\377\377\377\326\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\364\377\377\377\254\0\0\0\0\0"
- "\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\33\377"
- "\377\377\364\377\377\377\363\377\377\377%\0\0\0\0\377\377\377\335\377\377"
- "\377\375\377\377\377M\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\377\377\377\177\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\205\377"
- "\377\377\376\377\377\377\333\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\377\377\377\224\377\377\377\377\377\377\377\257\0\0\0\0\0\0\0\0\377"
- "\377\377;\377\377\377\373\377\377\377\372\377\377\3778\377\377\377\377\377"
- "\377\377\377\0\0\0\0\377\377\377\247\377\377\377\377\377\377\377\345\377"
- "\377\377\33\0\0\0\0\0\0\0\0\377\377\377O\377\377\377X\0\0\0\0\377\377\377"
- "\377\377\377\377\377\377\377\377\13\377\377\377\351\377\377\377\377\377\377"
- "\377\252\0\0\0\0\0\0\0\0\377\377\377b\377\377\377\375\377\377\377\332\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\306\377\377\377"
- "\377\377\377\377\252\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\344\377\377\377"
- "\372\377\377\377)\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377%\377\377\377\374\377\377\377\326\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\232\377\377\377"
- "\377\377\377\377\264\0\0\0\0\0\0\0\0\377\377\377\335\377\377\377\376\377"
- "\377\377Q\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224"
- "\377\377\377\377\377\377\377\325\377\377\377\13\0\0\0\0\377\377\377;\377"
- "\377\377\373\377\377\377\363\377\377\377%\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\354\377\377\377\366"
- "\377\377\377%\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\354\377\377\377\366\377\377\377"
- "%\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377K\377"
- "\377\377\375\377\377\377\237\377\377\377j\377\377\377\374\377\377\377\376"
- "\377\377\377\214\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\361\377\377\377\333\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\13\377"
- "\377\377\361\377\377\377\352\0\0\0\0\377\377\377\306\377\377\377\375\377"
- "\377\377=\377\377\377\211\377\377\377\377\377\377\377\252\377\377\377\377"
- "\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377\325"
- "\377\377\377\13\0\0\0\0\377\377\377;\377\377\377\373\377\377\377\363\377"
- "\377\377%\377\377\377\377\377\377\377\377\377\377\377\13\377\377\377\351"
- "\377\377\377\377\377\377\377\243\0\0\0\0\0\0\0\0\377\377\377r\377\377\377"
- "\375\377\377\377\363\377\377\377%\377\377\377\377\377\377\377\377\0\0\0\0"
- "\377\377\377\224\377\377\377\377\377\377\377\257\0\0\0\0\0\0\0\0\377\377"
- "\377;\377\377\377\373\377\377\377\372\377\377\3778\377\377\377\377\377\377"
- "\377\377\377\377\377\13\377\377\377\351\377\377\377\377\377\377\377\252\0"
- "\0\0\0\0\0\0\0\377\377\377b\377\377\377\375\377\377\377\332\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\312\377\377\377\377"
- "\377\377\377\372\377\377\377f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377"
- "\333\377\377\377\13\0\0\0\0\0\0\0\0\377\377\377S\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\306\377\377"
- "\377\376\377\377\377U\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\377\377\377\313\377\377\377\376\377\377\377i\0\0\0\0"
- "\0\0\0\0\377\377\377K\377\377\377\374\377\377\377\333\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\377\377\377\204\377\377\377\377\377\377\377"
- "\322\0\0\0\0\0\0\0\0\377\377\377\241\377\377\377\377\377\377\377\264\0\0"
- "\0\0\377\377\377\377\377\377\377\377\377\377\377\224\377\377\377\377\377"
- "\377\377\266\377\377\377;\377\377\377\374\377\377\377\377\377\377\377\226"
- "\377\377\377l\377\377\377\377\377\377\377\300\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\377\377\377u\377\377\377\376\377\377\377\361\377\377"
- "\377\325\377\377\377\377\377\377\377\252\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\377\377\377s\377\377\377\377\377\377\377\333\0\0"
- "\0\0\0\0\0\0\377\377\377\215\377\377\377\377\377\377\377\277\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\314\377\377\377\377\377\377\377\333\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377E\377\377\377\217\377\377"
- "\377\373\377\377\377\343\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377"
- "\377\371\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377\376\377"
- "\377\377\247\377\377\377I\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\377\377\377\214\377\377\377\377\377\377\377\377\377\377\377\377"
- "\377\377\377\364\377\377\377\245\377\377\377\372\377\377\377\355\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\324\377\377\377"
- "\343\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\205\377\377\377"
- "\271\377\377\377\376\377\377\377\303\377\377\377\262\377\377\377\377\377"
- "\377\377\315\377\377\377l\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\220\377\377\377\341\377\377\377\377"
- "\377\377\377\377\377\377\377\233\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\257\377\377\377)\377\377\377"
- "\313\377\377\377\377\377\377\377\377\377\377\377\375\377\377\377\\\377\377"
- "\377\377\377\377\377\377\377\377\377\13\377\377\377\342\377\377\377\377\377"
- "\377\377\373\377\377\377\377\377\377\377\265\0\0\0\0\377\377\377\266\377"
- "\377\377\377\377\377\377\215\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377"
- "\377\377\371\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377"
- "\360\377\377\377\333\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\261\377\377\377\377\377\377\377"
- "\377\377\377\377\332\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\377\377\377`\377\377\377\262\377\377\377\251\377\377\377\354"
- "\377\377\377\373\377\377\377\261\377\377\377\262\377\377\377\224\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\377\377\377v\377\377\377\263\377\377\377\255\377\377\377\255\377"
- "\377\377\255\377\377\377\255\377\377\377\263\377\377\377\224\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\356\377\377\377\366\377\377"
- "\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377"
- "\13\377\377\377\356\377\377\377\363\371\371\377.\377\377\377\362\377\377"
- "\377\375\377\377\377B\377\377\377\335\377\377\377\366\377\377\377%\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\224"
- "\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377U\377\377\377\373"
- "\377\377\377\376\377\377\377s\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\205\377\377\377\271\377\377\377"
- "\332\377\377\377\377\377\377\377\373\377\377\377r\0\0\0\0\377\377\377\377"
- "\377\377\377\377\377\377\377\33\377\377\377\362\377\377\377\377\377\377\377"
- "\242\377\377\377E\377\377\377x\377\377\377\374\377\377\377\336\377\377\377"
- "K\377\377\377\13\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377"
- "\377\216\377\377\377]\0\0\0\0\0\0\0\0\377\377\377\251\377\377\377\377\377"
- "\377\377\333\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377"
- "\312\377\377\377\377\377\377\377\356\377\377\377v\0\0\0\0\377\377\377\220"
- "\377\377\377\374\377\377\377\363\377\377\377\33\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\324\377\377\377\376\377"
- "\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\377\377\377j\377\377\377\374\377\377\377\367\377\377\377\260\377\377\377"
- "\342\377\377\377\377\377\377\377\376\377\377\377\224\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\377\377\3775\377\377\377\347\377\377\377\377"
- "\377\377\377\377\377\377\377\377\377\377\377\343\377\377\377\374\377\377"
- "\377\360\377\377\377%\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377"
- "\377\377\25\377\377\377\337\377\377\377\377\377\377\377\361\377\377\377\200"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\377\377\377b\377\377\377\232\377\377\377\232\377\377\377\232\377\377\377"
- "\232\377\377\377\232\377\377\377\232\377\377\377}\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377_\377\377\377"
- "\345\377\377\377\377\377\377\377\361\377\377\3778\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377V\377\377\377\376\377"
- "\377\377\344\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\377\377\377K\377\377\377\374\377\377\377\245\377\377\377l\377\377\377"
- "\377\377\377\377\344\377\377\377v\377\377\377;\377\377\377\375\377\377\377"
- "l\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377;\377\377\377\373\377"
- "\377\377\376\377\377\377\301\377\377\377\271\377\377\377\374\377\377\377"
- "\376\377\377\377v\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377"
- "\377\224\377\377\377\377\377\377\377\304\377\377\377e\377\377\377x\377\377"
- "\377\300\377\377\377\376\377\377\377\367\377\377\377)\377\377\377\377\377"
- "\377\377\377\377\377\377\13\377\377\377\361\377\377\377\367\377\377\377)"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\377\377\377\313\377\377\377\376\377\377\377i\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\307\377\377\377\376\377\377\377i\377\377\377\377"
- "\377\377\377\377\0\0\0\0\377\377\377K\377\377\377\374\377\377\377\343\377"
- "\377\377|\377\377\377\202\377\377\377\211\377\377\377\202\377\377\377\13"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\13\377\377\377"
- "\355\377\377\377\373\377\377\377\300\377\377\377\276\377\377\377\276\377"
- "\377\377\302\377\377\377G\0\0\0\0\377\377\377\377\377\377\377\377\377\377"
- "\377U\377\377\377\374\377\377\377\352\377\377\377\13\0\0\0\0\377\377\377"
- "\307\377\377\377\374\377\377\377\377\377\377\377\372\377\377\377)\377\377"
- "\377\377\377\377\377\377\0\0\0\0\377\377\377\313\377\377\377\376\377\377"
- "\377\240\377\377\377\200\377\377\377\210\377\377\377\202\377\377\377\371"
- "\377\377\377\366\377\377\377%\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\13\377\377\377\355\377\377\377\366\377\377\377%"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\224\377\377\377\377\377\377"
- "\377\252\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224"
- "\377\377\377\377\377\377\377\377\377\377\377\311\377\377\377\343\377\377"
- "\377\377\377\377\377\225\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\377\377\377\13\377\377\377\355\377\377\377\366\377\377\377%\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\377\377\377\313\377\377\377\366\377\377\377]\377\377\377\375\377\377"
- "\377\377\377\377\377\211\377\377\377\354\377\377\377\333\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\377\377\377\313\377\377\377\376\377\377"
- "\377V\377\377\377\252\377\377\377\377\377\377\377\244\377\377\377\354\377"
- "\377\377\334\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377U\377\377"
- "\377\374\377\377\377\326\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\307"
- "\377\377\377\376\377\377\377\177\377\377\377\377\377\377\377\377\0\0\0\0"
- "\377\377\377\224\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
- "\377\377\377\377\377\374\377\377\377\324\377\377\377)\0\0\0\0\377\377\377"
- "\377\377\377\377\377\377\377\377U\377\377\377\374\377\377\377\327\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\307\377\377\377\376\377\377\377l\377"
- "\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377\377"
- "\377\377\365\377\377\377\357\377\377\377\377\377\377\377\377\377\377\377"
- "\224\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\210\377\377\377\335\377\377\377\377\377\377\377"
- "\377\377\377\377\315\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\13\377\377\377\355\377\377\377\366\377\377\377%"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377"
- "\377\313\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\377\377\377\13\377"
- "\377\377\355\377\377\377\366\377\377\377)\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\377\377\377\215\377\377\377\377\377\377\377\254\377\377"
- "\377c\377\377\377\377\377\377\377\273\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\377\377\377\13\377\377\377\361\377\377\377\340\377\377\377\277"
- "\377\377\377\367\377\377\377\351\377\377\377\352\377\377\377\300\377\377"
- "\377\375\377\377\377I\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\307\377\377\377\377\377\377\377\377\377\377\377\335\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377}\377\377\377\376\377\377\377\377\377\377\377\252\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\325\377\377\377\377\377\377\377\264\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\224\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\342\377\377\377\375\377\377\3778\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377"
- "\364\377\377\377\254\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\377\377\377I\377\377\377\340\377\377\377\240\0\0\0\0\0\0\0\0"
- "\377\377\377}\377\377\377\341\377\377\377Z\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377Q\377\377\377\306\377\377\377"
- "\366\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\332\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377"
- "\376\377\377\377b\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\320\377\377\377\376"
- "\377\377\377l\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\317\377"
- "\377\377\376\377\377\377l\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\377\377\377\13\377\377\377\356\377\377\377"
- "\372\377\377\377)\0\0\0\0\0\0\0\0\377\377\377K\377\377\377\374\377\377\377"
- "\333\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\13\377\377\377\351"
- "\377\377\377\377\377\377\377\361\377\377\377\354\377\377\377\354\377\377"
- "\377\354\377\377\377\376\377\377\377\376\377\377\377l\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377K\377\377\377\374\377\377"
- "\377\333\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\377\377\377\215\377\377\377\377\377\377\377\311\0\0\0\0\0\0\0\0"
- "\377\377\377\335\377\377\377\376\377\377\377i\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\377\377\377\224\377\377\377\376\377\377\377_\0\0\0\0"
- "\0\0\0\0\377\377\377\13\377\377\377\355\377\377\377\366\377\377\377)\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\13\377\377\377\355\377\377\377\366\377\377\377%\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377"
- "\377\377\355\377\377\377\366\377\377\377%\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\377\377\377K\377\377\377\374\377\377\377\333\377"
- "\377\377\374\377\377\377\377\377\377\377\311\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377"
- "\377\361\377\377\377\333\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\377\377\377\13\377\377\377\361\377\377\377\333\0\0\0\0\377"
- "\377\377\313\377\377\377\371\377\377\377%\377\377\377\224\377\377\377\377"
- "\377\377\377\252\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224"
- "\377\377\377\376\377\377\377_\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377"
- "\355\377\377\377\366\377\377\377)\377\377\377\377\377\377\377\377\377\377"
- "\377\13\377\377\377\356\377\377\377\372\377\377\377)\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\345\377\377\377\376\377\377\377i\377\377\377\377\377\377"
- "\377\377\0\0\0\0\377\377\377\224\377\377\377\376\377\377\377b\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\321\377\377\377\376\377\377\377l\377\377\377\377"
- "\377\377\377\377\377\377\377\13\377\377\377\356\377\377\377\372\377\377\377"
- ")\0\0\0\0\0\0\0\0\377\377\377K\377\377\377\374\377\377\377\333\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377"
- "\377\377\377\377\205\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\377\377\377\13\377\377\377\333\377\377\377\377"
- "\377\377\377\377\377\377\377\354\377\377\377\300\377\377\377\\\0\0\0\0\0"
- "\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\313\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\377\377\377\313\377\377\377\376\377\377"
- "\377i\0\0\0\0\0\0\0\0\377\377\377K\377\377\377\374\377\377\377\333\0\0\0"
- "\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\13\377\377\377\355"
- "\377\377\377\375\377\377\377M\377\377\377\13\377\377\377\355\377\377\377"
- "\375\377\377\377=\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377U\377"
- "\377\377\374\377\377\377\333\377\377\377\217\377\377\377\373\377\377\377"
- "\361\377\377\377\312\377\377\377\241\377\377\377\377\377\377\377\215\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\253\377"
- "\377\377\377\377\377\377\377\377\377\377\315\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\335\377\377\377"
- "\376\377\377\377i\0\0\0\0\377\377\377\342\377\377\377\375\377\377\377Q\0"
- "\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\315\377\377\377\377\377\377\377\342\377\377\377\13\0\0\0\0\0\0\0"
- "\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377V\377\377\377\375\377"
- "\377\377\377\377\377\377\377\377\377\377\252\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\313\377\377\377\371\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377c\377"
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377l\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\377\377\377\313\377\377\377\360\377\377"
- "\377\33\377\377\377\205\377\377\377\365\377\377\377\377\377\377\377\364\377"
- "\377\377\\\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\377\377\377\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "|\377\377\377\206\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\307"
- "\377\377\377\377\377\377\377\377\377\377\377\370\377\377\377\377\377\377"
- "\377\377\377\377\377\377\377\377\377\244\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\205"
- "\377\377\377\376\377\377\377\336\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\377\377\377\302\377\377\377\377\377\377\377\242\377\377"
- "\377\374\377\377\377\264\377\377\377\33\377\377\377\371\377\377\377\316\377"
- "\377\377\377\377\377\377\377\377\377\377b\377\377\377\376\377\377\377\326"
- "\377\377\377\25\377\377\377\362\377\377\377\377\377\377\377\304\377\377\377"
- "\372\377\377\377\360\377\377\377\33\377\377\377\377\377\377\377\377\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\317"
- "\377\377\377\376\377\377\377_\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377"
- "\377\361\377\377\377\334\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\377\377\377`\377\377\377\374\377\377\377\343\377"
- "\377\377\313\377\377\377\377\377\377\377\215\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\306\377"
- "\377\377\371\377\377\377\33\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377s\377\377\377\377\377\377\377\304\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\320\377"
- "\377\377\375\377\377\377=\0\0\0\0\0\0\0\0\377\377\377\25\377\377\377\362"
- "\377\377\377\366\377\377\377%\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\224\377\377\377\376\377\377\377i\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377l\377\377\377\373\377\377\377\376\377\377\377\214\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\204\377\377\377\377\377\377\377\333\0\0"
- "\0\0\377\377\377\377\377\377\377\377\377\377\377\224\377\377\377\377\377"
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
- "\377\377\377\377\377\377\377\377\377\377\377\377m\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\33\377"
- "\377\377\366\377\377\377\367\377\377\377)\377\377\377\377\377\377\377\377"
- "\0\0\0\0\377\377\377\317\377\377\377\376\377\377\377e\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\330\377\377\377\371\377\377\377)\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\33\377\377\377\365\377\377\377"
- "\363\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\377\377\377\13\377\377\377\351\377\377\377\375\377\377\377=\0\0\0\0\0\0"
- "\0\0\377\377\377}\377\377\377\374\377\377\377\366\377\377\377%\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377U\377\377\377p\377"
- "\377\377M\377\377\377!\377\377\377\373\377\377\377\333\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\234\377"
- "\377\377\374\377\377\377\377\377\377\377\320\377\377\377%\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\320\377\377\377\377"
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
- "\377\377\377\377\377\337\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\271\377\377\377\377\377\377\377\377\377\377"
- "\377\267\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\251\377\377\377V\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377K\377\377"
- "\377\374\377\377\377\245\377\377\377|\377\377\377\377\377\377\377y\0\0\0"
- "\0\377\377\377\247\377\377\377\376\377\377\377l\377\377\377\377\377\377\377"
- "\377\0\0\0\0\377\377\377\240\377\377\377\377\377\377\377\377\377\377\377"
- "\377\377\377\377\377\377\377\377\373\377\377\377\377\377\377\377\304\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377"
- "\377\377\377\377\244\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377"
- "\376\377\377\377l\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\334"
- "\377\377\377\377\377\377\377\205\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\313\377\377"
- "\377\376\377\377\377i\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\355\377"
- "\377\377\376\377\377\377i\377\377\377\377\377\377\377\377\0\0\0\0\377\377"
- "\377K\377\377\377\374\377\377\377\327\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\13\377\377"
- "\377\355\377\377\377\366\377\377\377\33\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\377\377\377\377\377\377\377\377\377\377\377\25\377\377\377\362\377"
- "\377\377\375\377\377\377=\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377"
- "\377\371\377\377\377%\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377"
- "\313\377\377\377\376\377\377\377b\0\0\0\0\0\0\0\0\377\377\377\13\377\377"
- "\377\355\377\377\377\366\377\377\377%\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\355\377\377\377\366\377\377"
- "\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\224\377\377\377\377\377"
- "\377\377\257\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377"
- "\224\377\377\377\377\377\377\377\331\0\0\0\0\377\377\377j\377\377\377\376"
- "\377\377\377\366\377\377\377)\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\377\377\377\13\377\377\377\355\377\377\377\366\377\377\377%\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\377\377\377\313\377\377\377\371\377\377\377\33\377\377\377\351\377\377\377"
- "\371\377\377\377!\377\377\377\360\377\377\377\333\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\377\377\377\313\377\377\377\376\377\377\377i\377"
- "\377\377\33\377\377\377\365\377\377\377\365\377\377\377\361\377\377\377\333"
- "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377K\377\377\377\374\377"
- "\377\377\364\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\340\377\377"
- "\377\376\377\377\377l\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377"
- "\224\377\377\377\377\377\377\377\257\0\0\0\0\377\377\377\13\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377I\377\377\377"
- "\373\377\377\377\363\377\377\377%\0\0\0\0\0\0\0\0\377\377\377\13\377\377"
- "\377\345\377\377\377\376\377\377\377i\377\377\377\377\377\377\377\377\0\0"
- "\0\0\377\377\377\224\377\377\377\377\377\377\377\243\0\0\0\0\377\377\377"
- "\330\377\377\377\377\377\377\377\257\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "l\377\377\377\373\377\377\377\375\377\377\377M\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\355\377\377\377\366"
- "\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\377\377\377\313\377\377\377\376\377\377\377b\0\0\0\0\0\0\0\0\377\377"
- "\377\13\377\377\377\361\377\377\377\355\377\377\377\33\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\377\377\377!\377\377\377\372\377\377\377\337"
- "\377\377\377\257\377\377\377\376\377\377\377l\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\377\377\377\324\377\377\377\370\377\377\377"
- "\360\377\377\377\323\377\377\377\255\377\377\377\375\377\377\377\333\377"
- "\377\377\371\377\377\377%\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\377\377\377l\377\377\377\376\377\377\377\337\377\377\377\326\377\377\377"
- "\377\377\377\377\234\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\356\377\377\377\372\377\377"
- "\377)\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\377\377\377\232\377\377\377\377\377\377\377\346\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\224\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\232\377\377\377\377\377\377\377\244\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\13\377\377\377\364\377\377\377\254\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\377\377\377\215\377\377\377\376\377\377\377\376\377\377\377\313\377"
- "\377\377\224\377\377\377\202\377\377\377\374\377\377\377\332\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\376\377"
- "\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\324\377\377\377\376\377\377"
- "\377i\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\314\377\377\377"
- "\376\377\377\377b\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\377\377\377\13\377\377\377\355\377\377\377\374\377"
- "\377\377)\0\0\0\0\0\0\0\0\377\377\377K\377\377\377\374\377\377\377\333\0"
- "\0\0\0\377\377\377\377\377\377\377\377\377\377\377\13\377\377\377\352\377"
- "\377\377\377\377\377\377\321\377\377\377\321\377\377\377\316\377\377\377"
- "\322\377\377\377\316\377\377\377\315\377\377\377G\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377K\377\377\377\374\377\377\377"
- "\333\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\377\377\377\13\377\377\377\361\377\377\377\377\377\377\377\362\377\377"
- "\377\366\377\377\377\377\377\377\377\326\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\376\377\377\377i\0\0"
- "\0\0\0\0\0\0\377\377\377\13\377\377\377\355\377\377\377\366\377\377\377%"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\13\377\377\377\355\377\377\377\366\377\377\377%\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\13\377\377\377\355\377\377\377\366\377\377\377%\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\377\377\377K\377\377\377\374\377\377\377"
- "\377\377\377\377\370\377\377\377\366\377\377\377\376\377\377\377\214\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\13\377\377\377\361\377\377\377\333\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\377\377\377\377\377\377\377\377\377\377\377\13\377\377\377\361\377\377"
- "\377\333\0\0\0\0\377\377\377\313\377\377\377\371\377\377\377%\377\377\377"
- "\223\377\377\377\377\377\377\377\252\377\377\377\377\377\377\377\377\0\0"
- "\0\0\377\377\377\224\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\377\377"
- "\377\13\377\377\377\355\377\377\377\366\377\377\377%\377\377\377\377\377"
- "\377\377\377\377\377\377\13\377\377\377\355\377\377\377\374\377\377\377)"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\317\377\377\377\376\377\377\377l\377"
- "\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\376\377"
- "\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\324\377\377\377\376\377\377"
- "\377i\377\377\377\377\377\377\377\377\377\377\377\13\377\377\377\355\377"
- "\377\377\374\377\377\377)\0\0\0\0\0\0\0\0\377\377\377K\377\377\377\374\377"
- "\377\377\333\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377"
- "\377\377\313\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377u\377\377\377\302\377\377\377\357\377\377\377\377\377\377\377\377\377"
- "\377\377\276\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\313\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\313\377\377"
- "\377\376\377\377\377i\0\0\0\0\0\0\0\0\377\377\377;\377\377\377\374\377\377"
- "\377\333\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377"
- "\377\240\377\377\377\377\377\377\377\266\377\377\377s\377\377\377\377\377"
- "\377\377\315\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377"
- "\25\377\377\377\361\377\377\377\361\377\377\377\320\377\377\377\344\377\377"
- "\377\303\377\377\377\356\377\377\377\316\377\377\377\375\377\377\377M\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\275\377"
- "\377\377\377\377\377\377\377\377\377\377\314\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377v\377\377\377\377"
- "\377\377\377\321\377\377\377M\377\377\377\375\377\377\377\327\0\0\0\0\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\307\377\377\377\377\377\377\377\346\377\377\377\33\0\0\0\0\0\0\0\0\0\0\0"
- "\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377b\377\377\377"
- "\237\377\377\377\374\377\377\377\336\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\313\377\377\377\371\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377"
- "\377\376\377\377\377\263\377\377\377f\377\377\377\13\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\371\371\377.\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377B\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0"
- "\0\0\0\0\0\377\377\377\25\377\377\377\304\377\377\377\322\377\377\377S\0"
- "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\214\377\377\377\374\377"
- "\377\377\33\377\377\377\222\377\377\377\374\377\377\377%\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\247\377\377\377\377"
- "\377\377\377\302\377\377\377\\\377\377\3772\377\377\377\264\377\377\377\377"
- "\377\377\377\326\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377"
- "\377\315\377\377\377\377\377\377\377\257\377\377\377;\377\377\377\375\377"
- "\377\377b\377\377\377\13\377\377\377\360\377\377\377\337\377\377\377\377"
- "\377\377\377\377\377\377\377\204\377\377\377\377\377\377\377\322\0\0\0\0"
- "\377\377\377\33\377\377\377\356\377\377\377\377\377\377\377\377\377\377\377"
- "\217\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\247\377\377\377\377\377"
- "\377\377\210\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377V\377\377\377\374\377\377"
- "\377\326\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\377\377\377\317\377\377\377\374\377\377\3778\377\377\377\13\377"
- "\377\377\351\377\377\377\366\377\377\377\33\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\324\377\377\377\374"
- "\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\3775\377\377\377\347\377\377\377\367\377\377"
- "\377\232\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377_\377"
- "\377\377\355\377\377\377\367\377\377\377}\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377"
- "\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\377\377\377\261\377\377\377\377\377\377\377\257\0\0"
- "\0\0\0\0\0\0\377\377\377\204\377\377\377\377\377\377\377\322\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\213\377\377\377\376\377\377\377U\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\224\377\377\377\375\377\377"
- "\377\373\377\377\377s\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\377\377\377\214\377\377\377}\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377j\377\377\377\376\377\377\377\333\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\377\377\377~\377\377\377\202\377\377\377\202\377\377"
- "\377\201\377\377\377\231\377\377\377\377\377\377\377\343\377\377\377z\377"
- "\377\377\33\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\205\377\377"
- "\377j\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377}\377\377\377\376\377\377\377\343"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\255\377\377"
- "\377\377\377\377\377\264\0\0\0\0\0\0\0\0\377\377\377\25\377\377\377\356\377"
- "\377\377\372\377\377\377)\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377K\377\377\377\374\377\377\377\327\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\13\377\377\377\356"
- "\377\377\377\375\377\377\377)\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\355\377"
- "\377\377\367\377\377\377)\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\377\377\3775\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377\377\377"
- "\377\377\257\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377_\377\377\377\355\377\377\377\367\377\377\377}\0\0\0\0\0"
- "\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\3775\377\377\377\347\377\377\377\367\377\377\377\232\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\3772\377\377\377\327\377\377\377\377\377\377\377\375\377\377\377"
- "z\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\377\377\3775\377\377\377\362\377\377\377\377\377\377\377"
- "\346\377\377\377V\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377S\377\377\377\320\377\377\377"
- "\305\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\377\377\377K\377\377\377\374\377\377\377\252\377\377\377K\377\377\377\374"
- "\377\377\377\376\377\377\377\363\377\377\377\377\377\377\377\377\377\377"
- "\377l\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\335\377\377\377"
- "\376\377\377\377l\0\0\0\0\0\0\0\0\377\377\377;\377\377\377\373\377\377\377"
- "\363\377\377\377%\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224"
- "\377\377\377\377\377\377\377\243\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377"
- "\343\377\377\377\376\377\377\377l\377\377\377\377\377\377\377\377\0\0\0\0"
- "\377\377\377\232\377\377\377\377\377\377\377\356\377\377\377)\0\0\0\0\0\0"
- "\0\0\377\377\3775\377\377\377\260\377\377\377\13\377\377\377\377\377\377"
- "\377\377\0\0\0\0\377\377\377\313\377\377\377\376\377\377\377U\0\0\0\0\0\0"
- "\0\0\377\377\377\276\377\377\377\377\377\377\377\346\377\377\377\13\377\377"
- "\377\377\377\377\377\377\0\0\0\0\377\377\377K\377\377\377\374\377\377\377"
- "\326\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\377\377\377\13\377\377\377\355\377\377\377\366\377\377"
- "\377%\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\377\377\377\312\377\377\377\377\377\377\377\321\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\313\377\377\377\371\377\377\377%\377\377\377\377"
- "\377\377\377\377\0\0\0\0\377\377\377\313\377\377\377\376\377\377\377i\0\0"
- "\0\0\0\0\0\0\377\377\377\13\377\377\377\355\377\377\377\366\377\377\377%"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\355\377\377\377\366\377\377\377\33\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\377\377\377j\377\377\377\330\377\377\377%\0"
- "\0\0\0\0\0\0\0\377\377\377\312\377\377\377\377\377\377\377\206\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377\377"
- "\377\377\244\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377\377\377\377\377"
- "\277\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\13\377\377"
- "\377\355\377\377\377\366\377\377\377\33\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\313\377\377\377"
- "\371\377\377\377%\377\377\377]\377\377\377f\377\377\377\13\377\377\377\361"
- "\377\377\377\333\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377"
- "\377\313\377\377\377\376\377\377\377i\0\0\0\0\377\377\377\232\377\377\377"
- "\377\377\377\377\377\377\377\377\327\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\377\377\377\334\377\377\377\377\377\377\377\252\0\0\0\0\0\0"
- "\0\0\377\377\377}\377\377\377\376\377\377\377\363\377\377\377%\377\377\377"
- "\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377"
- "\252\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\377\377\377\332\377\377\377\377\377\377\377\251\0\0"
- "\0\0\0\0\0\0\377\377\377\214\377\377\377\377\377\377\377\355\377\377\377"
- "\13\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377"
- "\377\377\377\252\0\0\0\0\377\377\377K\377\377\377\374\377\377\377\375\377"
- "\377\377Q\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\205"
- "\377\377\377\304\377\377\377\13\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377"
- "\362\377\377\377\375\377\377\377Q\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\355\377\377\377\366\377\377\377"
- "%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377"
- "\377\312\377\377\377\377\377\377\377\264\0\0\0\0\0\0\0\0\377\377\377}\377"
- "\377\377\376\377\377\377\332\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\330\377\377\377\376\377\377\377\372\377"
- "\377\377\360\377\377\377\33\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\377\377\377\305\377\377\377\377\377\377\377\377\377\377\377\237"
- "\377\377\377l\377\377\377\376\377\377\377\377\377\377\377\336\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\377\377\377\13\377\377\377\351\377\377"
- "\377\376\377\377\377l\377\377\377K\377\377\377\374\377\377\377\372\377\377"
- "\3772\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\13\377\377\377\355\377\377\377\366\377\377\377%\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377;\377\377\377"
- "\373\377\377\377\372\377\377\377=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\224"
- "\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377!\377\377"
- "\377\372\377\377\377\347\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\364\377"
- "\377\377\254\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\313\377"
- "\377\377\376\377\377\377b\0\0\0\0\0\0\0\0\377\377\377b\377\377\377\375\377"
- "\377\377\332\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377"
- "\224\377\377\377\377\377\377\377~\0\0\0\0\0\0\0\0\377\377\377U\377\377\377"
- "\374\377\377\377\366\377\377\377%\377\377\377\377\377\377\377\377\0\0\0\0"
- "\377\377\377\266\377\377\377\377\377\377\377\326\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\13\377\377\377e\0\0\0\0\377\377\377\377\377\377\377\377\377"
- "\377\377\13\377\377\377\355\377\377\377\376\377\377\377v\0\0\0\0\0\0\0\0"
- "\377\377\377s\377\377\377\376\377\377\377\332\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\377\377\377\317\377\377\377\377\377\377\377\251\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377K\377\377\377\374\377\377\377\333"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\377\377\377j\377\377\377\375\377\377\377\326\377\377\377\302\377\377\377"
- "\304\377\377\377\206\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\377\377\377\224\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0"
- "\377\377\377\13\377\377\377\355\377\377\377\366\377\377\377%\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377"
- "\377\355\377\377\377\366\377\377\377%\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\355"
- "\377\377\377\366\377\377\377%\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\377\377\377K\377\377\377\374\377\377\377\361\377\377\377=\377"
- "\377\377V\377\377\377\374\377\377\377\375\377\377\377M\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\361"
- "\377\377\377\355\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\377\377\377\13\377\377\377\361\377\377\377\333\0\0\0\0\377\377\377"
- "\313\377\377\377\371\377\377\377%\377\377\377\223\377\377\377\377\377\377"
- "\377\252\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377"
- "\377\376\377\377\377i\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\355\377"
- "\377\377\366\377\377\377%\377\377\377\377\377\377\377\377\377\377\377\13"
- "\377\377\377\355\377\377\377\376\377\377\377\215\0\0\0\0\0\0\0\0\377\377"
- "\377V\377\377\377\374\377\377\377\367\377\377\377)\377\377\377\377\377\377"
- "\377\377\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377~\0\0\0\0\0\0"
- "\0\0\377\377\377K\377\377\377\374\377\377\377\366\377\377\377)\377\377\377"
- "\377\377\377\377\377\377\377\377\13\377\377\377\355\377\377\377\376\377\377"
- "\377v\0\0\0\0\0\0\0\0\377\377\377s\377\377\377\375\377\377\377\332\0\0\0"
- "\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\313\377\377"
- "\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\377\377\3772\377\377\377n\0\0\0\0\0\0\0\0\0"
- "\0\0\0\377\377\377`\377\377\377\373\377\377\377\366\377\377\377)\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\317\377\377"
- "\377\376\377\377\377v\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\377\377\377\314\377\377\377\376\377\377\377b\0\0\0\0"
- "\0\0\0\0\377\377\377\254\377\377\377\377\377\377\377\332\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\33\377\377\377\366\377"
- "\377\377\361\377\377\377\331\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\320\377\377\377\377"
- "\377\377\377\377\377\377\377\273\377\377\377\205\377\377\377\377\377\377"
- "\377\376\377\377\377\355\377\377\377\33\377\377\377\377\377\377\377\377\0"
- "\0\0\0\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377\336\377\377\377"
- "\330\377\377\377\377\377\377\377\256\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\342\377\377\377\375\377"
- "\377\377\326\377\377\377\376\377\377\377~\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\275\377\377\377\377\377\377"
- "\377\345\377\377\377\13\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\323\377\377\377"
- "\360\377\377\377\33\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377\371\377\377"
- "\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377\371\377\377\377\33\0\0\0"
- "\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\0\377"
- "\377\377\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\206\377\377\377\377\377\377"
- "\377\377\377\377\377\260\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377"
- "\377\313\377\377\377\360\377\377\377\13\377\377\377\316\377\377\377\352\377"
- "\377\377\13\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377"
- "\377\205\377\377\377\365\377\377\377\377\377\377\377\377\377\377\377\377"
- "\377\377\377\377\377\377\377\356\377\377\3778\0\0\0\0\377\377\377\377\377"
- "\377\377\377\377\377\377\224\377\377\377\377\377\377\377\311\0\0\0\0\377"
- "\377\377K\377\377\377\374\377\377\377\316\377\377\377y\377\377\377\374\377"
- "\377\377\273\377\377\377\377\377\377\377\377\377\377\377!\377\377\377\371"
- "\377\377\377\377\377\377\377\315\377\377\377\242\377\377\377\360\377\377"
- "\377\377\377\377\377\377\377\377\377\370\377\377\377\237\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377`\377\377\377\375\377\377\377\327\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\266\377\377\377\377\377\377\377\217\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\371\371\377.\377\377"
- "\377M\0\0\0\0\0\0\0\0\371\371\377.\377\377\377M\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377|\377\377"
- "\377s\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\232\377\377\377\377\377\377\377\377\377"
- "\377\377\343\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\232\377\377\377\377\377\377\377\377\377\377\377\326\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377!\377\377"
- "\377\371\377\377\377\352\377\377\377\13\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\377\377\3778\377\377\377\372\377\377"
- "\377\377\377\377\377\275\377\377\377\253\377\377\377\374\377\377\377\376"
- "\377\377\377s\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377"
- "r\377\377\377\314\377\377\377\304\377\377\377\332\377\377\377\377\377\377"
- "\377\321\377\377\377\307\377\377\377\271\377\377\377\13\377\377\377\377\377"
- "\377\377\377\0\0\0\0\377\377\377\263\377\377\377\377\377\377\377\377\377"
- "\377\377\350\377\377\377\307\377\377\377\322\377\377\377\321\377\377\377"
- "\310\377\377\377\33\377\377\377\377\377\377\377\377\377\377\3778\377\377"
- "\377\373\377\377\377\377\377\377\377\325\377\377\377\242\377\377\377\275"
- "\377\377\377\371\377\377\377\377\377\377\377\272\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377K\377"
- "\377\377\374\377\377\377\333\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\377\377\3778\377\377\377\373\377\377\377\377\377\377\377\321\377\377"
- "\377\250\377\377\377\307\377\377\377\375\377\377\377\377\377\377\377\234"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\33\377\377\377"
- "\362\377\377\377\377\377\377\377\313\377\377\377\214\377\377\377\345\377"
- "\377\377\377\377\377\377\322\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377}\377\377\377\376\377\377\377\326\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377"
- "\377\302\377\377\377\377\377\377\377\346\377\377\377\226\377\377\377\201"
- "\377\377\377\320\377\377\377\377\377\377\377\347\377\377\377\13\377\377\377"
- "\377\377\377\377\377\0\0\0\0\377\377\377\266\377\377\377\377\377\377\377"
- "\307\377\377\377\250\377\377\377\335\377\377\377\377\377\377\377\356\377"
- "\377\377\33\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0"
- "\0\377\377\377\232\377\377\377\377\377\377\377\377\377\377\377\326\0\0\0"
- "\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0"
- "\0\377\377\377\232\377\377\377\377\377\377\377\377\377\377\377\343\0\0\0"
- "\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\207\377\377\377\374\377\377\377\266"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\377\377\377V\377\377\377\375\377\377\377\247\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\306\377\377\377\377\377\377\377\376\377"
- "\377\377l\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377"
- "\377\13\377\377\377\355\377\377\377\352\0\0\0\0\377\377\377s\377\377\377"
- "\314\377\377\377\315\377\377\377v\377\377\377\245\377\377\377%\377\377\377"
- "\377\377\377\377\377\377\377\377K\377\377\377\373\377\377\377\360\377\377"
- "\377\33\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\335\377\377\377\376\377\377\377"
- "~\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377"
- "\377\377\377\335\377\377\377\275\377\377\377\310\377\377\377\366\377\377"
- "\377\377\377\377\377\346\377\377\377\33\377\377\377\377\377\377\377\377\0"
- "\0\0\0\377\377\377\13\377\377\377\342\377\377\377\377\377\377\377\370\377"
- "\377\377\300\377\377\377\276\377\377\377\371\377\377\377\377\377\377\377"
- "\227\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\312\377\377\377"
- "\377\377\377\377\325\377\377\377\303\377\377\377\361\377\377\377\377\377"
- "\377\377\375\377\377\377f\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\377\377\377K\377\377\377\374\377\377\377\362\377\377\377\316\377\377\377"
- "\316\377\377\377\316\377\377\377\322\377\377\377\273\377\377\377\13\377\377"
- "\377\377\377\377\377\377\0\0\0\0\377\377\377\13\377\377\377\356\377\377\377"
- "\366\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\377\377\3778\377\377\377\371\377\377\377\377\377"
- "\377\377\352\377\377\377\271\377\377\377\321\377\377\377\375\377\377\377"
- "\372\377\377\377)\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\313"
- "\377\377\377\376\377\377\377l\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377"
- "\355\377\377\377\366\377\377\377)\377\377\377\377\377\377\377\377\0\0\0\0"
- "\377\377\377u\377\377\377\325\377\377\377\316\377\377\377\371\377\377\377"
- "\373\377\377\377\320\377\377\377\322\377\377\377\207\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\377\377\377\302\377\377\377\377\377\377\377"
- "\365\377\377\377\266\377\377\377\324\377\377\377\377\377\377\377\375\377"
- "\377\377=\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224"
- "\377\377\377\377\377\377\377\252\0\0\0\0\0\0\0\0\377\377\3778\377\377\377"
- "\372\377\377\377\376\377\377\377i\377\377\377\377\377\377\377\377\0\0\0\0"
- "\377\377\377\13\377\377\377\356\377\377\377\376\377\377\377\320\377\377\377"
- "\316\377\377\377\316\377\377\377\316\377\377\377\322\377\377\377V\377\377"
- "\377\377\377\377\377\377\0\0\0\0\377\377\377\313\377\377\377\371\377\377"
- "\377%\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\361\377\377\377\333\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\313\377\377\377"
- "\376\377\377\377l\0\0\0\0\377\377\377\13\377\377\377\352\377\377\377\377"
- "\377\377\377\332\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377"
- "\377j\377\377\377\375\377\377\377\377\377\377\377\321\377\377\377\302\377"
- "\377\377\375\377\377\377\377\377\377\377\234\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377\252\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\377\377\377j\377\377\377\375\377\377\377\377\377\377\377\320"
- "\377\377\377\307\377\377\377\375\377\377\377\377\377\377\377\216\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377"
- "\377\377\377\252\0\0\0\0\0\0\0\0\377\377\377\266\377\377\377\377\377\377"
- "\377\336\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\13\377\377\377"
- "\351\377\377\377\377\377\377\377\370\377\377\377\306\377\377\377\264\377"
- "\377\377\351\377\377\377\377\377\377\377\343\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\356\377\377"
- "\377\366\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\377\377\377b\377\377\377\375\377\377\377\377\377\377\377\325"
- "\377\377\377\307\377\377\377\374\377\377\377\377\377\377\377\227\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\232"
- "\377\377\377\377\377\377\377\377\377\377\377\304\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377"
- "\377\377\377\375\377\377\377_\377\377\377\33\377\377\377\365\377\377\377"
- "\377\377\377\377\322\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377"
- "\377\377\253\377\377\377\377\377\377\377\322\0\0\0\0\0\0\0\0\377\377\377"
- "\275\377\377\377\377\377\377\377\315\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\356\377\377\377\366"
- "\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\377\377\377\334\377\377\377\377\377\377\377\372\377\377\377\310\377"
- "\377\377\316\377\377\377\316\377\377\377\321\377\377\377\310\377\377\377"
- "%\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\224"
- "\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\317\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\364\377"
- "\377\377\254\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\307\377"
- "\377\377\377\377\377\377\336\377\377\377\233\377\377\377\305\377\377\377"
- "\376\377\377\377\377\377\377\377\332\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377\376\377\377\377"
- "\307\377\377\377\255\377\377\377\370\377\377\377\377\377\377\377\272\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377!\377\377\377\366"
- "\377\377\377\377\377\377\377\346\377\377\377\271\377\377\377\270\377\377"
- "\377\365\377\377\377\375\377\377\377M\377\377\377\377\377\377\377\377\0\0"
- "\0\0\377\377\377\255\377\377\377\377\377\377\377\373\377\377\377\257\377"
- "\377\377\302\377\377\377\376\377\377\377\377\377\377\377\332\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\377\377\377`\377\377\377\374\377\377"
- "\377\377\377\377\377\332\377\377\377\233\377\377\377\260\377\377\377\367"
- "\377\377\377\316\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377U\377\377\377\374\377\377\377\333\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\215\377"
- "\377\377\377\377\377\377\342\377\377\377\242\377\377\377\237\377\377\377"
- "\246\377\377\377\247\377\377\377X\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\377\377\377\224\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\377"
- "\377\377\13\377\377\377\356\377\377\377\366\377\377\377)\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377"
- "\356\377\377\377\366\377\377\377)\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\355\377"
- "\377\377\366\377\377\377%\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\377\377\377K\377\377\377\375\377\377\377\245\0\0\0\0\0\0\0\0\377"
- "\377\377\233\377\377\377\377\377\377\377\356\377\377\377%\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\355\377"
- "\377\377\376\377\377\377\302\377\377\377\262\377\377\377\322\377\377\377"
- "\33\377\377\377\377\377\377\377\377\377\377\377\13\377\377\377\361\377\377"
- "\377\333\0\0\0\0\377\377\377\320\377\377\377\371\377\377\377%\377\377\377"
- "\223\377\377\377\377\377\377\377\252\377\377\377\377\377\377\377\377\0\0"
- "\0\0\377\377\377\224\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\377\377"
- "\377\13\377\377\377\356\377\377\377\366\377\377\377)\377\377\377\377\377"
- "\377\377\377\0\0\0\0\377\377\377\214\377\377\377\377\377\377\377\376\377"
- "\377\377\274\377\377\377\255\377\377\377\370\377\377\377\377\377\377\377"
- "\265\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377"
- "\377\377\377\377\377\377\376\377\377\377\307\377\377\377\255\377\377\377"
- "\370\377\377\377\377\377\377\377\272\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\377\377\377\255\377\377\377\377\377\377\377\373\377\377\377"
- "\257\377\377\377\302\377\377\377\376\377\377\377\377\377\377\377\332\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\313\377"
- "\377\377\376\377\377\377l\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\377\377\377\341\377\377\377\377\377\377"
- "\377\335\377\377\377\233\377\377\377\213\377\377\377\306\377\377\377\377"
- "\377\377\377\352\377\377\377\13\377\377\377\377\377\377\377\377\0\0\0\0\0"
- "\0\0\0\0\0\0\0\377\377\377\241\377\377\377\377\377\377\377\365\377\377\377"
- "\245\377\377\377\255\377\377\377\325\377\377\3772\377\377\377\377\377\377"
- "\377\377\0\0\0\0\377\377\377\275\377\377\377\377\377\377\377\361\377\377"
- "\377\252\377\377\377\331\377\377\377\377\377\377\377\377\377\377\377\332"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\266\377\377\377\377\377\377\377\377\377\377\377\336\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\240\377\377"
- "\377\377\377\377\377\377\377\377\377\207\377\377\377K\377\377\377\374\377"
- "\377\377\377\377\377\377\315\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\377\377\377U\377\377\377\374\377\377\377\372\377\377\3778\377\377\377"
- "!\377\377\377\366\377\377\377\376\377\377\377\177\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377}\377\377\377\377\377"
- "\377\377\377\377\377\377\352\377\377\377\13\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\377\377\377\267\377\377\377\377\377\377\377\377"
- "\377\377\377\311\377\377\377\302\377\377\377\304\377\377\377\304\377\377"
- "\377\271\377\377\377\33\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0"
- "\0\0\0\377\377\377\13\377\377\377\361\377\377\377\327\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\313\377\377\377\371\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\313\377\377\377\371\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377b\377\377\377\374\377\377\377\377\377\377\377\225\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\316\377\377\377\333\0\0\0\0"
- "\377\377\377\316\377\377\377\334\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377w\377\377\377\343\377"
- "\377\377\375\377\377\377\201\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\377\377\377\13\377\377\377\244\377\377\377\13\0\0\0\0\0\0\0"
- "\0\377\377\377\302\377\377\377\377\377\377\377\377\377\377\377\364\377\377"
- "\377Z\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377~\377\377\377\370"
- "\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377\275\377\377"
- "\377\266\377\377\377\376\377\377\377\323\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\335\377\377\377\376\377\377\377~\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377K\377\377"
- "\377\373\377\377\377\363\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377I\377\377"
- "\377\357\377\377\377\377\377\377\377\364\377\377\377)\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377}\377\377\377\376\377\377\377\377\377\377"
- "\377\244\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\377\377\377\232\377\377\377\377\377\377\377\251\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\377\377\377l\377\377\377\367\377\377\377\377\377\377\377\377\377\377\377"
- "\376\377\377\377\223\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\377\377\377\232\377\377\377\377\377\377\377\377\377\377\377\377\377"
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\372\377\377\377"
- ")\377\377\377\377\377\377\377\377\377\377\377\13\377\377\377\355\377\377"
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
- "\377\377\377\377\377\377\377\360\377\377\377\33\377\377\377\377\377\377\377"
- "\377\0\0\0\0\377\377\377j\377\377\377\350\377\377\377\377\377\377\377\377"
- "\377\377\377\377\377\377\377\376\377\377\377\302\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377;\377\377\377\372\377\377\377\316\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\377\377\377u\377\377\377\351\377\377\377\377\377\377"
- "\377\377\377\377\377\377\377\377\377\373\377\377\377\254\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377S\377\377\377"
- "\354\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\325\377"
- "\377\377\33\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0"
- "\0\377\377\377\214\377\377\377\377\377\377\377\244\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\13\377\377"
- "\377\315\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
- "\377\377\377\342\377\377\3772\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\377\377\377\177\377\377\377\365\377\377\377\377\377\377\377\377\377"
- "\377\377\377\377\377\377\342\377\377\3772\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377}\377\377\377\376\377"
- "\377\377\377\377\377\377\244\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377I\377\377\377\357\377\377"
- "\377\377\377\377\377\364\377\377\377)\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\13\377\377\377M\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\232\377\377\377\377\377\377\377\375"
- "\377\377\377\\\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0"
- "\0\0\0\377\377\377\255\377\377\377\377\377\377\377\234\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377"
- "\224\377\377\377\377\377\377\377\276\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\240\377\377\377\377\377\377\377\266\377\377\377\377\377\377\377"
- "\377\0\0\0\0\377\377\377\215\377\377\377\377\377\377\377\377\377\377\377"
- "\377\377\377\377\377\377\377\377\370\377\377\377\312\377\377\377%\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377"
- "\316\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\377"
- "\377\377\255\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377"
- "\305\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\373\377"
- "\377\377\330\377\377\377V\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\377\377\377K\377\377\377\374\377\377\377\377\377\377\377\377\377"
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\372\377\377\377"
- ")\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\13\377\377\377\351"
- "\377\377\377\366\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377I\377\377\377\345"
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\370\377\377"
- "\377\241\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\313"
- "\377\377\377\375\377\377\377\\\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377"
- "\355\377\377\377\355\377\377\377\33\377\377\377\377\377\377\377\377\0\0\0"
- "\0\377\377\377\224\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\336\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\377\377\377\13\377\377\377\316\377\377\377"
- "\377\377\377\377\377\377\377\377\377\377\377\377\373\377\377\377\213\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377"
- "\377\377\377\377\377\377\252\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\247\377"
- "\377\377\377\377\377\377\326\377\377\377\377\377\377\377\377\0\0\0\0\377"
- "\377\377\13\377\377\377\351\377\377\377\377\377\377\377\377\377\377\377\377"
- "\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377_\377\377\377"
- "\377\377\377\377\377\0\0\0\0\377\377\377\313\377\377\377\366\377\377\377"
- "%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\344\377\377\377\333\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\377\377\377\307\377\377\377\375\377\377"
- "\377Q\0\0\0\0\0\0\0\0\377\377\377\204\377\377\377\377\377\377\377\327\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\206\377"
- "\377\377\371\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377"
- "\240\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377"
- "\215\377\377\377\377\377\377\377\244\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377"
- "\206\377\377\377\370\377\377\377\377\377\377\377\377\377\377\377\376\377"
- "\377\377\241\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377"
- "\377\377\214\377\377\377\377\377\377\377\252\0\0\0\0\0\0\0\0\377\377\377"
- "\33\377\377\377\356\377\377\377\376\377\377\377v\377\377\377\377\377\377"
- "\377\377\0\0\0\0\377\377\377\25\377\377\377\316\377\377\377\376\377\377\377"
- "\377\377\377\377\377\377\377\377\377\377\377\377\335\377\377\377)\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377"
- "\377\377\351\377\377\377\364\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\233\377\377\377\375"
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\276\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377;\377\377\377\372\377\377\377\376\377\377\377|\0\0\0\0\0\0\0\0\0\0\0"
- "\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377u\377\377\377\375\377"
- "\377\377\355\377\377\377\33\0\0\0\0\377\377\377\320\377\377\377\377\377\377"
- "\377\244\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\33\377\377\377"
- "\366\377\377\377\372\377\377\377=\0\0\0\0\0\0\0\0\377\377\377\33\377\377"
- "\377\362\377\377\377\376\377\377\377_\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\351\377\377\377\364\377\377"
- "\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377"
- "\13\377\377\377\356\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377l\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\224\377"
- "\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377}\377"
- "\377\377\377\377\377\377\277\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\364\377\377"
- "\377\254\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\3775\377\377\377"
- "\347\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\303\377"
- "\377\377\362\377\377\377\333\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\377\377\377\224\377\377\377\377\377\377\377\345\377\377\377\377\377"
- "\377\377\377\377\377\377\377\377\377\377\307\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377I\377\377\377\345\377\377"
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\373\377\377\377\260"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\310"
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\326\377\377"
- "\377\367\377\377\377\315\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\377\377\377l\377\377\377\356\377\377\377\377\377\377\377\377\377"
- "\377\377\377\377\377\377\370\377\377\377\231\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377;\377\377\377\373\377\377"
- "\377\322\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\377\377\377I\377\377\377\373\377\377\377\377\377\377\377\377\377"
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
- "\216\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377"
- "\376\377\377\377i\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\351\377\377"
- "\377\355\377\377\377\33\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\377\377\377\13\377\377\377\351\377\377\377\355\377\377\377"
- "\33\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\377\377\377\13\377\377\377\355\377\377\377\366\377\377\377)\0"
- "\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377K\377\377"
- "\377\374\377\377\377\252\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\307\377\377"
- "\377\377\377\377\377\304\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\223\377\377\377\375\377\377\377\377\377\377"
- "\377\377\377\377\377\372\377\377\377M\377\377\377\377\377\377\377\377\377"
- "\377\377\13\377\377\377\361\377\377\377\333\0\0\0\0\377\377\377\275\377\377"
- "\377\371\377\377\377%\377\377\377\223\377\377\377\377\377\377\377\252\377"
- "\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\376\377"
- "\377\377i\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\351\377\377\377\355"
- "\377\377\377\33\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377"
- "\240\377\377\377\374\377\377\377\377\377\377\377\377\377\377\377\376\377"
- "\377\377\275\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377"
- "\377\377\224\377\377\377\377\377\377\377\352\377\377\377\377\377\377\377"
- "\377\377\377\377\377\377\377\377\307\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\377\377\377\310\377\377\377\377\377\377\377"
- "\377\377\377\377\377\377\377\377\337\377\377\377\377\377\377\377\332\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\307\377"
- "\377\377\375\377\377\377_\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\377\377\377c\377\377\377\330\377\377\377"
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\354\377"
- "\377\377Z\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\13\377\377\377\333\377\377\377\377\377\377\377\377\377\377\377"
- "\377\377\377\377\375\377\377\377_\377\377\377\377\377\377\377\377\0\0\0\0"
- "\377\377\377\33\377\377\377\350\377\377\377\377\377\377\377\377\377\377\377"
- "\376\377\377\377\255\377\377\377\362\377\377\377\323\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377;\377\377\377\372"
- "\377\377\377\376\377\377\377\206\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\377\377\377b\377\377\377\374\377\377\377\372\377"
- "\377\377I\377\377\377\13\377\377\377\355\377\377\377\377\377\377\377\243"
- "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\13\377\377\377\345\377"
- "\377\377\376\377\377\377\214\0\0\0\0\0\0\0\0\377\377\377j\377\377\377\374"
- "\377\377\377\363\377\377\377%\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\335\377\377\377\377\377\377\377\236\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\13\377\377"
- "\377\355\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
- "\377\377\377\377\377\377\377\377\377\377\377\372\377\377\377)\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\360"
- "\377\377\377\333\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377\371"
- "\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377\371\377\377\377"
- "%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377E\377\377\377S\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377\371\377\377\377%\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377Q\377\377\377n\377\377\377\13\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377b\377\377"
- "\377e\377\377\377\33\0\0\0\0\0\0\0\0\371\371\377.\377\377\3775\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377V\377\377\377\374\377\377\377\364\377\377"
- "\3772\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377"
- "\377\377\13\377\377\377\343\377\377\377\377\377\377\377\215\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\33\377\377\377\371\377\377\377\334\0\0\0\0\0"
- "\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377E\377\377\377X\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0"
- "\0\0\0\377\377\377\341\377\377\377\375\377\377\377=\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\377\377\377e\377\377\377l\377\377\377\33\0\0\0\0\0\0\0\0\0\0\0"
- "\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377E\377\377\377X\377\377\377S\377\377\377\13\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377@\377\377\377e\377\377\377c\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\377\377\377S\377\377\377K\377\377\377I\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377)\377\377\377e\377\377\377n\377\377\377"
- "8\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377_\377\377\377p\377\377\377I\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377E\377\377\377X\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\33\377\377\377\371"
- "\377\377\377\334\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377`\377\377\377I\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\377\377\377\33\377\377\377\362\377\377\377"
- "\376\377\377\377\255\377\377\3775\377\377\377V\377\377\377\322\377\377\377"
- "\255\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377)\377\377\377X\377\377\377V\377\377\377\13\0\0\0"
- "\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377E\377\377\377"
- "m\377\377\377c\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\371\371\377.\377\377\377m\377\377\377c\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377b\377\377\377c\377\377\377\13"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\320"
- "\377\377\377\377\377\377\377\333\377\377\377\33\377\377\377E\377\377\377"
- "\13\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377e\377\377\377e\377\377"
- "\3778\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "e\377\377\377n\377\377\3775\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\224\377\377\377\376\377\377\377U\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\25\377\377\377\361\377\377\377\366\377\377"
- "\377%\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\13\377\377\377\364\377\377\377\254\0\0\0\0\0\0\0\0\0\0\0"
- "\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\377\377\377\216\377\377\377\233\377\377\377\232\377\377\377\232"
- "\377\377\377\232\377\377\377\232\377\377\377\232\377\377\377\237\377\377"
- "\377=\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377U\377\377\377n\377\377\3775\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\377\377\377E\377\377\377n\377\377\3778\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377@\377\377\377m\377\377\377c\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377@\377\377\377p\377"
- "\377\377I\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377Q\377\377\377p\377\377\377X\0"
- "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\377\377\377\324\377\377\377\376\377\377\377"
- "|\377\377\377S\377\377\377V\377\377\377K\377\377\377\263\377\377\377\377"
- "\377\377\377\252\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\25\377\377\377\362\377\377\377\360\377\377\377"
- "\33\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377)\377"
- "\377\377p\377\377\377c\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377b\377\377\377f\377\377\377"
- "\13\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377"
- "\377\224\377\377\377\376\377\377\377U\377\377\377@\377\377\377e\377\377\377"
- "8\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377@\377\377\377p\377\377\377I\377\377\377;\377\377\377"
- "\374\377\377\377\333\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377"
- "\377e\377\377\377e\377\377\377I\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377O\377\377"
- "\377X\377\377\377U\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0"
- "\0\0\0\0\0\0\0\0\0\377\377\377j\377\377\377n\377\377\377\33\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\33\377\377\377"
- "\362\377\377\377\367\377\377\377)\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\13\377\377\377\361\377\377\377\356\377\377\377%\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\313\377\377\377\371\377\377\377%\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\335\377\377\377\372\377\377\377)\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\267\377\377\377"
- "\345\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\237\377\377\377\377\377\377\377\361\377\377"
- "\3772\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377"
- "\331\377\377\377\377\377\377\377\304\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\3772\377\377\377\337\377\377\377\377\377\377\377\236\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377b\377"
- "\377\377\376\377\377\377\330\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\3772\377\377\377\337\377\377\377\377\377\377\377\236\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\377\377\3775\377\377\377\344\377\377\377\377\377\377\377\377\377\377\377"
- "\377\377\377\377\377\377\377\377\270\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\3775\377\377\377\362\377\377\377\377"
- "\377\377\377\377\377\377\377\377\377\377\377\210\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\232\377\377\377\377\377\377"
- "\377\370\377\377\377\364\377\377\377\372\377\377\377\243\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\266\377\377\377\377\377\377\377\225\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\377\377\377\205\377\377\377\371\377\377\377\364"
- "\377\377\377\364\377\377\377\377\377\377\377\260\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\377\377\377\13\377\377\377\370\377\377\377\377\377\377\377\377\377\377\377"
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
- "\377\377m\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\377\377\377\13\377\377\377\345\377\377\377"
- "\375\377\377\377f\0\0\0\0\0\0\0\0\377\377\3772\377\377\377\326\377\377\377"
- "\377\377\377\377\245\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377"
- "\377\377\234\377\377\377\205\377\377\377I\377\377\377\272\377\377\377\377"
- "\377\377\377\326\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377"
- "\377\224\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377K\377\377\377\374\377\377\377\333\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\377\377\377i\377\377\377\203\377\377\377"
- "\337\377\377\377\377\377\377\377\260\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\275\377\377\377\377\377\377\377"
- "\377\377\377\377\373\377\377\377\243\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377\371\377"
- "\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\377\377\377\177\377\377\377\372\377\377\377\376\377\377\377\377\377\377"
- "\377\333\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\253\377\377"
- "\377\340\377\377\377%\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\377\377\377\310\377\377\377\307\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377"
- "\377\377\13\377\377\377\351\377\377\377\377\377\377\377\276\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377"
- "\377u\377\377\377\325\377\377\377w\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377"
- "\377\13\377\377\377\351\377\377\377\377\377\377\377\276\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377`\377\377\377\213\377\377\377\203\377\377"
- "\3778\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\13\377\377\377\251\377\377\377\322\377\377\377\316"
- "\377\377\377m\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377`\377\377\377\263\377\377\377\263\377\377\377\263\377\377\377\266"
- "\377\377\377u\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377G\377\377\377\317\377\377\377w\0"
- "\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377i\377\377\377\266"
- "\377\377\377\263\377\377\377\263\377\377\377\262\377\377\377_\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\377\377\377`\377\377\377y\377\377\377y\377\377\377y"
- "\377\377\377y\377\377\377y\377\377\377y\377\377\377x\377\377\377\33\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\377\377\377\237\377\377\377\377\377\377\377\377"
- "\377\377\377\370\377\377\377\370\377\377\377\377\377\377\377\377\377\377"
- "\377\325\377\377\377\33\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377"
- ";\377\377\377\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
- "\377\376\377\377\377z\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377"
- "\377\377\233\377\377\377\377\377\377\377l\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377V\377\377\377\376\377\377\377\327\0\0"
- "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\377\377\377\13\377\377\377\361\377\377\377\377"
- "\377\377\377\377\377\377\377\325\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377v\377\377\377\246\377"
- "\377\377\266\377\377\377u\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377\372\377\377\377)\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377"
- "i\377\377\377\266\377\377\377\255\377\377\377\214\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377s\377\377\377|\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377s\377\377\377"
- "|\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\0\0\0\0\377\377\377_\377\377\377\266\377\377\377\321\377\377\377\316\377"
- "\377\377\271\377\377\377q\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\377\377\377`\377\377\377\245\377\377\377\267\377\377\377"
- "\247\377\377\377=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
- "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
- "\377\377\377E\377\377\377\212\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\211\377\377\377=\0"
- "\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
- "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
- "\377\377\377\377\377\377\377\0\0\0\0\377\377\377v\377\377\377\232\377\377"
- "\377q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
- "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
- "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377"
- "\377\377\363\377\377\377\33\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
- "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
- "\377\377\377\377",
-};
-
diff --git a/minilibx/font.xcf b/minilibx/font.xcf
deleted file mode 100644
index b9c8c82..0000000
--- a/minilibx/font.xcf
+++ /dev/null
Binary files differ
diff --git a/minilibx/man/man3/mlx.3 b/minilibx/man/man3/mlx.3
new file mode 100755
index 0000000..9ad0ac1
--- /dev/null
+++ b/minilibx/man/man3/mlx.3
@@ -0,0 +1,93 @@
+.TH MiniLibX 3 "September 19, 2002"
+.SH NAME
+MiniLibX - Simple X-Window Interface Library for students
+.SH SYNOPSYS
+#include <mlx.h>
+
+.nf
+.I void *
+.fi
+.B mlx_init
+();
+
+.SH DESCRIPTION
+MiniLibX is an easy way to create graphical software,
+without any X-Window programming knowledge. It provides
+simple window creation, a drawing tool, image and basic events
+management.
+
+.SH X-WINDOW CONCEPT
+
+X-Window is a network-oriented graphical system for Unix.
+It is based on two main parts:
+.br
+On one side, your software wants to draw something on the screen and/or
+get keyboard & mouse entries.
+.br
+On the other side, the X-Server manages the screen, keyboard and mouse
+(It is often refered to as a "display").
+.br
+A network connection must be established between these two entities to send
+drawing orders (from the software to the X-Server), and keyboard/mouse
+events (from the X-Server to the software).
+
+.SH INCLUDE FILE
+.B mlx.h
+should be included for a correct use of the MiniLibX API.
+It only contains function prototypes, no structure is needed.
+
+.SH LIBRARY FUNCTIONS
+.P
+First of all, you need to initialize the connection
+between your software and the display.
+Once this connection is established, you'll be able to
+use other MiniLibX functions to send the X-Server messages,
+like "I want to draw a yellow pixel in this window" or "did the
+user hit a key?".
+.P
+The
+.B mlx_init
+function will create this connection. No parameters are needed, ant it will
+return a
+.I "void *"
+identifier, used for further calls to the library routines.
+.P
+All other MiniLibX functions are described in the following man pages:
+
+.TP 20
+.B mlx_new_window
+: manage windows
+.TP 20
+.B mlx_pixel_put
+: draw inside window
+.TP 20
+.B mlx_new_image
+: manipulate images
+.TP 20
+.B mlx_loop
+: handle keyboard or mouse events
+
+.SH LINKING MiniLibX
+To use MiniLibX functions, you'll need to link
+your software with several libraries, including the MiniLibX library itself.
+To do this, simply add the following arguments at linking time:
+
+.B -lmlx -lXext -lX11
+
+You may also need to specify the path to these libraries, using
+the
+.B -L
+flag.
+
+
+.SH RETURN VALUES
+If
+.B mlx_init()
+fails to set up the connection to the X server, it will return NULL, otherwise
+a non-null pointer is returned as a connection identifier.
+
+.SH SEE ALSO
+mlx_new_window(3), mlx_pixel_put(3), mlx_new_image(3), mlx_loop(3)
+
+.SH AUTHOR
+Copyright ol@ - 2002-2014 - Olivier Crouzet
diff --git a/minilibx/man/man3/mlx_loop.3 b/minilibx/man/man3/mlx_loop.3
new file mode 100755
index 0000000..3397ce2
--- /dev/null
+++ b/minilibx/man/man3/mlx_loop.3
@@ -0,0 +1,141 @@
+.TH MiniLibX 3 "September 19, 2002"
+.SH NAME
+MiniLibX - Handle events
+.SH SYNOPSYS
+
+.nf
+.I int
+.fi
+.B mlx_loop
+(
+.I void *mlx_ptr
+);
+
+.nf
+.I int
+.fi
+.B mlx_key_hook
+(
+.I void *win_ptr, int (*funct_ptr)(), void *param
+);
+
+.nf
+.I int
+.fi
+.B mlx_mouse_hook
+(
+.I void *win_ptr, int (*funct_ptr)(), void *param
+);
+
+.nf
+.I int
+.fi
+.B mlx_expose_hook
+(
+.I void *win_ptr, int (*funct_ptr)(), void *param
+);
+
+.nf
+.I int
+.fi
+.B mlx_loop_hook
+(
+.I void *mlx_ptr, int (*funct_ptr)(), void *param
+);
+
+.SH X-WINDOW EVENTS
+
+The X-Window system is bi-directionnal. On one hand, the program sends orders to
+the screen to display pixels, images, and so on. On the other hand,
+it can get information from the keyboard and mouse associated to
+the screen. To do so, the program receives "events" from the keyboard or the
+mouse.
+
+.SH DESCRIPTION
+
+To receive events, you must use
+.B mlx_loop
+(). This function never returns. It is an infinite loop that waits for
+an event, and then calls a user-defined function associated with this event.
+A single parameter is needed, the connection identifier
+.I mlx_ptr
+(see the
+.B mlx manual).
+
+You can assign different functions to the three following events:
+.br
+- A key is pressed
+.br
+- The mouse button is pressed
+.br
+- A part of the window should be re-drawn
+(this is called an "expose" event, and it is your program's job to handle it).
+.br
+
+Each window can define a different function for the same event.
+
+The three functions
+.B mlx_key_hook
+(),
+.B mlx_mouse_hook
+() and
+.B mlx_expose_hook
+() work exactly the same way.
+.I funct_ptr
+is a pointer to the function you want to be called
+when an event occurs. This assignment is specific to the window defined by the
+.I win_ptr
+identifier. The
+.I param
+adress will be passed to the function everytime it is called, and should be
+used to store the parameters it might need.
+
+The syntax for the
+.B mlx_loop_hook
+() function is identical to the previous ones, but the given function will be
+called when no event occurs.
+
+When it catches an event, the MiniLibX calls the corresponding function
+with fixed parameters:
+.nf
+
+ expose_hook(void *param);
+ key_hook(int keycode,void *param);
+ mouse_hook(int button,int x,int y,void *param);
+ loop_hook(void *param);
+
+.fi
+These function names are arbitrary. They here are used to distinguish
+parameters according to the event. These functions are NOT part of the
+MiniLibX.
+
+.I param
+is the address specified in the mlx_*_hook calls. This address is never
+used nor modified by the MiniLibX. On key and mouse events, additional
+information is passed:
+.I keycode
+tells you which key is pressed (look for the X11 include file "keysymdef.h"),
+(
+.I x
+,
+.I y
+) are the coordinates of the mouse click in the window, and
+.I button
+tells you which mouse button was pressed.
+
+.SH GOING FURTHER WITH EVENTS
+The MiniLibX provides a much generic access to all X-Window events. The
+.I mlx.h
+include define
+.B mlx_hook()
+in the same manner mlx_*_hook functions work. The event and mask values
+will be taken from the X11 include file "X.h".
+
+See source code of mlx_int_param_event.c to find out how the MiniLibX will
+call your own function for a specific event.
+
+.SH SEE ALSO
+mlx(3), mlx_new_window(3), mlx_pixel_put(3), mlx_new_image(3)
+
+.SH AUTHOR
+Copyright ol@ - 2002-2014 - Olivier Crouzet
diff --git a/minilibx/man/man3/mlx_new_image.3 b/minilibx/man/man3/mlx_new_image.3
new file mode 100755
index 0000000..f2160a2
--- /dev/null
+++ b/minilibx/man/man3/mlx_new_image.3
@@ -0,0 +1,192 @@
+.TH MiniLibX 3 "September 19, 2002"
+.SH NAME
+MiniLibX - Manipulating images
+.SH SYNOPSYS
+
+.nf
+.I void *
+.fi
+.B mlx_new_image
+(
+.I void *mlx_ptr, int width, int height
+);
+
+.nf
+.I char *
+.fi
+.B mlx_get_data_addr
+(
+.I void *img_ptr, int *bits_per_pixel, int *size_line, int *endian
+);
+
+.nf
+.I int
+.fi
+.B mlx_put_image_to_window
+(
+.I void *mlx_ptr, void *win_ptr, void *img_ptr, int x, int y
+);
+
+.nf
+.I unsigned int
+.fi
+.B mlx_get_color_value
+(
+.I void *mlx_ptr, int color
+);
+
+.nf
+.I void *
+.fi
+.B mlx_xpm_to_image
+(
+.I void *mlx_ptr, char **xpm_data, int *width, int *height
+);
+
+.nf
+.I void *
+.fi
+.B mlx_xpm_file_to_image
+(
+.I void *mlx_ptr, char *filename, int *width, int *height
+);
+
+.nf
+.I int
+.fi
+.B mlx_destroy_image
+(
+.I void *mlx_ptr, void *img_ptr
+);
+
+
+.SH DESCRIPTION
+
+.B mlx_new_image
+() creates a new image in memory. It returns a
+.I void *
+identifier needed to manipulate this image later. It only needs
+the size of the image to be created, using the
+.I width
+and
+.I height
+parameters, and the
+.I mlx_ptr
+connection identifier (see the
+.B mlx
+manual).
+
+The user can draw inside the image (see below), and
+can dump the image inside a specified window at any time to
+display it on the screen. This is done using
+.B mlx_put_image_to_window
+(). Three identifiers are needed here, for the connection to the
+display, the window to use, and the image (respectively
+.I mlx_ptr
+,
+.I win_ptr
+and
+.I img_ptr
+). The (
+.I x
+,
+.I y
+) coordinates define where the image should be placed in the window.
+
+.B mlx_get_data_addr
+() returns information about the created image, allowing a user
+to modify it later. The
+.I img_ptr
+parameter specifies the image to use. The three next parameters should
+be the addresses of three different valid integers.
+.I bits_per_pixel
+will be filled with the number of bits needed to represent a pixel color
+(also called the depth of the image).
+.I size_line
+is the number of bytes used to store one line of the image in memory.
+This information is needed to move from one line to another in the image.
+.I endian
+tells you wether the pixel color in the image needs to be stored in
+little endian (
+.I endian
+== 0), or big endian (
+.I endian
+== 1).
+
+.B mlx_get_data_addr
+returns a
+.I char *
+address that represents the begining of the memory area where the image
+is stored. From this adress, the first
+.I bits_per_pixel
+bits represent the color of the first pixel in the first line of
+the image. The second group of
+.I bits_per_pixel
+bits represent the second pixel of the first line, and so on.
+Add
+.I size_line
+to the adress to get the begining of the second line. You can reach any
+pixels of the image that way.
+
+.B mlx_destroy_image
+destroys the given image (
+.I img_ptr
+).
+
+.SH STORING COLOR INSIDE IMAGES
+
+Depending on the display, the number of bits used to store a pixel color
+can change. The user usually represents a color in RGB mode, using
+one byte for each component (see
+.B mlx_pixel_put
+manual). This must be translated to fit the
+.I bits_per_pixel
+requirement of the image, and make the color understandable to the X-Server.
+That is the purpose of the
+.B mlx_get_color_value
+() function. It takes a standard RGB
+.I color
+parameter, and returns an
+.I unsigned int
+value.
+The
+.I bits_per_pixel
+least significant bits of this value can be stored in the image.
+
+Keep in mind that the least significant bits position depends on the local
+computer's endian. If the endian of the image (in fact the endian of
+the X-Server's computer) differs from the local endian, then the value should
+be transformed before being used.
+
+.SH XPM IMAGES
+
+The
+.B mlx_xpm_to_image
+() and
+.B mlx_xpm_file_to_image
+() functions will create a new image the same way.
+They will fill it using the specified
+.I xpm_data
+or
+.I filename
+, depending on which function is used.
+Note that MiniLibX does not use the standard
+Xpm library to deal with xpm images. You may not be able to
+read all types of xpm images. It however handles transparency.
+
+.SH RETURN VALUES
+The three functions that create images,
+.B mlx_new_image()
+,
+.B mlx_xpm_to_image()
+and
+.B mlx_xpm_file_to_image()
+, will return NULL if an error occurs. Otherwise they return a non-null pointer
+as an image identifier.
+
+
+.SH SEE ALSO
+mlx(3), mlx_new_window(3), mlx_pixel_put(3), mlx_loop(3)
+
+.SH AUTHOR
+Copyright ol@ - 2002-2014 - Olivier Crouzet
diff --git a/minilibx/man/man3/mlx_new_window.3 b/minilibx/man/man3/mlx_new_window.3
new file mode 100755
index 0000000..90f6d47
--- /dev/null
+++ b/minilibx/man/man3/mlx_new_window.3
@@ -0,0 +1,79 @@
+.TH MiniLibX 3 "September 19, 2002"
+.SH NAME
+MiniLibX - Managing windows
+.SH SYNOPSYS
+
+.nf
+.I void *
+.fi
+.B mlx_new_window
+(
+.I void *mlx_ptr, int size_x, int size_y, char *title
+);
+
+.nf
+.I int
+.fi
+.B mlx_clear_window
+(
+.I void *mlx_ptr, void *win_ptr
+);
+
+.nf
+.I int
+.fi
+.B mlx_destroy_window
+(
+.I void *mlx_ptr, void *win_ptr
+);
+
+
+.SH DESCRIPTION
+The
+.B mlx_new_window
+() function creates a new window on the screen, using the
+.I size_x
+and
+.I size_y
+parameters to determine its size, and
+.I title
+as the text that should be displayed in the window's title bar.
+The
+.I mlx_ptr
+parameter is the connection identifier returned by
+.B mlx_init
+() (see the
+.B mlx
+man page).
+.B mlx_new_window
+() returns a
+.I void *
+window identifier that can be used by other MiniLibX calls.
+Note that the MiniLibX
+can handle an arbitrary number of separate windows.
+
+.B mlx_clear_window
+() and
+.B mlx_destroy_window
+() respectively clear (in black) and destroy the given window. They both have
+the same parameters:
+.I mlx_ptr
+is the screen connection identifier, and
+.I win_ptr
+is a window identifier.
+
+.SH RETURN VALUES
+If
+.B mlx_new_window()
+fails to create a new window (for wathever reason), it will return NULL,
+otherwise a non-null pointer is returned as a window identifier.
+.B mlx_clear_window
+and
+.B mlx_destroy_window
+right now return nothing.
+
+.SH SEE ALSO
+mlx(3), mlx_pixel_put(3), mlx_new_image(3), mlx_loop(3)
+
+.SH AUTHOR
+Copyright ol@ - 2002-2014 - Olivier Crouzet
diff --git a/minilibx/man/man3/mlx_pixel_put.3 b/minilibx/man/man3/mlx_pixel_put.3
new file mode 100755
index 0000000..f4d131e
--- /dev/null
+++ b/minilibx/man/man3/mlx_pixel_put.3
@@ -0,0 +1,81 @@
+.TH MiniLibX 3 "September 19, 2002"
+.SH NAME
+MiniLibX - Drawing inside windows
+.SH SYNOPSYS
+
+.nf
+.I int
+.fi
+.B mlx_pixel_put
+(
+.I void *mlx_ptr, void *win_ptr, int x, int y, int color
+);
+
+.nf
+.I int
+.fi
+.B mlx_string_put
+(
+.I void *mlx_ptr, void *win_ptr, int x, int y, int color, char *string
+);
+
+
+.SH DESCRIPTION
+The
+.B mlx_pixel_put
+() function draws a defined pixel in the window
+.I win_ptr
+using the (
+.I x
+,
+.I y
+) coordinates, and the specified
+.I color
+\&. The origin (0,0) is the upper left corner of the window, the x and y axis
+respectively pointing right and down. The connection
+identifier,
+.I mlx_ptr
+, is needed (see the
+.B mlx
+man page).
+
+Parameters for
+.B mlx_string_put
+() have the same meaning. Instead of a simple pixel, the specified
+.I string
+will be displayed at (
+.I x
+,
+.I y
+).
+
+In both functions, it is impossible to display anything outside the
+specified window, nor display in another window in front of the selected one.
+
+.SH COLOR MANAGEMENT
+The
+.I color
+parameter has an integer type. The displayed color needs to be encoded
+in this integer, following a defined scheme. All displayable colors
+can be split in 3 basic colors: red, green and blue. Three associated
+values, in the 0-255 range, represent how much of each color is mixed up
+to create the original color. Theses three values must be set inside the
+integer to display the right color. The three least significant bytes of
+this integer are filled as shown in the picture below:
+
+.nf
+ | 0 | R | G | B | color integer
+ +---+---+---+---+
+.fi
+
+
+While filling the integer, make sure you avoid endian problems. Remember
+that the "blue" byte should always be the least significant one.
+
+
+.SH SEE ALSO
+mlx(3), mlx_new_window(3), mlx_new_image(3), mlx_loop(3)
+
+
+.SH AUTHOR
+Copyright ol@ - 2002-2014 - Olivier Crouzet
diff --git a/minilibx/mlx.h b/minilibx/mlx.h
index e75b4af..a2cc7e5 100644..100755
--- a/minilibx/mlx.h
+++ b/minilibx/mlx.h
@@ -2,10 +2,10 @@
** mlx.h for MinilibX in
**
** Made by Charlie Root
-** Login <ol@staff.42.fr>
+** Login <ol@epitech.net>
**
** Started on Mon Jul 31 16:37:50 2000 Charlie Root
-** Last update Tue Oct 01 16:23:28 2014 Olivier Crouzet
+** Last update Tue May 15 16:23:28 2007 Olivier Crouzet
*/
/*
@@ -16,29 +16,14 @@
/*
** FR msg - FR msg - FR msg
**
-** MacOSX
-** La MinilibX utilise 2 frameworks Mac : OpenGL et AppKit
-** qu'il faut ajouter a la compilation :
-** -framework OpenGL -framework AppKit
-**
-** UNIX / Linux
** La MinilibX utilise 2 librairies supplementaires qu'il
** est necessaire de rajouter a la compilation :
** -lmlx -lXext -lX11
**
** La MinilibX permet le chargement des images de type Xpm.
** Notez que cette implementation est incomplete.
-**
-** Il y a des differences entre X11 et MacOS.
-** les numeros des touches ne sont pas les memes,
-** les numeros des boutons souris ne sont pas les memes.
-** Egalement l'expose est gere differemment, et sous MacOS
-** il est preferable d'entrer le plus tot possible dans mlx_loop,
-** il est normal que les fenetres n'apparaissent pas avant mlx_loop
-** (ou bien forcez avec mlx_do_sync mais c'est pas genial).
-** Sous MacOS, l'octet Alpha est pris en compte dans toutes les
-** images, et represente la transparence et non l'opacite comme
-** c'est normalement le cas.
+** Merci de communiquer tout probleme de chargement d'image
+** de ce type.
*/
@@ -58,7 +43,7 @@ void *mlx_init();
** Basic actions
*/
-void *mlx_new_window(void *mlx_ptr, int size_x, int size_y, char *title);
+void *mlx_new_window(void *mlx_ptr, int size_x, int size_y, char const *title);
/*
** return void *0 if failed
*/
@@ -78,12 +63,14 @@ int mlx_pixel_put(void *mlx_ptr, void *win_ptr, int x, int y, int color);
void *mlx_new_image(void *mlx_ptr,int width,int height);
/*
** return void *0 if failed
+** obsolete : image2 data is stored using bit planes
+** void *mlx_new_image2(void *mlx_ptr,int width,int height);
*/
char *mlx_get_data_addr(void *img_ptr, int *bits_per_pixel,
int *size_line, int *endian);
/*
** endian : 0 = sever X is little endian, 1 = big endian
-** endian : useless on macos, client and graphical framework have the same endian
+** for mlx_new_image2, 2nd arg of mlx_get_data_addr is number_of_planes
*/
int mlx_put_image_to_window(void *mlx_ptr, void *win_ptr, void *img_ptr,
int x, int y);
@@ -121,10 +108,8 @@ int mlx_string_put(void *mlx_ptr, void *win_ptr, int x, int y, int color,
char *string);
void *mlx_xpm_to_image(void *mlx_ptr, char **xpm_data,
int *width, int *height);
-void *mlx_xpm_file_to_image(void *mlx_ptr, char *filename,
+void *mlx_xpm_file_to_image(void *mlx_ptr, char const *filename,
int *width, int *height);
-void *mlx_png_file_to_image(void *mlx_ptr, char *file, int *width, int *height);
-
int mlx_destroy_window(void *mlx_ptr, void *win_ptr);
int mlx_destroy_image(void *mlx_ptr, void *img_ptr);
@@ -137,11 +122,6 @@ int mlx_destroy_image(void *mlx_ptr, void *img_ptr);
int mlx_hook(void *win_ptr, int x_event, int x_mask,
int (*funct)(), void *param);
-int mlx_mouse_hide();
-int mlx_mouse_show();
-int mlx_mouse_move(void *win_ptr, int x, int y);
-int mlx_mouse_get_pos(void *win_ptr, int *x, int *y);
-
int mlx_do_key_autorepeatoff(void *mlx_ptr);
int mlx_do_key_autorepeaton(void *mlx_ptr);
int mlx_do_sync(void *mlx_ptr);
diff --git a/minilibx/mlx.pc b/minilibx/mlx.pc
new file mode 100755
index 0000000..e032212
--- /dev/null
+++ b/minilibx/mlx.pc
@@ -0,0 +1,12 @@
+prefix=/usr/local
+exec_prefix=${prefix}
+libdir=${exec_prefix}/lib
+includedir=${prefix}/include
+
+Name: MiniLibX
+Description: Simple X-Window Interface Library for students
+Version: 2014-01-06
+URL: https://projects.intrav2.42.fr/fdf/mine
+Requires.private: xext x11 libbsd
+Libs: -L${libdir} -lmlx
+Cflags: -I${includedir}
diff --git a/minilibx/mlx_clear_window.c b/minilibx/mlx_clear_window.c
new file mode 100755
index 0000000..f621090
--- /dev/null
+++ b/minilibx/mlx_clear_window.c
@@ -0,0 +1,21 @@
+/*
+** mlx_clear_window.c for MiniLibX in
+**
+** Made by Charlie Root
+** Login <ol@epitech.net>
+**
+** Started on Thu Sep 7 19:46:15 2000 Charlie Root
+** Last update Tue Sep 25 17:11:19 2001 Charlie Root
+*/
+
+
+
+#include "mlx_int.h"
+
+
+int mlx_clear_window(t_xvar *xvar,t_win_list *win)
+{
+ XClearWindow(xvar->display,win->window);
+ if (xvar->do_flush)
+ XFlush(xvar->display);
+}
diff --git a/minilibx/mlx_destroy_image.c b/minilibx/mlx_destroy_image.c
new file mode 100755
index 0000000..afd4d1a
--- /dev/null
+++ b/minilibx/mlx_destroy_image.c
@@ -0,0 +1,31 @@
+/*
+** mlx_destroy_image.c for MinilibX in
+**
+** Made by Charlie Root
+** Login <ol@epitech.net>
+**
+** Started on Tue Mar 12 10:25:15 2002 Charlie Root
+** Last update Tue May 15 16:45:54 2007 Olivier Crouzet
+*/
+
+
+#include "mlx_int.h"
+
+
+int mlx_destroy_image(t_xvar *xvar, t_img *img)
+{
+ if (img->type == MLX_TYPE_SHM_PIXMAP ||
+ img->type == MLX_TYPE_SHM)
+ {
+ XShmDetach(xvar->display, &(img->shm));
+ shmdt(img->shm.shmaddr);
+ /* shmctl IPC_RMID already done */
+ }
+ XDestroyImage(img->image); /* For image & shm-image. Also free img->data */
+ XFreePixmap(xvar->display, img->pix);
+ if (img->gc)
+ XFreeGC(xvar->display, img->gc);
+ free(img);
+ if (xvar->do_flush)
+ XFlush(xvar->display);
+}
diff --git a/minilibx/mlx_destroy_window.c b/minilibx/mlx_destroy_window.c
new file mode 100755
index 0000000..464790c
--- /dev/null
+++ b/minilibx/mlx_destroy_window.c
@@ -0,0 +1,38 @@
+/*
+** mlx_destroy_window.c for MinilibX in
+**
+** Made by Charlie Root
+** Login <ol@epitech.net>
+**
+** Started on Tue Mar 12 10:25:15 2002 Charlie Root
+** Last update Tue May 15 16:46:08 2007 Olivier Crouzet
+*/
+
+
+#include "mlx_int.h"
+
+
+int mlx_destroy_window(t_xvar *xvar,t_win_list *win)
+{
+ t_win_list *w;
+ t_win_list *prev;
+ t_win_list first;
+
+ first.next = xvar->win_list;
+ prev = &first;
+ w = prev->next;
+ while (w)
+ {
+ if (w==win)
+ prev->next = w->next;
+ else
+ prev = w;
+ w = w->next;
+ }
+ xvar->win_list = first.next;
+ XDestroyWindow(xvar->display,win->window);
+ XFreeGC(xvar->display,win->gc);
+ free(win);
+ if (xvar->do_flush)
+ XFlush(xvar->display);
+}
diff --git a/minilibx/mlx_expose_hook.c b/minilibx/mlx_expose_hook.c
new file mode 100755
index 0000000..b00b675
--- /dev/null
+++ b/minilibx/mlx_expose_hook.c
@@ -0,0 +1,22 @@
+/*
+** mlx_expose_hook.c for MiniLibX in
+**
+** Made by Charlie Root
+** Login <ol@epitech.net>
+**
+** Started on Thu Aug 3 11:49:06 2000 Charlie Root
+** Last update Fri Feb 23 17:07:42 2001 Charlie Root
+*/
+
+
+#include "mlx_int.h"
+
+
+
+
+int mlx_expose_hook(t_win_list *win,int (*funct)(),void *param)
+{
+ win->hooks[Expose].hook = funct;
+ win->hooks[Expose].param = param;
+ win->hooks[Expose].mask = ExposureMask;
+}
diff --git a/minilibx/mlx_flush_event.c b/minilibx/mlx_flush_event.c
new file mode 100755
index 0000000..1e586ad
--- /dev/null
+++ b/minilibx/mlx_flush_event.c
@@ -0,0 +1,25 @@
+/*
+** mlx_flush_event.c for MiniLibX in
+**
+** Made by Charlie Root
+** Login <ol@epitech.net>
+**
+** Started on Wed Aug 2 18:58:11 2000 Charlie Root
+** Last update Fri Feb 23 17:08:48 2001 Charlie Root
+*/
+
+
+#include "mlx_int.h"
+
+
+
+
+int mlx_flush_event(t_xvar *xvar)
+{
+ XEvent ev;
+
+ while (XPending(xvar->display))
+ {
+ XNextEvent(xvar->display,&ev);
+ }
+}
diff --git a/minilibx/mlx_get_color_value.c b/minilibx/mlx_get_color_value.c
new file mode 100755
index 0000000..b620970
--- /dev/null
+++ b/minilibx/mlx_get_color_value.c
@@ -0,0 +1,33 @@
+/*
+** mlx_get_color_value.c for MiniLibX in
+**
+** Made by Charlie Root
+** Login <ol@epitech.net>
+**
+** Started on Mon Jul 31 19:01:33 2000 Charlie Root
+** Last update Thu Oct 4 15:04:13 2001 Charlie Root
+*/
+
+
+#include "mlx_int.h"
+
+
+int mlx_get_color_value(t_xvar *xvar,int color)
+{
+ return(mlx_int_get_good_color(xvar,color));
+}
+
+int mlx_int_get_good_color(t_xvar *xvar,int color)
+{
+ XColor xc;
+
+ if (xvar->depth>=24)
+ return (color);
+ xc.red = (color>>8)&0xFF00;
+ xc.green = color&0xFF00;
+ xc.blue = (color<<8)&0xFF00;
+ xc.pixel = ((xc.red>>(16-xvar->decrgb[1]))<<xvar->decrgb[0])+
+ ((xc.green>>(16-xvar->decrgb[3]))<<xvar->decrgb[2])+
+ ((xc.blue>>(16-xvar->decrgb[5]))<<xvar->decrgb[4]);
+ return (xc.pixel);
+}
diff --git a/minilibx/mlx_get_data_addr.c b/minilibx/mlx_get_data_addr.c
new file mode 100755
index 0000000..45e7a85
--- /dev/null
+++ b/minilibx/mlx_get_data_addr.c
@@ -0,0 +1,23 @@
+/*
+** mlx_get_data_addr.c for MiniLibX in raytraceur
+**
+** Made by Charlie Root
+** Login <ol@epitech.net>
+**
+** Started on Mon Aug 14 15:45:57 2000 Charlie Root
+** Last update Thu Sep 27 19:05:25 2001 Charlie Root
+*/
+
+
+
+#include "mlx_int.h"
+
+
+char *mlx_get_data_addr(t_img *img,int *bits_per_pixel,
+ int *size_line,int *endian)
+{
+ *bits_per_pixel = img->bpp;
+ *size_line = img->size_line;
+ *endian = img->image->byte_order;
+ return (img->data);
+}
diff --git a/minilibx/mlx_hook.c b/minilibx/mlx_hook.c
new file mode 100755
index 0000000..98e509a
--- /dev/null
+++ b/minilibx/mlx_hook.c
@@ -0,0 +1,40 @@
+/*
+** mlx_hook.c for MiniLibX in
+**
+** Made by Charlie Root
+** Login <ol@epitech.net>
+**
+** Started on Thu Aug 3 11:49:06 2000 Charlie Root
+** Last update Fri Jan 28 17:05:28 2005 Olivier Crouzet
+*/
+
+
+#include "mlx_int.h"
+
+
+
+
+int mlx_hook(t_win_list *win, int x_event, int x_mask,
+ int (*funct)(),void *param)
+{
+ win->hooks[x_event].hook = funct;
+ win->hooks[x_event].param = param;
+ win->hooks[x_event].mask = x_mask;
+}
+
+
+int mlx_do_key_autorepeatoff(t_xvar *xvar)
+{
+ XAutoRepeatOff(xvar->display);
+}
+
+int mlx_do_key_autorepeaton(t_xvar *xvar)
+{
+ XAutoRepeatOn(xvar->display);
+}
+
+
+int mlx_do_sync(t_xvar *xvar)
+{
+ XSync(xvar->display, False);
+}
diff --git a/minilibx/mlx_init.c b/minilibx/mlx_init.c
new file mode 100755
index 0000000..7a8db8f
--- /dev/null
+++ b/minilibx/mlx_init.c
@@ -0,0 +1,91 @@
+/*
+** mlx_init.c for MiniLibX in
+**
+** Made by Charlie Root
+** Login <ol@epitech.net>
+**
+** Started on Mon Jul 31 16:52:42 2000 Charlie Root
+** Last update Fri Jan 28 17:05:09 2005 Olivier Crouzet
+*/
+
+
+#include "mlx_int.h"
+
+
+
+void *mlx_init()
+{
+ t_xvar *xvar;
+
+ if (!(xvar = malloc(sizeof(*xvar))) || (xvar->display = XOpenDisplay(""))==0)
+ return ((void *)0);
+ xvar->screen = DefaultScreen(xvar->display);
+ xvar->root = DefaultRootWindow(xvar->display);
+ xvar->cmap = DefaultColormap(xvar->display,xvar->screen);
+ xvar->depth = DefaultDepth(xvar->display,xvar->screen);
+ if (mlx_int_get_visual(xvar)==-1)
+ {
+ printf(ERR_NO_TRUECOLOR);
+ exit(1);
+ }
+ xvar->win_list = 0;
+ xvar->loop_hook = 0;
+ xvar->loop_param = (void *)0;
+ xvar->do_flush = 1;
+ mlx_int_deal_shm(xvar);
+ if (xvar->private_cmap)
+ xvar->cmap = XCreateColormap(xvar->display,xvar->root,
+ xvar->visual,AllocNone);
+ mlx_int_rgb_conversion(xvar);
+ return (xvar);
+}
+
+
+/*
+** pshm_format of -1 : Not XYBitmap|XYPixmap|ZPixmap
+** alpha libX need a check of the DISPLAY env var, or shm is allowed
+** in remote Xserver connections.
+*/
+
+int mlx_int_deal_shm(t_xvar *xvar)
+{
+ int use_pshm;
+ int bidon;
+ char *dpy;
+ char buff[33];
+
+ xvar->use_xshm = XShmQueryVersion(xvar->display,&bidon,&bidon,&(use_pshm));
+ if (xvar->use_xshm && use_pshm)
+ xvar->pshm_format = XShmPixmapFormat(xvar->display);
+ else
+ xvar->pshm_format = -1;
+ gethostname(buff,32);
+ dpy = getenv(ENV_DISPLAY);
+ if (dpy && strlen(dpy) && *dpy!=':' && strncmp(dpy,buff,strlen(buff)) &&
+ strncmp(dpy,LOCALHOST,strlen(LOCALHOST)) )
+ {
+ xvar->pshm_format = -1;
+ xvar->use_xshm = 0;
+ }
+}
+
+/*
+** TrueColor Visual is needed to have *_mask correctly set
+*/
+
+int mlx_int_rgb_conversion(t_xvar *xvar)
+{
+ bzero(xvar->decrgb,sizeof(int)*6);
+ while (!(xvar->visual->red_mask&1))
+ { xvar->visual->red_mask >>= 1; xvar->decrgb[0] ++; }
+ while (xvar->visual->red_mask&1)
+ { xvar->visual->red_mask >>= 1; xvar->decrgb[1] ++; }
+ while (!(xvar->visual->green_mask&1))
+ { xvar->visual->green_mask >>= 1; xvar->decrgb[2] ++; }
+ while (xvar->visual->green_mask&1)
+ { xvar->visual->green_mask >>= 1; xvar->decrgb[3] ++; }
+ while (!(xvar->visual->blue_mask&1))
+ { xvar->visual->blue_mask >>= 1; xvar->decrgb[4] ++; }
+ while (xvar->visual->blue_mask&1)
+ { xvar->visual->blue_mask >>= 1; xvar->decrgb[5] ++; }
+}
diff --git a/minilibx/mlx_init_loop.m b/minilibx/mlx_init_loop.m
deleted file mode 100644
index 0377771..0000000
--- a/minilibx/mlx_init_loop.m
+++ /dev/null
@@ -1,192 +0,0 @@
-// mlx_init_loop.m
-// By Ol
-
-#import <Cocoa/Cocoa.h>
-#import <OpenGL/gl3.h>
-#import <AppKit/NSOpenGLView.h>
-
-#include "mlx_int.h"
-#include "mlx_new_window.h"
-
-#include "font.c"
-
-
-void do_loop_hook2(CFRunLoopTimerRef observer, void * info)
-{
- ((mlx_ptr_t *)info)->loop_hook(((mlx_ptr_t *)info)->loop_hook_data);
-}
-
-
-void do_loop_flush(CFRunLoopObserverRef observer, CFRunLoopActivity activity, void * info)
-{
- mlx_ptr_t *mlx_ptr;
- mlx_win_list_t *win;
-
- mlx_ptr = (mlx_ptr_t *)info;
- win = mlx_ptr->win_list;
- while (win)
- {
- if (win->nb_flush > 0 && win->pixmgt)
- {
- [(id)win->winid selectGLContext];
- [(id)win->winid mlx_gl_draw];
- glFlush();
- win->nb_flush = 0;
- }
- win = win->next;
- }
-}
-
-
-
-
-void *mlx_init()
-{
- mlx_ptr_t *new_mlx;
- int bidon;
- int i;
-
- if ((new_mlx = malloc(sizeof(*new_mlx))) == NULL)
- return ((void *)0);
- new_mlx->win_list = NULL;
- new_mlx->img_list = NULL;
- new_mlx->loop_hook = NULL;
- new_mlx->loop_hook_data = NULL;
- new_mlx->main_loop_active = 0;
-
- new_mlx->appid = [NSApplication sharedApplication];
-
- // super magic trick to detach app from terminal, get menubar & key input events
- for (NSRunningApplication * app in [NSRunningApplication runningApplicationsWithBundleIdentifier:@"com.apple.finder"])
- {
- [app activateWithOptions:NSApplicationActivateIgnoringOtherApps];
- break;
- }
- usleep(100000);
- ProcessSerialNumber psn = { 0, kCurrentProcess };
- (void) TransformProcessType(&psn, kProcessTransformToForegroundApplication);
- usleep(100000);
- [[NSRunningApplication currentApplication] activateWithOptions:NSApplicationActivateIgnoringOtherApps];
-
- // load font
- new_mlx->font = mlx_new_image(new_mlx, (FONT_WIDTH+2)*95, FONT_HEIGHT);
- i = 0;
- while (i < 4*(FONT_WIDTH+2)*95*FONT_HEIGHT)
- {
- new_mlx->font->buffer[i+0] = font_atlas.pixel_data[i+2];
- new_mlx->font->buffer[i+1] = font_atlas.pixel_data[i+1];
- new_mlx->font->buffer[i+2] = font_atlas.pixel_data[i+0];
- ((unsigned char *)new_mlx->font->buffer)[i+3] = 0xFF-font_atlas.pixel_data[i+3];
- i += 4;
- }
-
-
-#ifdef STRINGPUTX11
- new_mlx->font->vertexes[2] = FONT_WIDTH/1.4;
- new_mlx->font->vertexes[4] = FONT_WIDTH/1.4;
- new_mlx->font->vertexes[5] = (-FONT_HEIGHT-1)/1.4;
- new_mlx->font->vertexes[7] = (-FONT_HEIGHT-1)/1.4;
-#else
- new_mlx->font->vertexes[2] = FONT_WIDTH;
- new_mlx->font->vertexes[4] = FONT_WIDTH;
- new_mlx->font->vertexes[5] = -FONT_HEIGHT-1;
- new_mlx->font->vertexes[7] = -FONT_HEIGHT-1;
-#endif
-
- return ((void *)new_mlx);
-}
-
-
-void mlx_loop(mlx_ptr_t *mlx_ptr)
-{
- CFRunLoopObserverRef observer;
- CFRunLoopObserverContext ocontext = {.version = 0, .info = mlx_ptr, .retain = NULL, .release = NULL, .copyDescription = NULL};
-
- mlx_ptr->main_loop_active = 1;
-
- observer = CFRunLoopObserverCreate(NULL, kCFRunLoopBeforeTimers, true, 0, do_loop_flush, &ocontext);
- CFRunLoopAddObserver(CFRunLoopGetMain(), observer, kCFRunLoopCommonModes);
-
- // [[[MlxLoopHookObj alloc] initWithPtr:mlx_ptr] performSelector:@selector(do_loop_hook) withObject:nil afterDelay:0.0];
-
- [NSApp run];
-}
-
-
-void mlx_pixel_put(mlx_ptr_t *mlx_ptr, mlx_win_list_t *win_ptr, int x, int y, int color)
-{
- if (!win_ptr->pixmgt)
- return ;
- [(id)(win_ptr->winid) selectGLContext];
- [(id)(win_ptr->winid) pixelPutColor:color X:x Y:y];
- win_ptr->nb_flush ++;
-}
-
-
-void mlx_int_loop_once()
-{
- NSEvent *event;
- NSDate *thedate;
-
- thedate = [NSDate dateWithTimeIntervalSinceNow:0.1];
- while (42)
- {
- event = [NSApp nextEventMatchingMask:NSEventMaskAny
- untilDate:thedate
- inMode:NSDefaultRunLoopMode
- dequeue:YES];
- if (event == nil)
- {
- [thedate release];
- return ;
- }
- [NSApp sendEvent:event];
- [NSApp updateWindows];
- }
-}
-
-
-int mlx_do_sync(mlx_ptr_t *mlx_ptr)
-{
- mlx_win_list_t *win;
-
- win = mlx_ptr->win_list;
- while (win)
- {
- if (win->pixmgt)
- {
- [(id)(win->winid) selectGLContext];
- [(id)(win->winid) mlx_gl_draw];
- glFlush();
- if (!mlx_ptr->main_loop_active)
- mlx_int_loop_once();
- }
- win = win->next;
- }
- return (0);
-}
-
-
-int mlx_loop_hook(mlx_ptr_t *mlx_ptr, void (*fct)(void *), void *param)
-{
- CFRunLoopTimerContext tcontext = {0, mlx_ptr, NULL, NULL, NULL};
- CFRunLoopTimerRef timer;
-
- if (mlx_ptr->loop_hook != NULL)
- {
- CFRunLoopTimerInvalidate(mlx_ptr->loop_timer);
- [(id)(mlx_ptr->loop_timer) release];
- }
-
- mlx_ptr->loop_hook = fct;
- mlx_ptr->loop_hook_data = param;
-
- if (fct)
- {
- timer = CFRunLoopTimerCreate(kCFAllocatorDefault, 0.0, 0.0001, 0, 0, &do_loop_hook2, &tcontext);
- mlx_ptr->loop_timer = timer;
- CFRunLoopAddTimer(CFRunLoopGetMain(), timer, kCFRunLoopCommonModes);
- }
-
- return (0);
-}
diff --git a/minilibx/mlx_int.h b/minilibx/mlx_int.h
index a93c1c9..8cadead 100644..100755
--- a/minilibx/mlx_int.h
+++ b/minilibx/mlx_int.h
@@ -1,102 +1,137 @@
-//
-// mlx_int.h for minilibx
-//
-// ol@staff.42.fr
-//
-// include opengl needed before mlx_int.h
-//
+/*
+** mlx_int.h for mlx in
+**
+** Made by Charlie Root
+** Login <ol@epitech.net>
+**
+** Started on Mon Jul 31 16:45:48 2000 Charlie Root
+** Last update Wed May 25 16:44:16 2011 Olivier Crouzet
+*/
-#define MAX_EVENT 32
-#define MAX_PIXEL_NB 200000
-#define UNIQ_BPP 4
-#define FONT_WIDTH 10
-#define FONT_HEIGHT 20
+/*
+** Internal settings for MiniLibX
+*/
-typedef int (*func_t)();
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/mman.h>
+#include <X11/Xlib.h>
+#include <X11/XKBlib.h>
+#include <X11/Xutil.h>
+#include <sys/ipc.h>
+#include <sys/shm.h>
+#include <X11/extensions/XShm.h>
+#include <bsd/bsd.h>
+/* #include <X11/xpm.h> */
-/* structs */
-typedef struct glsl_info_s
-{
- GLuint pixel_vshader;
- GLuint pixel_fshader;
- GLuint pixel_program;
- GLint loc_pixel_position;
- GLint loc_pixel_texture;
- GLint loc_pixel_winhalfsize;
-
- GLuint image_vshader;
- GLuint image_fshader;
- GLuint image_program;
- GLint loc_image_position;
- GLint loc_image_winhalfsize;
- GLint loc_image_texture;
- GLint loc_image_pos;
- GLint loc_image_size;
-
- GLuint font_vshader;
- GLuint font_fshader;
- GLuint font_program;
- GLint loc_font_position;
- GLint loc_font_winhalfsize;
- GLint loc_font_texture;
- GLint loc_font_color;
- GLint loc_font_posinwin;
- GLint loc_font_posinatlas;
- GLint loc_font_atlassize;
-} glsl_info_t;
-
-
-typedef struct mlx_img_list_s
+#define MLX_TYPE_SHM_PIXMAP 3
+#define MLX_TYPE_SHM 2
+#define MLX_TYPE_XIMAGE 1
+
+#define MLX_MAX_EVENT LASTEvent
+
+
+#define ENV_DISPLAY "DISPLAY"
+#define LOCALHOST "localhost"
+#define ERR_NO_TRUECOLOR "MinilibX Error : No TrueColor Visual available.\n"
+#define WARN_SHM_ATTACH "MinilibX Warning : X server can't attach shared memory.\n"
+
+
+typedef struct s_xpm_col
{
- int width;
- int height;
- char *buffer;
- GLfloat vertexes[8];
- struct mlx_img_list_s *next;
-} mlx_img_list_t;
+ int name;
+ int col;
+} t_xpm_col;
-typedef struct mlx_img_ctx_s
+struct s_col_name
{
- GLuint texture;
- GLuint vbuffer;
- mlx_img_list_t *img;
- struct mlx_img_ctx_s *next;
-} mlx_img_ctx_t;
+ char *name;
+ int color;
+};
-typedef struct mlx_win_list_s
+typedef struct s_event_list
{
- void *winid;
- mlx_img_ctx_t *img_list;
- int nb_flush;
- int pixmgt;
- struct mlx_win_list_s *next;
-} mlx_win_list_t;
+ int mask;
+ int (*hook)();
+ void *param;
+} t_event_list;
-typedef struct mlx_ptr_s
+typedef struct s_win_list
+{
+ Window window;
+ GC gc;
+ struct s_win_list *next;
+ int (*mouse_hook)();
+ int (*key_hook)();
+ int (*expose_hook)();
+ void *mouse_param;
+ void *key_param;
+ void *expose_param;
+ t_event_list hooks[MLX_MAX_EVENT];
+} t_win_list;
+
+
+typedef struct s_img
+{
+ XImage *image;
+ Pixmap pix;
+ GC gc;
+ int size_line;
+ int bpp;
+ int width;
+ int height;
+ int type;
+ int format;
+ char *data;
+ XShmSegmentInfo shm;
+} t_img;
+
+typedef struct s_xvar
{
- void *appid;
- mlx_win_list_t *win_list;
- mlx_img_list_t *img_list;
- void (*loop_hook)(void *);
- void *loop_hook_data;
- void *loop_timer;
- mlx_img_list_t *font;
- int main_loop_active;
-} mlx_ptr_t;
-
-// proto
-
-int mlx_shaders(glsl_info_t *glsl);
-char **mlx_int_str_to_wordtab(char *str);
-int mlx_int_str_str(char *str,char *find,int len);
-int mlx_int_str_str_cote(char *str,char *find,int len);
-int mlx_destroy_image(mlx_ptr_t *mlx_ptr, mlx_img_list_t *img_ptr);
+ Display *display;
+ Window root;
+ int screen;
+ int depth;
+ Visual *visual;
+ Colormap cmap;
+ int private_cmap;
+ t_win_list *win_list;
+ int (*loop_hook)();
+ void *loop_param;
+ int use_xshm;
+ int pshm_format;
+ int do_flush;
+ int decrgb[6];
+} t_xvar;
+
+
+int mlx_int_do_nothing();
+int mlx_int_get_good_color();
+int mlx_int_find_in_pcm();
+int mlx_int_anti_resize_win();
+int mlx_int_wait_first_expose();
+int mlx_int_rgb_conversion();
+int mlx_int_deal_shm();
+void *mlx_int_new_xshm_image();
+char **mlx_int_str_to_wordtab();
void *mlx_new_image();
-void *mlx_xpm_to_image(mlx_ptr_t *xvar,char **xpm_data,int *width,int *height);
-int mlx_do_sync(mlx_ptr_t *mlx_ptr);
+int shm_att_pb();
+
+/*
+** Added
+*/
+
+int mlx_int_str_str(char *str,char *find,int len);
+int mlx_int_get_visual(t_xvar *xvar);
+int mlx_int_set_win_event_mask(t_xvar *xvar);
+int mlx_get_color_value(t_xvar *xvar,int color);
+int mlx_int_str_str_cote(char *str,char *find,int len);
diff --git a/minilibx/mlx_int_anti_resize_win.c b/minilibx/mlx_int_anti_resize_win.c
new file mode 100755
index 0000000..2f20b44
--- /dev/null
+++ b/minilibx/mlx_int_anti_resize_win.c
@@ -0,0 +1,28 @@
+/*
+** mlx_int_anti_resize_win.c for MiniLibX in
+**
+** Made by Charlie Root
+** Login <ol@epitech.net>
+**
+** Started on Tue Aug 8 14:31:05 2000 Charlie Root
+** Last update Tue Sep 25 15:56:58 2001 Charlie Root
+*/
+
+#include "mlx_int.h"
+
+
+int mlx_int_anti_resize_win(t_xvar *xvar,Window win,int w,int h)
+{
+ XSizeHints hints;
+ long toto;
+
+ XGetWMNormalHints(xvar->display,win,&hints,&toto);
+ hints.width = w;
+ hints.height = h;
+ hints.min_width = w;
+ hints.min_height = h;
+ hints.max_width = w;
+ hints.max_height = h;
+ hints.flags = PPosition | PSize | PMinSize | PMaxSize;
+ XSetWMNormalHints(xvar->display,win,&hints);
+}
diff --git a/minilibx/mlx_int_do_nothing.c b/minilibx/mlx_int_do_nothing.c
new file mode 100755
index 0000000..49524e4
--- /dev/null
+++ b/minilibx/mlx_int_do_nothing.c
@@ -0,0 +1,16 @@
+/*
+** mlx_int_do_nothing.c for MiniLibX in
+**
+** Made by Charlie Root
+** Login <ol@epitech.net>
+**
+** Started on Tue Aug 8 12:58:24 2000 Charlie Root
+** Last update Tue Sep 25 15:56:22 2001 Charlie Root
+*/
+
+
+
+int mlx_int_do_nothing(void *param)
+{
+
+}
diff --git a/minilibx/mlx_int_get_visual.c b/minilibx/mlx_int_get_visual.c
new file mode 100755
index 0000000..440a7ca
--- /dev/null
+++ b/minilibx/mlx_int_get_visual.c
@@ -0,0 +1,39 @@
+/*
+** mlx_int_get_visual.c for MinilibX in
+**
+** Made by Charlie Root
+** Login <ol@epitech.net>
+**
+** Started on Wed Oct 3 17:01:51 2001 Charlie Root
+** Last update Thu Oct 4 15:00:45 2001 Charlie Root
+*/
+
+
+
+#include "mlx_int.h"
+
+
+/*
+** We need a private colormap for non-default Visual.
+*/
+
+
+int mlx_int_get_visual(t_xvar *xvar)
+{
+ XVisualInfo *vi;
+ XVisualInfo template;
+ int nb_item;
+
+ xvar->private_cmap = 0;
+ xvar->visual = DefaultVisual(xvar->display,xvar->screen);
+ if (xvar->visual->class == TrueColor)
+ return (0);
+ template.class = TrueColor;
+ template.depth = xvar->depth;
+ if (!(vi = XGetVisualInfo(xvar->display,VisualDepthMask|VisualClassMask,
+ &template,&nb_item)) )
+ return (-1);
+ xvar->visual = vi->visual;
+ xvar->private_cmap = 1;
+ return (0);
+}
diff --git a/minilibx/mlx_int_param_event.c b/minilibx/mlx_int_param_event.c
new file mode 100755
index 0000000..37f27e6
--- /dev/null
+++ b/minilibx/mlx_int_param_event.c
@@ -0,0 +1,100 @@
+/*
+** mlx_int_param_event.c for MinilibX in
+**
+** Made by Charlie Root
+** Login <ol@epitech.net>
+**
+** Started on Mon Jul 31 16:37:50 2000 Charlie Root
+** Last update Wed Oct 6 13:14:52 2004 Olivier Crouzet
+*/
+
+#include "mlx_int.h"
+
+int mlx_int_param_undef()
+{
+}
+
+int mlx_int_param_KeyPress(t_xvar *xvar, XEvent *ev, t_win_list *win)
+{
+ win->hooks[KeyPress].hook(XkbKeycodeToKeysym(xvar->display,
+ ev->xkey.keycode, 0, 0),
+ win->hooks[KeyPress].param);
+}
+
+int mlx_int_param_KeyRelease(t_xvar *xvar, XEvent *ev, t_win_list *win)
+{
+ win->hooks[KeyRelease].hook(XkbKeycodeToKeysym(xvar->display,
+ ev->xkey.keycode, 0, 0),
+ win->hooks[KeyRelease].param);
+}
+
+int mlx_int_param_ButtonPress(t_xvar *xvar, XEvent *ev, t_win_list *win)
+{
+ win->hooks[ButtonPress].hook(ev->xbutton.button,ev->xbutton.x,ev->xbutton.y,
+ win->hooks[ButtonPress].param);
+}
+
+int mlx_int_param_ButtonRelease(t_xvar *xvar, XEvent *ev, t_win_list *win)
+{
+ win->hooks[ButtonRelease].hook(ev->xbutton.button,
+ ev->xbutton.x, ev->xbutton.y,
+ win->hooks[ButtonRelease].param);
+}
+
+int mlx_int_param_MotionNotify(t_xvar *xvar, XEvent *ev, t_win_list *win)
+{
+ win->hooks[MotionNotify].hook(ev->xbutton.x,ev->xbutton.y,
+ win->hooks[MotionNotify].param);
+}
+
+int mlx_int_param_Expose(t_xvar *xvar, XEvent *ev, t_win_list *win)
+{
+ if (!ev->xexpose.count)
+ win->hooks[Expose].hook(win->hooks[Expose].param);
+}
+
+
+int mlx_int_param_generic(t_xvar *xvar, XEvent *ev, t_win_list *win)
+{
+ win->hooks[ev->type].hook(win->hooks[ev->type].param);
+}
+
+int (*(mlx_int_param_event[]))() =
+{
+ mlx_int_param_undef, /* 0 */
+ mlx_int_param_undef,
+ mlx_int_param_KeyPress,
+ mlx_int_param_KeyRelease, /* 3 */
+ mlx_int_param_ButtonPress,
+ mlx_int_param_ButtonRelease,
+ mlx_int_param_MotionNotify, /* 6 */
+ mlx_int_param_generic,
+ mlx_int_param_generic,
+ mlx_int_param_generic,
+ mlx_int_param_generic,
+ mlx_int_param_generic,
+ mlx_int_param_Expose, /* 12 */
+ mlx_int_param_generic,
+ mlx_int_param_generic,
+ mlx_int_param_generic,
+ mlx_int_param_generic,
+ mlx_int_param_generic,
+ mlx_int_param_generic,
+ mlx_int_param_generic,
+ mlx_int_param_generic,
+ mlx_int_param_generic,
+ mlx_int_param_generic,
+ mlx_int_param_generic,
+ mlx_int_param_generic,
+ mlx_int_param_generic,
+ mlx_int_param_generic,
+ mlx_int_param_generic,
+ mlx_int_param_generic,
+ mlx_int_param_generic,
+ mlx_int_param_generic,
+ mlx_int_param_generic,
+ mlx_int_param_generic,
+ mlx_int_param_generic,
+ mlx_int_param_generic,
+ mlx_int_param_generic
+};
diff --git a/minilibx/mlx_int_set_win_event_mask.c b/minilibx/mlx_int_set_win_event_mask.c
new file mode 100755
index 0000000..55650cd
--- /dev/null
+++ b/minilibx/mlx_int_set_win_event_mask.c
@@ -0,0 +1,34 @@
+/*
+** mlx_int_set_win_event_mask.c for MiniLibX in
+**
+** Made by Charlie Root
+** Login <ol@epitech.net>
+**
+** Started on Thu Aug 3 11:49:06 2000 Charlie Root
+** Last update Fri Feb 23 17:07:42 2001 Charlie Root
+*/
+
+
+#include "mlx_int.h"
+
+
+
+
+int mlx_int_set_win_event_mask(t_xvar *xvar)
+{
+ t_win_list *win;
+ int mask;
+ int i;
+ XSetWindowAttributes xwa;
+
+ win = xvar->win_list;
+ while (win)
+ {
+ xwa.event_mask = 0;
+ i = MLX_MAX_EVENT;
+ while (i--)
+ xwa.event_mask |= win->hooks[i].mask;
+ XChangeWindowAttributes(xvar->display, win->window, CWEventMask, &xwa);
+ win = win->next;
+ }
+}
diff --git a/minilibx/mlx_int_str_to_wordtab.c b/minilibx/mlx_int_str_to_wordtab.c
index 3b2ef2e..7f92089 100644..100755
--- a/minilibx/mlx_int_str_to_wordtab.c
+++ b/minilibx/mlx_int_str_to_wordtab.c
@@ -1,10 +1,16 @@
-//
-// str 2 wordtab & co
-// by ol
+/*
+** mlx_int_str_to_wordtab.c for MinilibX in
+**
+** Made by Charlie Root
+** Login <ol@epitech.net>
+**
+** Started on Wed Sep 13 11:36:09 2000 Charlie Root
+** Last update Fri Dec 14 11:02:09 2001 Charlie Root
+*/
-#include <stdlib.h>
-#include <string.h>
+#include "mlx_int.h"
+
int mlx_int_str_str(char *str,char *find,int len)
{
diff --git a/minilibx/mlx_int_wait_first_expose.c b/minilibx/mlx_int_wait_first_expose.c
new file mode 100755
index 0000000..0d549ee
--- /dev/null
+++ b/minilibx/mlx_int_wait_first_expose.c
@@ -0,0 +1,23 @@
+/*
+** mlx_int_wait_first_expose.c for minilibx in
+**
+** Made by olivier crouzet
+** Login <ol@epita.fr>
+**
+** Started on Tue Oct 17 09:26:45 2000 olivier crouzet
+** Last update Fri Feb 23 17:27:10 2001 Charlie Root
+*/
+
+
+
+#include "mlx_int.h"
+
+
+
+int mlx_int_wait_first_expose(t_xvar *xvar,Window win)
+{
+ XEvent ev;
+
+ XWindowEvent(xvar->display,win,ExposureMask,&ev);
+ XPutBackEvent(xvar->display,&ev);
+}
diff --git a/minilibx/mlx_key_hook.c b/minilibx/mlx_key_hook.c
new file mode 100755
index 0000000..eea6484
--- /dev/null
+++ b/minilibx/mlx_key_hook.c
@@ -0,0 +1,22 @@
+/*
+** mlx_key_hook.c for MiniLibX in
+**
+** Made by Charlie Root
+** Login <ol@epitech.net>
+**
+** Started on Thu Aug 3 11:49:06 2000 Charlie Root
+** Last update Fri Feb 23 17:10:09 2001 Charlie Root
+*/
+
+
+#include "mlx_int.h"
+
+
+
+
+int mlx_key_hook(t_win_list *win,int (*funct)(),void *param)
+{
+ win->hooks[KeyRelease].hook = funct;
+ win->hooks[KeyRelease].param = param;
+ win->hooks[KeyRelease].mask = KeyReleaseMask;
+}
diff --git a/minilibx/mlx_lib_xpm.c b/minilibx/mlx_lib_xpm.c
new file mode 100755
index 0000000..4a3c5ad
--- /dev/null
+++ b/minilibx/mlx_lib_xpm.c
@@ -0,0 +1,96 @@
+/*
+** mlx_xpm.c for minilibX in
+**
+** Made by Charlie Root
+** Login <ol@epitech.net>
+**
+** Started on Fri Dec 8 11:07:24 2000 Charlie Root
+** Last update Thu Oct 4 16:00:22 2001 Charlie Root
+*/
+
+
+#include "mlx_int.h"
+
+
+
+
+void *mlx_int_xpm_f_image(t_xvar *xvar,int *width,int *height,
+ int (*xpm_func)(),void *param)
+{
+ XImage *img1;
+ XImage *img2;
+ t_img *im2;
+ XpmAttributes xpm_att;
+
+ xpm_att.visual = xvar->visual;
+ xpm_att.colormap = xvar->cmap;
+ xpm_att.depth = xvar->depth;
+ xpm_att.bitmap_format = ZPixmap;
+ xpm_att.valuemask = XpmDepth|XpmBitmapFormat|XpmVisual|XpmColormap;
+ if (xpm_func(xvar->display,param,&img1,&img2,&xpm_att))
+ return ((void *)0);
+ if (img2)
+ XDestroyImage(img2);
+
+ if (!(im2 = (void *)mlx_new_image(xvar,img1->width,img1->height)))
+ {
+ XDestroyImage(img1);
+ return ((void *)0);
+ }
+ *width = img1->width;
+ *height = img1->height;
+ if (mlx_int_egal_img(im2->image,img1))
+ {
+ bcopy(img1->data,im2->data,img1->height*img1->bytes_per_line);
+ XDestroyImage(img1);
+ return (im2);
+ }
+ if (im2->type==MLX_TYPE_SHM_PIXMAP)
+ {
+ XFreePixmap(xvar->display,im2->pix);
+ im2->pix = XCreatePixmap(xvar->display,xvar->root,
+ *width,*height,xvar->depth);
+ }
+ if (im2->type>MLX_TYPE_XIMAGE)
+ {
+ XShmDetach(xvar->display,&(im2->shm));
+ shmdt(im2->data);
+ }
+ XDestroyImage(im2->image);
+ im2->image = img1;
+ im2->data = img1->data;
+ im2->type = MLX_TYPE_XIMAGE;
+ im2->size_line = img1->bytes_per_line;
+ im2->bpp = img1->bits_per_pixel;
+ return (im2);
+}
+
+
+int mlx_int_egal_img(XImage *img1,XImage *img2)
+{
+ if (img1->width!=img2->width || img1->height!=img2->height ||
+ img1->xoffset!=img2->xoffset || img1->format!=img2->format ||
+ img1->byte_order!=img2->byte_order ||
+ img1->bitmap_unit!=img2->bitmap_unit ||
+ img1->bitmap_bit_order!=img2->bitmap_bit_order ||
+ img1->bitmap_pad!=img2->bitmap_pad || img1->depth!=img2->depth ||
+ img1->bytes_per_line!=img2->bytes_per_line ||
+ img1->bits_per_pixel!=img2->bits_per_pixel ||
+ img1->red_mask!=img2->red_mask || img1->green_mask!=img2->green_mask ||
+ img1->blue_mask!=img2->blue_mask )
+ return (0);
+ return (1);
+}
+
+
+void *mlx_xpm_file_to_image(t_xvar *xvar,char const *filename,
+ int *width,int *height)
+{
+ return (mlx_int_xpm_f_image(xvar,width,height,XpmReadFileToImage,filename));
+}
+
+
+void *mlx_xpm_to_image(t_xvar *xvar,char **data,int *width,int *height)
+{
+ return (mlx_int_xpm_f_image(xvar,width,height,XpmCreateImageFromData,(void *)data));
+}
diff --git a/minilibx/mlx_loop.c b/minilibx/mlx_loop.c
new file mode 100755
index 0000000..74af0a5
--- /dev/null
+++ b/minilibx/mlx_loop.c
@@ -0,0 +1,38 @@
+/*
+** mlx_loop.c for MiniLibX in
+**
+** Made by Charlie Root
+** Login <ol@epitech.net>
+**
+** Started on Wed Aug 2 18:58:11 2000 Charlie Root
+** Last update Fri Sep 30 14:47:41 2005 Olivier Crouzet
+*/
+
+
+#include "mlx_int.h"
+
+extern int (*(mlx_int_param_event[]))();
+
+
+int mlx_loop(t_xvar *xvar)
+{
+ XEvent ev;
+ t_win_list *win;
+
+ mlx_int_set_win_event_mask(xvar);
+ xvar->do_flush = 0;
+ while (42)
+ {
+ while (!xvar->loop_hook || XPending(xvar->display))
+ {
+ XNextEvent(xvar->display,&ev);
+ win = xvar->win_list;
+ while (win && (win->window!=ev.xany.window))
+ win = win->next;
+ if (win && ev.type < MLX_MAX_EVENT)
+ if (win->hooks[ev.type].hook)
+ mlx_int_param_event[ev.type](xvar, &ev, win);
+ }
+ xvar->loop_hook(xvar->loop_param);
+ }
+}
diff --git a/minilibx/mlx_loop_hook.c b/minilibx/mlx_loop_hook.c
new file mode 100755
index 0000000..1f8b9ed
--- /dev/null
+++ b/minilibx/mlx_loop_hook.c
@@ -0,0 +1,21 @@
+/*
+** mlx_loop_hook.c for MiniLibX in
+**
+** Made by Charlie Root
+** Login <ol@epitech.net>
+**
+** Started on Thu Aug 3 11:49:06 2000 Charlie Root
+** Last update Fri Feb 23 17:11:39 2001 Charlie Root
+*/
+
+
+#include "mlx_int.h"
+
+
+
+
+int mlx_loop_hook(t_xvar *xvar,int (*funct)(),void *param)
+{
+ xvar->loop_hook = funct;
+ xvar->loop_param = param;
+}
diff --git a/minilibx/mlx_mouse.m b/minilibx/mlx_mouse.m
deleted file mode 100644
index 94ce0a9..0000000
--- a/minilibx/mlx_mouse.m
+++ /dev/null
@@ -1,52 +0,0 @@
-#include <stdio.h>
-
-#import <Cocoa/Cocoa.h>
-#import <OpenGL/gl3.h>
-
-#include "mlx_int.h"
-#include "mlx_new_window.h"
-
-int mlx_mouse_hide()
-{
- // CGDisplayHideCursor(kCGDirectMainDisplay);
- [NSCursor hide];
- return (0);
-}
-
-int mlx_mouse_show()
-{
- // CGDisplayShowCursor(kCGDirectMainDisplay);
- [NSCursor unhide];
- return (0);
-}
-
-int mlx_mouse_move(mlx_win_list_t *win, int x, int y)
-{
- CGPoint point;
- NSRect pos;
- id thewin;
-
- thewin = [(id)(win->winid) win];
- pos = [thewin frame];
- // printf("got win pos %f %f\n", pos.origin.x, pos.origin.y);
- point.x = pos.origin.x + x;
- point.y = NSHeight([[thewin screen] frame]) - NSHeight([(id)(win->winid) frame]) - pos.origin.y + 1 + y;
- CGWarpMouseCursorPosition(point);
- CGAssociateMouseAndMouseCursorPosition(true);
- return (0);
-}
-
-
-int mlx_mouse_get_pos(mlx_win_list_t *win, int *x, int *y)
-{
- CGPoint point;
- id thewin;
- NSRect pos;
-
- thewin = [(id)(win->winid) win];
- pos = [(id)(win->winid) frame];
- point = [thewin mouseLocationOutsideOfEventStream];
- *x = point.x;
- *y = NSHeight(pos) - 1 - point.y;
- return (0);
-}
diff --git a/minilibx/mlx_mouse_hook.c b/minilibx/mlx_mouse_hook.c
new file mode 100755
index 0000000..cb567ab
--- /dev/null
+++ b/minilibx/mlx_mouse_hook.c
@@ -0,0 +1,22 @@
+/*
+** mlx_mouse_hook.c for MiniLibX in
+**
+** Made by Charlie Root
+** Login <ol@epitech.net>
+**
+** Started on Thu Aug 3 11:49:06 2000 Charlie Root
+** Last update Fri Feb 23 17:11:05 2001 Charlie Root
+*/
+
+
+#include "mlx_int.h"
+
+
+
+
+int mlx_mouse_hook(t_win_list *win,int (*funct)(),void *param)
+{
+ win->hooks[ButtonPress].hook = funct;
+ win->hooks[ButtonPress].param = param;
+ win->hooks[ButtonPress].mask = ButtonPressMask;
+}
diff --git a/minilibx/mlx_new_image.c b/minilibx/mlx_new_image.c
new file mode 100755
index 0000000..9967401
--- /dev/null
+++ b/minilibx/mlx_new_image.c
@@ -0,0 +1,155 @@
+/*
+** mlx_new_image.c for MiniLibX in raytraceur
+**
+** Made by Charlie Root
+** Login <ol@epitech.net>
+**
+** Started on Mon Aug 14 15:29:14 2000 Charlie Root
+** Last update Wed May 25 16:46:31 2011 Olivier Crouzet
+*/
+
+
+
+
+#include "mlx_int.h"
+
+/*
+** To handle X errors
+*/
+
+#define X_ShmAttach 1
+
+int mlx_X_error;
+
+int shm_att_pb(Display *d,XErrorEvent *ev)
+{
+ if (ev->request_code==146 && ev->minor_code==X_ShmAttach)
+ write(2,WARN_SHM_ATTACH,strlen(WARN_SHM_ATTACH));
+ mlx_X_error = 1;
+}
+
+
+/*
+** Data malloc : width+32 ( bitmap_pad=32 ), *4 = *32 / 8bit
+*/
+
+
+void *mlx_int_new_xshm_image(t_xvar *xvar,int width,int height,int format)
+{
+ t_img *img;
+ int (*save_handler)();
+
+ if (!(img = malloc(sizeof(*img))))
+ return ((void *)0);
+ bzero(img,sizeof(*img));
+ img->data = 0;
+ img->image = XShmCreateImage(xvar->display,xvar->visual,xvar->depth,
+ format,img->data,&(img->shm),width,height);
+ if (!img->image)
+ {
+ free(img);
+ return ((void *)0);
+ }
+ img->width = width;
+ img->height = height;
+ img->size_line = img->image->bytes_per_line;
+ img->bpp = img->image->bits_per_pixel;
+ img->format = format;
+ img->shm.shmid = shmget(IPC_PRIVATE,(width+32)*height*4,IPC_CREAT|0777);
+ if (img->shm.shmid==-1)
+ {
+ XDestroyImage(img->image);
+ free(img);
+ return ((void *)0);
+ }
+ img->data = img->shm.shmaddr = img->image->data = shmat(img->shm.shmid,0,0);
+ if (img->data==(void *)-1)
+ {
+ shmctl(img->shm.shmid,IPC_RMID,0);
+ XDestroyImage(img->image);
+ free(img);
+ return ((void *)0);
+ }
+ img->shm.readOnly = False;
+ mlx_X_error = 0;
+ save_handler = XSetErrorHandler(shm_att_pb);
+ if (!XShmAttach(xvar->display,&(img->shm)) ||
+ 0&XSync(xvar->display,False) || mlx_X_error)
+ {
+ XSetErrorHandler(save_handler);
+ shmdt(img->data);
+ shmctl(img->shm.shmid,IPC_RMID,0);
+ XDestroyImage(img->image);
+ free(img);
+ return ((void *)0);
+ }
+ XSetErrorHandler(save_handler);
+ shmctl(img->shm.shmid,IPC_RMID,0);
+ if (xvar->pshm_format==format)
+ {
+ img->pix = XShmCreatePixmap(xvar->display,xvar->root,img->shm.shmaddr,
+ &(img->shm),width,height,xvar->depth);
+ img->type = MLX_TYPE_SHM_PIXMAP;
+ }
+ else
+ {
+ img->pix = XCreatePixmap(xvar->display,xvar->root,
+ width,height,xvar->depth);
+ img->type = MLX_TYPE_SHM;
+ }
+ if (xvar->do_flush)
+ XFlush(xvar->display);
+ return (img);
+}
+
+
+
+void *mlx_int_new_image(t_xvar *xvar,int width, int height,int format)
+{
+ t_img *img;
+
+ if (!(img = malloc(sizeof(*img))) ||
+ !(img->data = malloc((width+32)*height*4)))
+ return ((void *)0);
+ bzero(img->data,(width+32)*height*4);
+ img->image = XCreateImage(xvar->display,xvar->visual,xvar->depth,format,0,
+ img->data,width,height,32,0);
+ if (!img->image)
+ {
+ free(img->data);
+ free(img);
+ return ((void *)0);
+ }
+ img->gc = 0;
+ img->size_line = img->image->bytes_per_line;
+ img->bpp = img->image->bits_per_pixel;
+ img->width = width;
+ img->height = height;
+ img->pix = XCreatePixmap(xvar->display,xvar->root,width,height,xvar->depth);
+ img->format = format;
+ img->type = MLX_TYPE_XIMAGE;
+ if (xvar->do_flush)
+ XFlush(xvar->display);
+ return (img);
+}
+
+
+void *mlx_new_image(t_xvar *xvar,int width, int height)
+{
+ t_img *img;
+
+ if (xvar->use_xshm)
+ if (img = mlx_int_new_xshm_image(xvar,width,height,ZPixmap))
+ return (img);
+ return (mlx_int_new_image(xvar,width,height,ZPixmap));
+}
+
+void *mlx_new_image2(t_xvar *xvar,int width, int height)
+{
+ t_img *img;
+
+ if (xvar->use_xshm)
+ if (img = mlx_int_new_xshm_image(xvar,width,height,XYPixmap))
+ return (img);
+ return (mlx_int_new_image(xvar,width,height,XYPixmap));
+}
diff --git a/minilibx/mlx_new_image.m b/minilibx/mlx_new_image.m
deleted file mode 100644
index 46e1df1..0000000
--- a/minilibx/mlx_new_image.m
+++ /dev/null
@@ -1,198 +0,0 @@
-// mlx_new_image
-//
-// by Ol
-//
-
-
-#import <Cocoa/Cocoa.h>
-#import <OpenGL/gl3.h>
-
-#include "mlx_int.h"
-#include "mlx_new_window.h"
-
-
-
-void *mlx_new_image(mlx_ptr_t *mlx_ptr, int width, int height)
-{
- mlx_img_list_t *newimg;
-
- // if (mlx_ptr->win_list == NULL)
- // return (NULL); // need at leat one window created to have openGL context and create texture
- if ((newimg = malloc(sizeof(*newimg))) == NULL)
- return ((void *)0);
- newimg->next = mlx_ptr->img_list;
- mlx_ptr->img_list = newimg;
- newimg->width = width;
- newimg->height = height;
- newimg->vertexes[0] = 0.0; newimg->vertexes[1] = 0.0;
- newimg->vertexes[2] = width; newimg->vertexes[3] = 0.0;
- newimg->vertexes[4] = width; newimg->vertexes[5] = -height;
- newimg->vertexes[6] = 0.0; newimg->vertexes[7] = -height;
- newimg->buffer = malloc(UNIQ_BPP*width*height);
- bzero(newimg->buffer, UNIQ_BPP*width*height);
-
- return (newimg);
-}
-
-mlx_img_ctx_t *add_img_to_ctx(mlx_img_list_t *img, mlx_win_list_t *win)
-{
- mlx_img_ctx_t *imgctx;
-
- imgctx = win->img_list;
- while (imgctx)
- {
- if (imgctx->img == img)
- return (imgctx);
- imgctx = imgctx->next;
- }
-
- imgctx = malloc(sizeof(*imgctx));
- imgctx->img = img;
- imgctx->next = win->img_list;
- win->img_list = imgctx;
-
- glGenTextures(1, &(imgctx->texture));
- glBindTexture(GL_TEXTURE_2D, imgctx->texture);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- glTexImage2D(
- GL_TEXTURE_2D, 0, /* target, level of detail */
- GL_RGBA8, /* internal format */
- img->width, img->height, 0, /* width, height, border */
- GL_BGRA, GL_UNSIGNED_BYTE, /* external format, type */
- img->buffer /* pixels */
- );
-
- glGenBuffers(1, &(imgctx->vbuffer));
- glBindBuffer(GL_ARRAY_BUFFER, imgctx->vbuffer);
- glBufferData(GL_ARRAY_BUFFER, sizeof(img->vertexes), img->vertexes, GL_DYNAMIC_DRAW); // 4 points buff
-
- return (imgctx);
-}
-
-
-void mlx_put_image_to_window(mlx_ptr_t *mlx_ptr, mlx_win_list_t *win_ptr, mlx_img_list_t *img_ptr, int x, int y)
-{
- mlx_img_ctx_t *imgctx;
-
- if (!win_ptr->pixmgt)
- return ;
-
- [(id)(win_ptr->winid) selectGLContext];
- imgctx = add_img_to_ctx(img_ptr, win_ptr);
-
- // update texture
- glBindTexture(GL_TEXTURE_2D, imgctx->texture);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, img_ptr->width, img_ptr->height, 0,
- GL_BGRA, GL_UNSIGNED_BYTE, img_ptr->buffer);
-
- [(id)(win_ptr->winid) mlx_gl_draw_img:img_ptr andCtx:imgctx andX:x andY:y];
-
- win_ptr->nb_flush ++;
-}
-
-// assume here 32bpp little endian
-
-char *mlx_get_data_addr(mlx_img_list_t *img_ptr, int *bits_per_pixel, int *size_line, int *endian)
-{
- *bits_per_pixel = UNIQ_BPP*8;
- *size_line = img_ptr->width*UNIQ_BPP;
- *endian = 0; // little endian for now on mac-intel
- return (img_ptr->buffer);
-}
-
-unsigned int mlx_get_color_value(mlx_ptr_t *mlx_ptr, int color)
-{
- return (color);
-}
-
-int mlx_string_put(mlx_ptr_t *mlx_ptr, mlx_win_list_t *win_ptr, int x, int y, int color, unsigned char *string)
-{
- mlx_img_ctx_t *imgctx;
- int gX;
- int gY;
-
- if (!win_ptr->pixmgt)
- return(0);
-
-#ifdef STRINGPUTX11
- y -= (FONT_HEIGHT * 2)/3;
-#endif
-
- [(id)(win_ptr->winid) selectGLContext];
-
- imgctx = add_img_to_ctx(mlx_ptr->font, win_ptr);
-
- while (*string)
- {
- if (*string >= 32 && *string <= 127)
- {
- gX = (FONT_WIDTH+2)*(*string-32);
- gY = 0;
- // printf("put char %c pos %d %d\n", *string, gX, gY);
- [(id)(win_ptr->winid) mlx_gl_draw_font:mlx_ptr->font andCtx:imgctx andX:x andY:y andColor:color glyphX:gX glyphY:gY];
-#ifdef STRINGPUTX11
- x += FONT_WIDTH/1.4;
-#else
- x += FONT_WIDTH;
-#endif
- }
- string ++;
- }
-
- win_ptr->nb_flush ++;
-
- return (0);
-}
-
-int mlx_destroy_image(mlx_ptr_t *mlx_ptr, mlx_img_list_t *img_todel)
-{
- mlx_img_ctx_t ctx_first;
- mlx_img_ctx_t *ctx;
- mlx_img_ctx_t *ctx_to_del;
- mlx_img_list_t img_first;
- mlx_img_list_t *img;
- mlx_win_list_t *win;
-
- img_first.next = mlx_ptr->img_list;
- img = &img_first;
- while (img && img->next)
- {
- if (img->next == img_todel)
- img->next = img->next->next;
- img = img->next;
- }
- mlx_ptr->img_list = img_first.next;
-
-
- win = mlx_ptr->win_list;
- while (win)
- {
- ctx_first.next = win->img_list;
- ctx = &ctx_first;
- while (ctx && ctx->next)
- {
- if (ctx->next->img == img_todel)
- {
- [(id)(win->winid) selectGLContext];
- glDeleteBuffers(1, &(ctx->next->vbuffer));
- glDeleteTextures(1, &(ctx->next->texture));
- ctx_to_del = ctx->next;
- ctx->next = ctx->next->next;
- free(ctx_to_del);
- }
- ctx = ctx->next;
- }
- win->img_list = ctx_first.next;
- win = win->next;
- }
-
-
- free(img_todel->buffer);
- free(img_todel);
-
- // printf("destroy image done.\n");
- return (0);
-}
diff --git a/minilibx/mlx_new_window.c b/minilibx/mlx_new_window.c
new file mode 100755
index 0000000..c049285
--- /dev/null
+++ b/minilibx/mlx_new_window.c
@@ -0,0 +1,61 @@
+/*
+** mlx_new_window.c for MiniLibX in
+**
+** Made by Charlie Root
+** Login <ol@epitech.net>
+**
+** Started on Mon Jul 31 17:29:02 2000 Charlie Root
+** Last update Thu Oct 4 15:44:43 2001 Charlie Root
+*/
+
+
+/*
+** We do not use White/BlackPixel macro, TrueColor Visual make sure
+** 0 is black & -1 is white
+**
+** With mlx_int_wait_first_expose, no flush is needed.
+*/
+
+#include "mlx_int.h"
+
+
+void *mlx_new_window(t_xvar *xvar,int size_x,int size_y,char const *title)
+{
+ t_win_list *new_win;
+ XSetWindowAttributes xswa;
+ XGCValues xgcv;
+
+ xswa.background_pixel = 0;
+ xswa.border_pixel = -1;
+ xswa.colormap = xvar->cmap;
+ /*
+ xswa.event_mask = ButtonPressMask | ButtonReleaseMask | ExposureMask |
+ KeyPressMask | KeyReleaseMask | StructureNotifyMask;
+ */
+ /* xswa.event_mask = ExposureMask; */
+ xswa.event_mask = 0xFFFFFF; /* all events */
+ if (!(new_win = malloc(sizeof(*new_win))))
+ return ((void *)0);
+ new_win->window = XCreateWindow(xvar->display,xvar->root,0,0,size_x,size_y,
+ 0,CopyFromParent,InputOutput,xvar->visual,
+ CWEventMask|CWBackPixel|CWBorderPixel|
+ CWColormap,&xswa);
+ mlx_int_anti_resize_win(xvar,new_win->window,size_x,size_y);
+ XStoreName(xvar->display,new_win->window,title);
+ xgcv.foreground = -1;
+ xgcv.function = GXcopy;
+ xgcv.plane_mask = AllPlanes;
+ new_win->gc = XCreateGC(xvar->display,new_win->window,
+ GCFunction|GCPlaneMask|GCForeground,&xgcv);
+ new_win->next = xvar->win_list;
+ xvar->win_list = new_win;
+ /*
+ new_win->mouse_hook = mlx_int_do_nothing;
+ new_win->key_hook = mlx_int_do_nothing;
+ new_win->expose_hook = mlx_int_do_nothing;
+ */
+ bzero(&(new_win->hooks), sizeof(new_win->hooks));
+ XMapRaised(xvar->display,new_win->window);
+ mlx_int_wait_first_expose(xvar,new_win->window);
+ return (new_win);
+}
diff --git a/minilibx/mlx_new_window.h b/minilibx/mlx_new_window.h
deleted file mode 100644
index d173e61..0000000
--- a/minilibx/mlx_new_window.h
+++ /dev/null
@@ -1,57 +0,0 @@
-//
-// mlx_int.h for minilibx
-//
-// ol@staff.42.fr
-//
-// include opengl needed before mlx_int.h
-//
-
-#import <Cocoa/Cocoa.h>
-#import "mlx_int.h"
-
-@interface NSWindowEvent : NSWindow
-{
- func_t event_funct[MAX_EVENT];
- void *(event_param[MAX_EVENT]);
- int keyrepeat;
- int keyflag;
- int size_x;
- int size_y;
-}
-- (NSWindowEvent *) initWithContentRect:(NSRect)rect styleMask:(NSUInteger)winstyle backing:(NSBackingStoreType)bck defer:(BOOL) dfr;
-- (void) setEvent:(int)event andFunc:(func_t)func andParam:(void *)param;
-- (void) setKeyRepeat:(int)mode;
-- (void) exposeNotification:(NSNotification *)note;
-- (void) closeNotification:(NSNotification *)note;
-@end
-
-
-@interface MlxWin : NSOpenGLView
-{
- NSWindowEvent *win;
- NSOpenGLContext *ctx;
- glsl_info_t glsl;
- int openglwin;
-
- int size_x;
- int size_y;
-
- int pixel_nb;
- GLuint pixel_vbuffer;
- GLuint pixel_texture;
- unsigned int *pixtexbuff;
-}
-
-- (id) initWithRect: (NSRect)rect andTitle: (NSString *)title pfaAttrs: (NSOpenGLPixelFormatAttribute *)attrs;
-- (void) selectGLContext;
-- (void) flushGLContext;
-- (void) pixelPutColor: (int)color X:(int)x Y:(int)y;
-- (void) mlx_gl_draw;
-- (void) mlx_gl_draw_img:(mlx_img_list_t *)img andCtx:(mlx_img_ctx_t *)imgctx andX:(int)x andY:(int)y;
-- (void) mlx_gl_draw_font:(mlx_img_list_t *)img andCtx:(mlx_img_ctx_t *)imgctx andX:(int)x andY:(int)y andColor:(int)color glyphX:(int)gx glyphY:(int)gy;
-- (NSOpenGLContext *) ctx;
-- (NSWindowEvent *) win;
-- (void) setEvent:(int)event andFunc:(func_t)func andParam:(void *)param;
-- (void) setKeyRepeat:(int)mode;
-- (void) ctxNeedsUpdate;
-@end
diff --git a/minilibx/mlx_new_window.m b/minilibx/mlx_new_window.m
deleted file mode 100644
index 6d4fea4..0000000
--- a/minilibx/mlx_new_window.m
+++ /dev/null
@@ -1,766 +0,0 @@
-// mlx_new_window.m
-
-#import <Cocoa/Cocoa.h>
-#import <OpenGL/gl3.h>
-#import <AppKit/NSOpenGLView.h>
-
-#include <stdio.h>
-#include <math.h>
-
-#include "mlx_int.h"
-#include "mlx_new_window.h"
-
-
-NSOpenGLPixelFormatAttribute pfa_attrs[] =
- {
- NSOpenGLPFADepthSize, 32,
- NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersionLegacy,
- 0
- };
-
-static const GLfloat pixel_vertexes[8] =
- {
- -1.0 , -1.0,
- 1.0, -1.0,
- 1.0, 1.0,
- -1.0, 1.0
- };
-
-
-
-int get_mouse_button(NSEventType eventtype)
-{
- switch (eventtype) {
- case NSEventTypeLeftMouseDown:
- case NSEventTypeLeftMouseUp:
- case NSEventTypeLeftMouseDragged:
- return 1;
- case NSEventTypeRightMouseDown:
- case NSEventTypeRightMouseUp:
- case NSEventTypeRightMouseDragged:
- return 2;
- case NSEventTypeOtherMouseDown:
- case NSEventTypeOtherMouseUp:
- case NSEventTypeOtherMouseDragged:
- return 3;
- default:
- return 0;
- }
-}
-
-
-// classes for window & events
-
-
-
-
-@implementation NSWindowEvent
-
-- (NSWindowEvent *) initWithContentRect:(NSRect)rect styleMask:(NSUInteger)winstyle backing:(NSBackingStoreType)bck defer:(BOOL) dfr
-{
- int i;
-
- if ((self = [super initWithContentRect:rect
- styleMask:winstyle
- backing:bck
- defer:dfr]))
- {
- i = MAX_EVENT;
- while (i--)
- {
- event_funct[i] = NULL;
- event_param[i] = NULL;
- }
- keyrepeat = 0;
- keyflag = 0;
- size_x = rect.size.width;
- size_y = rect.size.height;
- }
- return (self);
-}
-
-
-- (void) setEvent:(int)event andFunc:(func_t)func andParam:(void *)param
-{
- event_funct[event] = func;
- event_param[event] = param;
- if (event == 6 || event == 32) // motion notify && high precision motion notify
- {
- if (func == NULL)
- [self setAcceptsMouseMovedEvents:NO];
- else
- [self setAcceptsMouseMovedEvents:YES];
- }
-}
-
-
-- (void) setKeyRepeat:(int)mode
-{
- keyrepeat = mode;
-}
-
-- (BOOL) acceptsFirstResponder
-{
- return (YES);
-}
-
-- (void) flagsChanged:(NSEvent *)theEvent
-{
- unsigned int flag;
- int the_key;
- unsigned int val;
-
- flag = [theEvent modifierFlags];
- // printf("Key flag changed: %x => %x\n", keyflag, flag);
- // printf("**mlx flag low part : %d - %x\n", flag&0xFFFF, flag&0xFFFF);
-
- if (!(val = (keyflag|flag)&(~(keyflag&flag))))
- return ; // no change - can happen when loosing focus on special key pressed, then re-pressed later
- the_key = 1;
- while (((val >> (the_key-1)) & 0x01)==0)
- the_key ++;
- if (flag > keyflag && event_funct[2] != NULL)
- event_funct[2](0xFF+the_key, event_param[2]);
- if (flag < keyflag && event_funct[3] != NULL)
- event_funct[3](0xFF+the_key, event_param[3]);
- /*
- if (event_funct[2] != NULL)
- {
- if (!(keyflag & NSAlphaShiftKeyMask) && (flag&NSAlphaShiftKeyMask)) event_funct[2](0xFF+1, event_param[2]);
- if (!(keyflag & NSShiftKeyMask) && (flag&NSShiftKeyMask)) event_funct[2](0xFF+2, event_param[2]);
- if (!(keyflag & NSControlKeyMask) && (flag&NSControlKeyMask)) event_funct[2](0xFF+3, event_param[2]);
- if (!(keyflag & NSAlternateKeyMask) && (flag&NSAlternateKeyMask)) event_funct[2](0xFF+4, event_param[2]);
- if (!(keyflag & NSCommandKeyMask) && (flag&NSCommandKeyMask)) event_funct[2](0xFF+5, event_param[2]);
- if (!(keyflag & NSNumericPadKeyMask) && (flag&NSNumericPadKeyMask)) event_funct[2](0xFF+6, event_param[2]);
- if (!(keyflag & NSHelpKeyMask) && (flag&NSHelpKeyMask)) event_funct[2](0xFF+7, event_param[2]);
- if (!(keyflag & NSFunctionKeyMask) && (flag&NSFunctionKeyMask)) event_funct[2](0xFF+8, event_param[2]);
- }
- if (event_funct[3] != NULL)
- {
- if ((keyflag & NSShiftKeyMask) && !(flag&NSShiftKeyMask)) event_funct[3](NSShiftKeyMask, event_param[3]);
-
- if ((keyflag & NSAlphaShiftKeyMask) && !(flag&NSAlphaShiftKeyMask)) event_funct[3](0xFF+1, event_param[3]);
- if ((keyflag & NSShiftKeyMask) && !(flag&NSShiftKeyMask)) event_funct[3](0xFF+2, event_param[3]);
- if ((keyflag & NSControlKeyMask) && !(flag&NSControlKeyMask)) event_funct[3](0xFF+3, event_param[3]);
- if ((keyflag & NSAlternateKeyMask) && !(flag&NSAlternateKeyMask)) event_funct[3](0xFF+4, event_param[3]);
- if ((keyflag & NSCommandKeyMask) && !(flag&NSCommandKeyMask)) event_funct[3](0xFF+5, event_param[3]);
- if ((keyflag & NSNumericPadKeyMask) && !(flag&NSNumericPadKeyMask)) event_funct[3](0xFF+6, event_param[3]);
- if ((keyflag & NSHelpKeyMask) && !(flag&NSHelpKeyMask)) event_funct[3](0xFF+7, event_param[3]);
- if ((keyflag & NSFunctionKeyMask) && !(flag&NSFunctionKeyMask)) event_funct[3](0xFF+8, event_param[3]);
- }
- */
- keyflag = flag;
-}
-
-- (void) keyDown:(NSEvent *)theEvent
-{
- if (keyrepeat==0 && [theEvent isARepeat])
- return ;
- // printf("Key Down: %d\n", [theEvent keyCode]);
- if (event_funct[2] != NULL)
- event_funct[2]([theEvent keyCode], event_param[2]);
- // else [super keyDown: theEvent];
-}
-
-- (void) keyUp:(NSEvent *)theEvent
-{
- // printf("Key Up: %d\n", [theEvent keyCode]);
- if (event_funct[3] != NULL)
- event_funct[3]([theEvent keyCode], event_param[3]);
- // else [super keyUp: theEvent];
-
-}
-
-- (void) mouseDown:(NSEvent *)theEvent
-{
- NSPoint thepoint;
- int button;
-
- thepoint = [theEvent locationInWindow];
- button = get_mouse_button([theEvent type]);
- // printf("Mouse pressed bt %d pos: %f, %f\n", button, thepoint.x, thepoint.y);
- if (event_funct[4] != NULL)
- event_funct[4](button, (int)(thepoint.x), size_y - 1 - (int)(thepoint.y), event_param[4]);
-}
-
-- (void) rightMouseDown:(NSEvent *)theEvent
-{
- NSPoint thepoint;
- int button;
-
- thepoint = [theEvent locationInWindow];
- button = get_mouse_button([theEvent type]);
- // printf("Mouse pressed bt %d pos: %f, %f\n", button, thepoint.x, thepoint.y);
- if (event_funct[4] != NULL)
- event_funct[4](button, (int)(thepoint.x), size_y - 1 - (int)(thepoint.y), event_param[4]);
-}
-
-- (void) otherMouseDown:(NSEvent *)theEvent
-{
- NSPoint thepoint;
- int button;
-
- thepoint = [theEvent locationInWindow];
- button = get_mouse_button([theEvent type]);
- // printf("Mouse pressed bt %d pos: %f, %f\n", button, thepoint.x, thepoint.y);
- if (event_funct[4] != NULL)
- event_funct[4](button, (int)(thepoint.x), size_y - 1 - (int)(thepoint.y), event_param[4]);
-}
-
-- (void) mouseUp:(NSEvent *)theEvent
-{
- NSPoint thepoint;
- int button;
-
- thepoint = [theEvent locationInWindow];
- button = get_mouse_button([theEvent type]);
- // printf("Mouse release bt %d pos: %f, %f\n", button, thepoint.x, thepoint.y);
- if (event_funct[5] != NULL)
- event_funct[5](button, (int)(thepoint.x), size_y - 1 - (int)(thepoint.y), event_param[5]);
-}
-
-- (void) rightMouseUp:(NSEvent *)theEvent
-{
- NSPoint thepoint;
- int button;
-
- thepoint = [theEvent locationInWindow];
- button = get_mouse_button([theEvent type]);
- // printf("Mouse release bt %d pos: %f, %f\n", button, thepoint.x, thepoint.y);
- if (event_funct[5] != NULL)
- event_funct[5](button, (int)(thepoint.x), size_y - 1 - (int)(thepoint.y), event_param[5]);
-}
-
-- (void) otherMouseUp:(NSEvent *)theEvent
-{
- NSPoint thepoint;
- int button;
-
- thepoint = [theEvent locationInWindow];
- button = get_mouse_button([theEvent type]);
- // printf("Mouse release bt %d pos: %f, %f\n", button, thepoint.x, thepoint.y);
- if (event_funct[5] != NULL)
- event_funct[5](button, (int)(thepoint.x), size_y - 1 - (int)(thepoint.y), event_param[5]);
-}
-
-- (void) mouseMoved:(NSEvent *)theEvent
-{
- NSPoint thepoint;
-
- thepoint = [theEvent locationInWindow];
- // printf("Mouse moved pos: %f, %f\n", thepoint.x, thepoint.y);
- if (event_funct[6] != NULL)
- event_funct[6]((int)(thepoint.x), size_y - 1 - (int)(thepoint.y), event_param[6]);
-}
-
-
-- (void) mouseDragged:(NSEvent *)theEvent
-{
- NSPoint thepoint;
-
- thepoint = [theEvent locationInWindow];
- // printf("Mouse moved pos: %f, %f\n", thepoint.x, thepoint.y);
- if (event_funct[6] != NULL)
- event_funct[6]((int)(thepoint.x), size_y - 1 - (int)(thepoint.y), event_param[6]);
-}
-
-
-- (void) rightMouseDragged:(NSEvent *)theEvent
-{
- NSPoint thepoint;
-
- thepoint = [theEvent locationInWindow];
- // printf("Mouse moved pos: %f, %f\n", thepoint.x, thepoint.y);
- if (event_funct[6] != NULL)
- event_funct[6]((int)(thepoint.x), size_y - 1 - (int)(thepoint.y), event_param[6]);
-}
-
-
-- (void) otherMouseDragged:(NSEvent *)theEvent
-{
- NSPoint thepoint;
-
- thepoint = [theEvent locationInWindow];
- // printf("Mouse moved pos: %f, %f\n", thepoint.x, thepoint.y);
- if (event_funct[6] != NULL)
- event_funct[6]((int)(thepoint.x), size_y - 1 - (int)(thepoint.y), event_param[6]);
-}
-
-
-- (void) scrollWheel:(NSEvent *)theEvent
-{
- NSPoint thepoint;
- int button;
- float sens;
-
- if (event_funct[4] == NULL)
- return ;
-
- button = 0;
- thepoint = [theEvent locationInWindow];
- sens = [theEvent deltaY];
- if (sens > 0.2)
- button = 4;
- if (sens < -0.2)
- button = 5;
- sens = [theEvent deltaX];
- if (sens > 0.2)
- button = 6;
- if (sens < -0.2)
- button = 7;
- if (button != 0)
- event_funct[4](button, (int)(thepoint.x), size_y - 1 - (int)(thepoint.y), event_param[4]);
-}
-
-
-- (void) exposeNotification:(NSNotification *)note
-{
- // printf("Expose...\n");
- if (event_funct[12] != NULL)
- event_funct[12](event_param[12]);
- // printf("Expose done.\n");
-}
-
-- (void) closeNotification:(NSNotification *)note
-{
- if (event_funct[17] != NULL)
- event_funct[17](event_param[17]);
-}
-
-- (void) deminiaturizeNotification:(NSNotification *)note
-{
- // if (event_funct[??] != NULL)
- // event_funct[??](event_param[??]);
- [self exposeNotification:note];
-}
-@end
-
-
-@implementation MlxWin
-
-- (id) initWithRect: (NSRect)rect andTitle: (NSString *)title pfaAttrs: (NSOpenGLPixelFormatAttribute *)attrs
-{
- NSOpenGLPixelFormat* pixFmt = [[NSOpenGLPixelFormat alloc] initWithAttributes:attrs];
-
- if ((self = [super initWithFrame:rect pixelFormat:pixFmt]) != nil)
- {
- NSUInteger windowStyle = NSWindowStyleMaskTitled | NSWindowStyleMaskClosable | NSWindowStyleMaskMiniaturizable;
-
- win = [[NSWindowEvent alloc] initWithContentRect:rect
- styleMask:windowStyle
- backing:NSBackingStoreBuffered // NSBackingStoreNonretained
- defer:NO];
- [win setContentView:self];
- [win setTitle:title];
- [win setKeyRepeat:1];
- [win makeKeyAndOrderFront:self];
-
- // printf("init ctx: current %p ", [NSOpenGLContext currentContext]);
-
- // ctx = [[NSOpenGLContext alloc] initWithFormat:pixFmt shareContext:[NSOpenGLContext currentContext]]; //other_context];
- // [ctx setView:self];
- // [ctx makeCurrentContext];
-
- [[self openGLContext] makeCurrentContext];
- [[self openGLContext] setView:self];
- [self prepareOpenGL];
-
- [self setNextKeyView:self];
-
- // [[NSNotificationCenter defaultCenter] addObserver:win selector:@selector(exposeNotification:) name:@"NSWindowDidExposeNotification" object:nil];
- [[NSNotificationCenter defaultCenter] addObserver:win selector:@selector(exposeNotification:) name:@"NSWindowDidBecomeKeyNotification" object:win];
- [[NSNotificationCenter defaultCenter] addObserver:win selector:@selector(deminiaturizeNotification:) name:@"NSWindowDidDeminiaturizeNotification" object:win];
- [[NSNotificationCenter defaultCenter] addObserver:win selector:@selector(closeNotification:) name:@"NSWindowWillCloseNotification" object:win];
- // [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(ctxNeedsUpdate:)
- // name:NSViewGlobalFrameDidChangeNotification
- // object:nil];
-
- size_x = rect.size.width;
- size_y = rect.size.height;
-
- glClearColor(0, 0, 0, 0);
- glClear(GL_COLOR_BUFFER_BIT);
- glFlush();
-
- //[win makeKeyAndOrderFront:nil];
- // BOOL r = [win isKeyWindow];
- // if (r==YES) printf("keywindow ok\n"); else printf("keywindow KO\n");
-
- // Window controller subclass to set title
- // NSWindowController* windowController = [[NSWindowController alloc] initWithWindow:win];
- // [windowController windowTitleForDocumentDisplayName:title];
- // [windowController showWindow:nil];
- // MlxWinController *mlxWinCont = [[MlxWinController alloc] initWin:win andTitle:title];
-
- // after nswindowcontroller who will retake first responder
- // BOOL r = [win makeFirstResponder:nil];
- // if (r==YES) printf("responder ok\n"); else printf("responder KO\n");
-
- [pixFmt release];
- }
- return (self);
-}
-
-- (int) pixel_management
-{
- bzero(&glsl, sizeof(glsl)); // so gldelete[shader/program] go silent on error.
-
- glDisable(GL_DEPTH_TEST);
- glGenBuffers(1, &pixel_vbuffer);
- glBindBuffer(GL_ARRAY_BUFFER, pixel_vbuffer);
- glBufferData(GL_ARRAY_BUFFER, sizeof(pixel_vertexes), pixel_vertexes, GL_DYNAMIC_DRAW); // 4 points buff
- // pixel_ptr = glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);
-
- glGenTextures(1, &pixel_texture);
- glBindTexture(GL_TEXTURE_2D, pixel_texture);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- pixtexbuff = malloc(sizeof(unsigned int)*size_x*size_y);
- pixel_nb = size_x*size_y;
- while (pixel_nb--) pixtexbuff[pixel_nb] = 0xFF000000;
- pixel_nb = 0;
- glTexImage2D(
- GL_TEXTURE_2D, 0, /* target, level of detail */
- GL_RGBA8, /* internal format */
- size_x, size_y, 0, /* width, height, border */
- GL_BGRA, GL_UNSIGNED_BYTE, /* external format, type */
- pixtexbuff /* pixels */
- );
- // printf("pix tex err? 0x%x\n", glGetError());
-
- if (mlx_shaders(&glsl))
- return (0);
-
- glUseProgram(glsl.pixel_program);
- glsl.loc_pixel_texture = glGetUniformLocation(glsl.pixel_program, "texture");
- //glsl.loc_pixel_winhalfsize = glGetUniformLocation(glsl.pixel_program, "winhalfsize");
- glsl.loc_pixel_position = glGetAttribLocation(glsl.pixel_program, "position");
- // printf("err? 0x%x\n", glGetError());
-
- glUseProgram(glsl.image_program);
- glsl.loc_image_texture = glGetUniformLocation(glsl.image_program, "texture");
- glsl.loc_image_pos = glGetUniformLocation(glsl.image_program, "imagepos");
- glsl.loc_image_size = glGetUniformLocation(glsl.image_program, "imagesize");
- glsl.loc_image_winhalfsize = glGetUniformLocation(glsl.image_program, "winhalfsize");
- glsl.loc_image_position = glGetAttribLocation(glsl.image_program, "position");
- // printf("err? 0x%x\n", glGetError());
-
- glUseProgram(glsl.font_program);
- glsl.loc_font_texture = glGetUniformLocation(glsl.font_program, "texture");
- glsl.loc_font_color = glGetUniformLocation(glsl.font_program, "color");
- glsl.loc_font_posinwin = glGetUniformLocation(glsl.font_program, "fontposinwin");
- glsl.loc_font_posinatlas = glGetUniformLocation(glsl.font_program, "fontposinatlas");
- glsl.loc_font_atlassize = glGetUniformLocation(glsl.font_program, "fontatlassize");
- glsl.loc_font_winhalfsize = glGetUniformLocation(glsl.font_program, "winhalfsize");
- glsl.loc_font_position = glGetAttribLocation(glsl.font_program, "position");
- // printf("err? 0x%x\n", glGetError());
-
- glFlush();
- return (1);
-}
-
-- (void) ctxNeedsUpdate
-{
- // printf("Context update\n");
- [ctx update];
-}
-
-- (void) selectGLContext
-{
- if ([NSOpenGLContext currentContext] != [self openGLContext])
- {
- // printf("ctx: %p => %p\n", [NSOpenGLContext currentContext], [self openGLContext]);
- [[self openGLContext] makeCurrentContext];
- }
-}
-
-- (void) flushGLContext
-{
- [[self openGLContext] flushBuffer];
-}
-
-- (NSOpenGLContext *) ctx
-{
- return (ctx);
-}
-
-- (NSWindowEvent *) win
-{
- return (win);
-}
-
-
-- (void) pixelPutColor: (int)color X:(int)x Y:(int)y
-{
- pixel_nb ++;
-
- glBindTexture(GL_TEXTURE_2D, pixel_vbuffer);
- glTexSubImage2D(GL_TEXTURE_2D, 0, x, y, 1, 1, GL_BGRA, GL_UNSIGNED_BYTE, (GLvoid *)(&color));
-
- if (pixel_nb >= MAX_PIXEL_NB)
- [self mlx_gl_draw];
-}
-
-- (void) destroyPixelManagement
-{
- free(pixtexbuff);
- [self selectGLContext];
- glDeleteBuffers(1, &pixel_vbuffer);
- glDeleteTextures(1, &pixel_texture);
- glDeleteProgram(glsl.pixel_program);
- glDeleteProgram(glsl.image_program);
- glDeleteShader(glsl.pixel_vshader);
- glDeleteShader(glsl.pixel_fshader);
- glDeleteShader(glsl.image_vshader);
- glDeleteShader(glsl.image_fshader);
-}
-
-
-- (void) destroyMe
-{
- [[NSNotificationCenter defaultCenter] removeObserver:win];
- [[NSNotificationCenter defaultCenter] removeObserver:self];
- // [ctx release];
- [win close];
- [self release];
-}
-
-- (void) setEvent:(int)event andFunc:(func_t)func andParam:(void *)param
-{
- [win setEvent:event andFunc:func andParam:param];
-}
-
-- (void) setKeyRepeat:(int)mode
-{
- [win setKeyRepeat:mode];
-}
-
-- (void) clearWin
-{
- glClearColor(0, 0, 0, 0);
- glClear(GL_COLOR_BUFFER_BIT);
-}
-
-- (void) mlx_gl_draw_img:(mlx_img_list_t *)img andCtx:(mlx_img_ctx_t *)imgctx andX:(int)x andY:(int)y
-{
-
- if (pixel_nb >0)
- [self mlx_gl_draw];
-
- glUseProgram(glsl.image_program);
-
- glActiveTexture(GL_TEXTURE0);
- glBindTexture(GL_TEXTURE_2D, imgctx->texture);
- glUniform1i(glsl.loc_image_texture, 0);
-
- glUniform2f(glsl.loc_image_winhalfsize, size_x/2, size_y/2);
- glUniform2f(glsl.loc_image_pos, x, size_y - y);
- glUniform2f(glsl.loc_image_size, img->width, -img->height);
-
- glBindBuffer(GL_ARRAY_BUFFER, imgctx->vbuffer);
- glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 2*sizeof(GLfloat), (void*)0);
- glEnableVertexAttribArray(0);
-
- glEnable(GL_BLEND);
- glBlendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA); // src alpha 0xFF : keep dst
- glBlendEquation(GL_FUNC_ADD);
-
- glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
- glDisableVertexAttribArray(0);
-
-}
-
-
-- (void) mlx_gl_draw_font:(mlx_img_list_t *)img andCtx:(mlx_img_ctx_t *)imgctx andX:(int)x andY:(int)y andColor:(int)color glyphX:(int)gx glyphY:(int)gy
-{
- GLfloat color_tab[4];
-
- if (pixel_nb >0)
- [self mlx_gl_draw];
-
- color_tab[0] = ((float)((color&0xFF0000)>>16))/255.0;
- color_tab[1] = ((float)((color&0xFF00)>>8))/255.0;
- color_tab[2] = ((float)((color&0xFF)>>0))/255.0;
- color_tab[3] = 1.0;
- glUseProgram(glsl.font_program);
-
- glActiveTexture(GL_TEXTURE0);
- glBindTexture(GL_TEXTURE_2D, imgctx->texture);
- glUniform1i(glsl.loc_font_texture, 0);
- glUniform4fv(glsl.loc_font_color, 1, color_tab);
-
- glUniform2f(glsl.loc_font_winhalfsize, size_x/2, size_y/2);
- glUniform2f(glsl.loc_font_posinwin, x, size_y - 1 - y);
- glUniform2f(glsl.loc_font_posinatlas, gx, gy);
- glUniform2f(glsl.loc_font_atlassize, img->width, img->height);
-
- glBindBuffer(GL_ARRAY_BUFFER, imgctx->vbuffer);
- glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 2*sizeof(GLfloat), (void*)0);
- glEnableVertexAttribArray(0);
-
- glEnable(GL_BLEND);
- glBlendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA); // src alpha 0xFF : keep dst
- glBlendEquation(GL_FUNC_ADD);
-
- glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
- glDisableVertexAttribArray(0);
-
-}
-
-
-- (void) mlx_gl_draw
-{
- if (pixel_nb <= 0)
- return ;
-
- glUseProgram(glsl.pixel_program);
-
- glActiveTexture(GL_TEXTURE0);
- glBindTexture(GL_TEXTURE_2D, pixel_vbuffer);
- glUniform1i(glsl.loc_pixel_texture, 0);
-
- glBindBuffer(GL_ARRAY_BUFFER, pixel_vbuffer);
- glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 2*sizeof(GLfloat), (void*)0);
- glEnableVertexAttribArray(0);
-
- glEnable(GL_BLEND);
- glBlendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA); // src alpha 0xFF : keep dst
- glBlendEquation(GL_FUNC_ADD);
-
- glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
- glDisableVertexAttribArray(0);
-
- pixel_nb = size_x*size_y;
- while (pixel_nb--) pixtexbuff[pixel_nb] = 0xFF000000;
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, size_x, size_y, 0, GL_BGRA, GL_UNSIGNED_BYTE, pixtexbuff);
- pixel_nb = 0;
-
-}
-
-@end
-
-
-// mlx API
-
-
-void *mlx_new_window(mlx_ptr_t *mlx_ptr, int size_x, int size_y, char *title)
-{
- mlx_win_list_t *newwin;
- NSString *str;
-
- if ((newwin = malloc(sizeof(*newwin))) == NULL)
- return ((void *)0);
- newwin->img_list = NULL;
- newwin->next = mlx_ptr->win_list;
- newwin->nb_flush = 0;
- newwin->pixmgt = 1;
- mlx_ptr->win_list = newwin;
-
- NSRect windowRect = NSMakeRect(100, 100, size_x, size_y);
- str = [NSString stringWithCString:title encoding:NSASCIIStringEncoding];
- newwin->winid = [[MlxWin alloc] initWithRect:windowRect andTitle:str pfaAttrs:pfa_attrs];
- if (newwin->winid)
- if (![(id)(newwin->winid) pixel_management])
- {
- [(id)(newwin->winid) destroyPixelManagement];
- [(id)(newwin->winid) destroyMe];
- }
- return ((void *)newwin);
-}
-
-
-void mlx_clear_window(mlx_ptr_t *mlx_ptr, mlx_win_list_t *win_ptr)
-{
- [(id)(win_ptr->winid) selectGLContext];
- [(id)(win_ptr->winid) clearWin];
- win_ptr->nb_flush ++;
-}
-
-
-void mlx_expose_hook(mlx_win_list_t *win_ptr, int (*funct_ptr)(), void *param)
-{
- [(id)(win_ptr->winid) setEvent:12 andFunc:funct_ptr andParam:param];
-}
-
-void mlx_key_hook(mlx_win_list_t *win_ptr, int (*funct_ptr)(), void *param)
-{
- [(id)(win_ptr->winid) setEvent:3 andFunc:funct_ptr andParam:param];
-}
-
-void mlx_mouse_hook(mlx_win_list_t *win_ptr, int (*funct_ptr)(), void *param)
-{
- [(id)(win_ptr->winid) setEvent:4 andFunc:funct_ptr andParam:param];
-}
-
-void mlx_hook(mlx_win_list_t *win_ptr, int x_event, int x_mask, int (*funct_ptr)(), void *param)
-{
- [(id)(win_ptr->winid) setEvent:x_event andFunc:funct_ptr andParam:param];
-}
-
-int mlx_do_key_autorepeatoff(mlx_ptr_t *mlx_ptr)
-{
- mlx_win_list_t *win;
-
- win = mlx_ptr->win_list;
- while (win)
- {
- [(id)(win->winid) setKeyRepeat:0];
- win = win->next;
- }
- return (0);
-}
-
-int mlx_do_key_autorepeaton(mlx_ptr_t *mlx_ptr)
-{
- mlx_win_list_t *win;
-
- win = mlx_ptr->win_list;
- while (win)
- {
- [(id)(win->winid) setKeyRepeat:1];
- win = win->next;
- }
- return (0);
-}
-
-
-int mlx_destroy_window(mlx_ptr_t *mlx_ptr, mlx_win_list_t *win_to_del)
-{
- mlx_win_list_t first;
- mlx_win_list_t *win;
- mlx_img_ctx_t *ctx;
- mlx_img_ctx_t *ctx2;
-
- first.next = mlx_ptr->win_list;
- win = &first;
- while (win && win->next)
- {
- if (win->next == win_to_del)
- win->next = win->next->next;
- win = win->next;
- }
- mlx_ptr->win_list = first.next;
-
- if (win_to_del->pixmgt)
- {
- [(id)(win_to_del->winid) selectGLContext];
- ctx = win_to_del->img_list; // should be null anyway if no pixel management
- while (ctx)
- {
- glDeleteBuffers(1, &(ctx->vbuffer));
- glDeleteTextures(1, &(ctx->texture));
- ctx2 = ctx;
- ctx = ctx->next;
- free(ctx2);
- }
- [(id)(win_to_del->winid) destroyPixelManagement];
- }
- [(id)(win_to_del->winid) destroyMe];
- free(win_to_del);
-
- // printf("destroy window done.\n");
- mlx_do_sync(mlx_ptr);
- return (0);
-}
diff --git a/minilibx/mlx_opengl.h b/minilibx/mlx_opengl.h
deleted file mode 100644
index bb39267..0000000
--- a/minilibx/mlx_opengl.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
-**
-** mlx_opengl.h
-**
-** public include, use it after mlx.h
-** designed only for minilibx_macos
-**
-*/
-
-void *mlx_new_opengl_window(void *mlx_ptr, int size_x, int size_y, char *title);
-
-/* create an opengl window. put_image & pixel_put & string_put do not work there. */
-
-int mlx_opengl_swap_buffers(void *win_ptr);
-
-/* the created window is double buffered. Use this funct to swap buffers */
-/* this funct will call glFlush(). Don't call it. */
-
-int mlx_opengl_window_set_context(void *win_ptr);
-
-/* in case multiple opengl windows are present, change opengl active context */
diff --git a/minilibx/mlx_opengl.m b/minilibx/mlx_opengl.m
deleted file mode 100644
index 554d79b..0000000
--- a/minilibx/mlx_opengl.m
+++ /dev/null
@@ -1,57 +0,0 @@
-// mlx_opengl.m
-
-#import <Cocoa/Cocoa.h>
-#import <OpenGL/gl3.h>
-#import <AppKit/NSOpenGLView.h>
-
-#include <stdio.h>
-
-#include "mlx_int.h"
-#include "mlx_new_window.h"
-
-
-
-
-
-NSOpenGLPixelFormatAttribute pfa_attrs_opengl[] =
- {
- NSOpenGLPFADepthSize, 32,
- NSOpenGLPFADoubleBuffer,
- NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion4_1Core,
- 0
- };
-
-
-
-void *mlx_new_opengl_window(mlx_ptr_t *mlx_ptr, int size_x, int size_y, char *title)
-{
- mlx_win_list_t *newwin;
- NSString *str;
-
- if ((newwin = malloc(sizeof(*newwin))) == NULL)
- return ((void *)0);
- newwin->img_list = NULL;
- newwin->next = mlx_ptr->win_list;
- newwin->nb_flush = 0;
- newwin->pixmgt = 0;
- mlx_ptr->win_list = newwin;
-
- NSRect windowRect = NSMakeRect(100, 100, size_x, size_y);
- str = [NSString stringWithCString:title encoding:NSASCIIStringEncoding];
- newwin->winid = [[MlxWin alloc] initWithRect:windowRect andTitle:str pfaAttrs:pfa_attrs_opengl];
-
- return ((void *)newwin);
-}
-
-
-int mlx_opengl_swap_buffers(mlx_win_list_t *win_ptr)
-{
- [(id)(win_ptr->winid) flushGLContext];
- return (0);
-}
-
-int mlx_opengl_window_set_context(mlx_win_list_t *win_ptr)
-{
- [(id)(win_ptr->winid) selectGLContext];
- return (0);
-}
diff --git a/minilibx/mlx_pixel_put.c b/minilibx/mlx_pixel_put.c
new file mode 100755
index 0000000..c411f36
--- /dev/null
+++ b/minilibx/mlx_pixel_put.c
@@ -0,0 +1,26 @@
+/*
+ ** mlx_pixel_put.c for MiniLibX in
+ **
+ ** Made by Charlie Root
+ ** Login <ol@epitech.net>
+ **
+ ** Started on Mon Jul 31 19:01:33 2000 Charlie Root
+** Last update Tue Sep 25 17:09:49 2001 Charlie Root
+ */
+
+
+#include "mlx_int.h"
+
+
+
+int mlx_pixel_put(t_xvar *xvar,t_win_list *win,
+ int x,int y,int color)
+{
+ XGCValues xgcv;
+
+ xgcv.foreground = mlx_int_get_good_color(xvar,color);
+ XChangeGC(xvar->display,win->gc,GCForeground,&xgcv);
+ XDrawPoint(xvar->display,win->window,win->gc,x,y);
+ if (xvar->do_flush)
+ XFlush(xvar->display);
+}
diff --git a/minilibx/mlx_png.c b/minilibx/mlx_png.c
deleted file mode 100644
index ca8024d..0000000
--- a/minilibx/mlx_png.c
+++ /dev/null
@@ -1,418 +0,0 @@
-
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <sys/mman.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <err.h>
-#include <string.h>
-#include <arpa/inet.h>
-
-#include "zlib.h"
-
-#include <OpenGL/gl3.h>
-#include "mlx_int.h"
-
-
-#define PNG_MAGIC_SIZE 8
-unsigned char magic[PNG_MAGIC_SIZE] = {137, 80, 78, 71, 13, 10, 26, 10};
-#define PNG_HDR_SIZE 13
-
-#define Z_CHUNK 32768
-
-#define ERR_MAGIC_SIZE 1
-#define ERR_MAGIC_WRONG 2
-#define ERR_STRUCT_INCOMPLETE 3
-#define ERR_STRUCT_HDR 4
-#define ERR_STRUCT_END 5
-#define ERR_STRUCT_CRC 6
-#define ERR_STRUCT_INCIMPL 7
-#define ERR_STRUCT_DAT 8
-#define ERR_STRUCT_MISSCHK 9
-#define ERR_ZLIB 10
-#define ERR_DATA_MISMATCH 11
-#define ERR_DATA_FILTER 12
-char *(mipng_err[]) =
-{
- "No error",
- "Not enough size for magic",
- "Wrong magic",
- "Incomplete chunk structure",
- "Duplicate or incorrect header",
- "Duplicate or incorrect end",
- "Invalid CRC in chunk",
- "Incorrect header or configuration not implemented",
- "Non consecutive dat chunks",
- "Missing header/dat/end chunk(s)",
- "Zlib inflate error",
- "Inflated data size mismatch",
- "Unknown scanline filter"
-};
-
-typedef struct png_info_s
-{
- unsigned int width;
- unsigned int height;
- int depth;
- int color;
- int interlace;
- int bpp;
-} png_info_t;
-
-
-int mipng_is_type(unsigned char *ptr, char *type)
-{
- if (ptr[4] == type[0] && ptr[5] == type[1] && ptr[6] == type[2] && ptr[7] == type[3])
- return (1);
- return (0);
-}
-
-
-unsigned char mipng_defilter_none(unsigned char *buff, int pos, int a, int b, int c)
-{ return (buff[pos]); }
-unsigned char mipng_defilter_sub(unsigned char *buff, int pos, int a, int b, int c)
-{ return (buff[pos]+(unsigned int)a); }
-unsigned char mipng_defilter_up(unsigned char *buff, int pos, int a, int b, int c)
-{ return (buff[pos]+(unsigned int)b); }
-unsigned char mipng_defilter_average(unsigned char *buff, int pos, int a, int b, int c)
-{ return (buff[pos]+((unsigned int)a+(unsigned int)b)/2); }
-unsigned char mipng_defilter_paeth(unsigned char *buff, int pos, int a, int b, int c)
-{
- int p;
- int result;
-
- p = a + b - c;
- if (abs(b - c) <= abs(a - c) && abs(b - c) <= abs(a + b - c - c))
- result = a;
- else
- if (abs(a - c) <= abs(a + b - c - c))
- result = b;
- else
- result = c;
- return (buff[pos]+result);
-}
-
-
-
-unsigned char (*(mipng_defilter[]))(unsigned char *buff, int pos, int a, int b, int c) =
-{
- mipng_defilter_none,
- mipng_defilter_sub,
- mipng_defilter_up,
- mipng_defilter_average,
- mipng_defilter_paeth
-};
-
-// only work for mlx mac or img 32bpp
-int mipng_fill_img(mlx_img_list_t *img, unsigned char *buf, png_info_t *pi)
-{
- unsigned int current_filter;
- int ipos;
- int bpos;
- int ilen;
- int iline;
- int blen;
- unsigned char tmp;
- unsigned char *ibuf;
-
- ibuf = (unsigned char *)img->buffer;
- iline = img->width * UNIQ_BPP;
- ilen = img->width * img->height * UNIQ_BPP;
- blen = img->width * img->height * pi->bpp + img->height;
- ipos = 0;
- bpos = 0;
- while (ipos < ilen && bpos < blen)
- {
- if ((ipos % iline) == 0)
- {
- if ((current_filter = buf[bpos++]) > 4)
- return (ERR_DATA_FILTER);
- }
- ibuf[ipos] = mipng_defilter[current_filter](buf, bpos,
- ipos%iline>3?ibuf[ipos-UNIQ_BPP]:0,
- (ipos>=iline)?ibuf[ipos-iline]:0,
- (ipos>=iline && ipos%iline>3)?ibuf[ipos-iline-UNIQ_BPP]:0);
- ipos ++;
- bpos ++;
- if (pi->depth == 16)
- bpos ++;
- if (ipos % 4 == 3 && pi->color == 2) // no alpha
- img->buffer[ipos++] = 0xFF;
- }
- if (ipos != ilen || bpos != blen)
- {
- // printf("fill err ipos %d vs %d, bpos %d vs %d\n", ipos, ilen, bpos, blen);
- return (ERR_DATA_MISMATCH);
- }
- ipos = 0;
- while (ipos < ilen)
- {
- tmp = ibuf[ipos];
- ibuf[ipos] = ibuf[ipos+2];
- ibuf[ipos+2] = tmp;
- ibuf[ipos+3] = 0xFF - ibuf[ipos+3];
- ipos += UNIQ_BPP;
- }
- return (0);
-}
-
-
-int mipng_data(mlx_img_list_t *img, unsigned char *dat, png_info_t *pi)
-{
- unsigned int len;
- int b_pos;
- unsigned char *buffer;
- int ret;
- int z_ret;
- unsigned z_have;
- z_stream z_strm;
- unsigned char z_out[Z_CHUNK];
-
- b_pos = 0;
- if (!(buffer = malloc((long long)img->width*(long long)img->height*(long long)pi->bpp + img->height)))
- err(1, "Can't malloc");
- z_strm.zalloc = Z_NULL;
- z_strm.zfree = Z_NULL;
- z_strm.opaque = Z_NULL;
- z_strm.avail_in = 0;
- z_strm.next_in = Z_NULL;
- z_ret = inflateInit(&z_strm);
- if (z_ret != Z_OK)
- return (ERR_ZLIB);
-
- while (mipng_is_type(dat, "IDAT"))
- {
- len = *((unsigned int *)dat);
- len = ntohl(len);
- z_strm.avail_in = len;
- z_strm.next_in = dat + 8;
- z_strm.avail_out = 0;
- while (z_strm.avail_out == 0)
- {
- z_strm.avail_out = Z_CHUNK;
- z_strm.next_out = z_out;
- z_ret = inflate(&z_strm, Z_NO_FLUSH);
- // printf("inflate ret %d avail_out %d\n", z_ret, z_strm.avail_out);
- if (z_ret != Z_OK && z_ret != Z_STREAM_END)
- {
- inflateEnd(&z_strm);
- return (ERR_ZLIB);
- }
- if (b_pos + Z_CHUNK - z_strm.avail_out > img->width*img->height*pi->bpp+img->height)
- {
- inflateEnd(&z_strm);
- return (ERR_DATA_MISMATCH);
- }
- bcopy(z_out, buffer+b_pos, Z_CHUNK - z_strm.avail_out);
- b_pos += Z_CHUNK - z_strm.avail_out;
- }
- dat += len + 4 + 4 + 4;
- }
- inflateEnd(&z_strm);
- if (b_pos != img->width*img->height*pi->bpp+img->height)
- {
- // printf("pb : bpos %d vs expected %d\n", b_pos, img->width*img->height*pi->bpp+img->height);
- return (ERR_DATA_MISMATCH);
- }
- if ((ret = mipng_fill_img(img, buffer, pi)))
- return (ret);
- return (0);
-}
-
-
-
-int mipng_magic(unsigned char *ptr, int size)
-{
- int i;
-
- if (size < PNG_MAGIC_SIZE)
- return (ERR_MAGIC_SIZE);
- i = 0;
- while (i < PNG_MAGIC_SIZE)
- if (*(ptr++) != magic[i++])
- return (ERR_MAGIC_WRONG);
- return (0);
-}
-
-
-unsigned long crc_table[256] = { 0, 0x77073096, 0xee0e612c, 0x990951ba, 0x76dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0xedb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x9b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x1db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x6b6b51f, 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0xf00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x86d3d2d, 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x3b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x4db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, 0xd6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0xa00ae27, 0x7d079eb1, 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x26d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x5005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0xcb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0xbdbdf21, 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d };
-
-// From http://www.w3.org/TR/PNG/#D-CRCAppendix
-int mipng_crc(unsigned char *ptr, int len)
-{
- unsigned int file_crc;
- unsigned long crc;
- int i;
-
- file_crc = *((unsigned int *)(ptr+4+4+len));
- file_crc = ntohl(file_crc);
-
- crc = 0xffffffffL;
- i = 0;
- while (i < len+4)
- crc = crc_table[(crc ^ ptr[(i++)+4]) & 0xff] ^ (crc >> 8);
- crc ^= 0xffffffffL;
-
- if (file_crc != crc)
- return (1);
- return (0);
-}
-
-
-int mipng_structure(unsigned char *ptr, int size, unsigned char **hdr, unsigned char **dat)
-{
- unsigned int len;
- int dat_state;
- int end;
-
- dat_state = 0;
- *hdr = NULL;
- *dat = NULL;
- end = 0;
- while (size)
- {
- if (size >= 4) // length present
- {
- len = *((unsigned int *)ptr);
- len = ntohl(len);
- if (size < 4 + 4 + 4 + len)
- return (ERR_STRUCT_INCOMPLETE);
- if (mipng_crc(ptr, len))
- return (ERR_STRUCT_CRC);
- // printf("found chunk len %d type %c%c%c%c\n", len, *(ptr+4), *(ptr+5), *(ptr+6), *(ptr+7));
- if (mipng_is_type(ptr, "IHDR"))
- {
- if (*hdr || len != PNG_HDR_SIZE)
- return (ERR_STRUCT_HDR);
- *hdr = ptr;
- }
- if (mipng_is_type(ptr, "IEND"))
- {
- if (len != 0 || size != 4+4+4)
- return (ERR_STRUCT_END);
- end = 1;
- }
- if (mipng_is_type(ptr, "IDAT"))
- {
- if (dat_state == 0)
- {
- dat_state = 1;
- *dat = ptr;
- }
- if (dat_state == 2)
- return (ERR_STRUCT_DAT);
- }
- else
- if (dat_state == 1)
- dat_state = 2;
- size -= 4+4+4+len;
- ptr += 4+4+4+len;
- }
- else
- return (ERR_STRUCT_INCOMPLETE);
- }
- if (*hdr == 0 || *dat == 0 || end == 0)
- return (ERR_STRUCT_MISSCHK);
- return (0);
-}
-
-
-int mipng_verif_hdr(unsigned char *hdr, png_info_t *pi)
-{
- unsigned int compress;
- unsigned int filter;
-
- hdr += 8;
- pi->width = ntohl(*((unsigned long *)hdr));
- pi->height = ntohl(*((unsigned long *)(hdr+4)));
- pi->depth = *(hdr+8);
- pi->color = *(hdr+9);
- compress = *(hdr+10);
- filter = *(hdr+11);
- pi->interlace = *(hdr+12);
- if (pi->width <= 0 || pi->height <= 0 || (pi->depth != 8 && pi->depth != 16)
- || (pi->color != 2 && pi->color != 6) || compress != 0 || filter != 0 || pi->interlace != 0)
- return (ERR_STRUCT_INCIMPL);
- pi->bpp = pi->depth / 8;
- if (pi->color == 2)
- pi->bpp *= 3;
- if (pi->color == 6)
- pi->bpp *= 4;
- // printf("hdr info : %d x %d, depth %d, col type %d, comp %d, filter %d, interlace %d\nbpp is %d\n",
- // pi->width, pi->height, pi->depth, pi->color, compress, filter, pi->interlace, pi->bpp);
- return (0);
-}
-
-
-mlx_img_list_t *mlx_int_parse_png(mlx_ptr_t *xvar, unsigned char *fptr, int size)
-{
- int err;
- unsigned char *hdr;
- unsigned char *dat;
- png_info_t pi;
- mlx_img_list_t *img;
-
- if ((err = mipng_magic(fptr, size)))
- {
- warnx("mlx PNG error : %s", mipng_err[err]);
- return ((mlx_img_list_t *)0);
- }
- fptr += PNG_MAGIC_SIZE;
- size -= PNG_MAGIC_SIZE;
- if ((err = mipng_structure(fptr, size, &hdr, &dat)))
- {
- warnx("mlx PNG error : %s", mipng_err[err]);
- return ((mlx_img_list_t *)0);
- }
- if ((err = mipng_verif_hdr(hdr, &pi)))
- {
- warnx("mlx PNG error : %s", mipng_err[err]);
- return ((mlx_img_list_t *)0);
- }
- if (!(img = mlx_new_image(xvar, pi.width, pi.height)))
- {
- warnx("mlx PNG error : Can't create mlx image");
- return ((mlx_img_list_t *)0);
- }
- if ((err = mipng_data(img, dat, &pi)))
- {
- mlx_destroy_image(xvar, img);
- warnx("mlx PNG error : %s", mipng_err[err]);
- return ((mlx_img_list_t *)0);
- }
- return (img);
-}
-
-
-
-
-void *mlx_png_file_to_image(mlx_ptr_t *xvar, char *file, int *width, int *height)
-{
- int fd;
- int size;
- unsigned char *ptr;
- mlx_img_list_t *img;
-
- if ((fd = open(file, O_RDONLY)) == -1 || (size = lseek(fd, 0, SEEK_END)) == -1 ||
- (ptr = mmap(0, size, PROT_READ, MAP_PRIVATE, fd, 0)) == (void *)MAP_FAILED)
- {
- if (fd >= 0)
- close(fd);
- warnx("Can't map png file '%s'", file);
- return ((void *)0);
- }
- if ((img = mlx_int_parse_png(xvar, ptr, size)))
- {
- *width = img->width;
- *height = img->height;
- }
- else
- {
- *width = 0;
- *height = 0;
- }
- munmap(ptr,size);
- close(fd);
- return (img);
-}
diff --git a/minilibx/mlx_png.h b/minilibx/mlx_png.h
deleted file mode 100644
index 83ef145..0000000
--- a/minilibx/mlx_png.h
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-void *mlx_png_file_to_image(void *xvar, char *file, int *width, int *height);
diff --git a/minilibx/mlx_put_image_to_window.c b/minilibx/mlx_put_image_to_window.c
new file mode 100755
index 0000000..86ba3f4
--- /dev/null
+++ b/minilibx/mlx_put_image_to_window.c
@@ -0,0 +1,37 @@
+/*
+** mlx_put_image_to_window.c for MiniLibX in raytraceur
+**
+** Made by Charlie Root
+** Login <ol@epitech.net>
+**
+** Started on Mon Aug 14 15:55:49 2000 Charlie Root
+** Last update Sun Oct 2 09:53:00 2005 Olivier Crouzet
+*/
+
+
+
+#include "mlx_int.h"
+
+
+int mlx_put_image_to_window(t_xvar *xvar,t_win_list *win,t_img *img,
+ int x,int y)
+{
+ GC gc;
+
+ gc = win->gc;
+ if (img->gc)
+ {
+ gc = img->gc;
+ XSetClipOrigin(xvar->display, gc, x, y);
+ }
+ if (img->type==MLX_TYPE_SHM)
+ XShmPutImage(xvar->display,img->pix, win->gc, img->image,0,0,0,0,
+ img->width,img->height,False);
+ if (img->type==MLX_TYPE_XIMAGE)
+ XPutImage(xvar->display,img->pix, win->gc, img->image,0,0,0,0,
+ img->width,img->height);
+ XCopyArea(xvar->display,img->pix,win->window, gc,
+ 0,0,img->width,img->height,x,y);
+ if (xvar->do_flush)
+ XFlush(xvar->display);
+}
diff --git a/minilibx/mlx_rgb.c b/minilibx/mlx_rgb.c
index 3f98717..0cfccf6 100644..100755
--- a/minilibx/mlx_rgb.c
+++ b/minilibx/mlx_rgb.c
@@ -3,6 +3,7 @@
** the XFree86 distribution.
*/
+#include "mlx_int.h"
struct s_col_name mlx_col_name[] =
{
diff --git a/minilibx/mlx_shaders.c b/minilibx/mlx_shaders.c
deleted file mode 100644
index 4a58955..0000000
--- a/minilibx/mlx_shaders.c
+++ /dev/null
@@ -1,240 +0,0 @@
-// mlx_shaders.c
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <OpenGL/gl3.h>
-#include "mlx_int.h"
-
-
-void display_log(GLuint object, void (*param_func)(), void (*getlog_func)())
-{
- GLint log_length;
- char *log;
-
- param_func(object, GL_INFO_LOG_LENGTH, &log_length);
- log = malloc(log_length);
- getlog_func(object, log_length, NULL, log);
- fprintf(stderr, "%s", log);
- free(log);
-}
-
-
-int mlx_shaders_pixel(glsl_info_t *glsl)
-{
- char *source;
- int length;
- GLint action_ok;
-
- glsl->pixel_vshader = glCreateShader(GL_VERTEX_SHADER);
- source = strdup("#version 110 \n"
- "attribute vec2 position;"
- "varying vec2 texcoord;"
- "void main()"
- "{"
- " gl_Position = vec4( position, 0.0, 1.0);"
- " texcoord = vec2(position[0]+1.0, 1.0 - position[1]) / 2.0;"
- "}");
- length = strlen(source);
- glShaderSource(glsl->pixel_vshader, 1, (const GLchar**)&source, &length);
- glCompileShader(glsl->pixel_vshader);
- free(source);
-
- glGetShaderiv(glsl->pixel_vshader, GL_COMPILE_STATUS, &action_ok);
- if (!action_ok) {
- fprintf(stderr, "Failed to compile pixel vshader :\n");
- display_log(glsl->pixel_vshader, glGetShaderiv, glGetShaderInfoLog);
- return (1);
- }
-
- glsl->pixel_fshader = glCreateShader(GL_FRAGMENT_SHADER);
- source = strdup("#version 110 \n"
- "uniform sampler2D texture;"
- "varying vec2 texcoord;"
- "void main()"
- "{"
- " gl_FragColor = texture2D(texture, texcoord);"
- "}");
- length = strlen(source);
- glShaderSource(glsl->pixel_fshader, 1, (const GLchar**)&source, &length);
- glCompileShader(glsl->pixel_fshader);
- free(source);
-
- glGetShaderiv(glsl->pixel_fshader, GL_COMPILE_STATUS, &action_ok);
- if (!action_ok) {
- fprintf(stderr, "Failed to compile pixel fshader :\n");
- display_log(glsl->pixel_fshader, glGetShaderiv, glGetShaderInfoLog);
- return (1);
- }
-
- glsl->pixel_program = glCreateProgram();
- glAttachShader(glsl->pixel_program, glsl->pixel_vshader);
- glAttachShader(glsl->pixel_program, glsl->pixel_fshader);
- glLinkProgram(glsl->pixel_program);
-
- glGetProgramiv(glsl->pixel_program, GL_LINK_STATUS, &action_ok);
- if (!action_ok) {
- fprintf(stderr, "Failed to link pixel shader program:\n");
- display_log(glsl->pixel_program, glGetProgramiv, glGetProgramInfoLog);
- return (1);
- }
-
- glFlush();
-
- return (0);
-}
-
-
-int mlx_shaders_image(glsl_info_t *glsl)
-{
- char *source;
- int length;
- GLint action_ok;
-
- glsl->image_vshader = glCreateShader(GL_VERTEX_SHADER);
- source = strdup("#version 110 \n"
- "attribute vec2 position;"
- "uniform vec2 winhalfsize;"
- "uniform vec2 imagepos;"
- "uniform vec2 imagesize;"
- "varying vec2 texcoord;"
- "void main()"
- "{"
- " texcoord = position / imagesize;"
- " vec2 pos = position - winhalfsize + imagepos;"
- " pos = pos / winhalfsize;"
- " gl_Position = vec4( pos, 0.0, 1.0);"
- "}");
- length = strlen(source);
- glShaderSource(glsl->image_vshader, 1, (const GLchar**)&source, &length);
- glCompileShader(glsl->image_vshader);
- free(source);
-
- glGetShaderiv(glsl->image_vshader, GL_COMPILE_STATUS, &action_ok);
- if (!action_ok) {
- fprintf(stderr, "Failed to compile image vshader :\n");
- display_log(glsl->image_vshader, glGetShaderiv, glGetShaderInfoLog);
- return (1);
- }
-
- glsl->image_fshader = glCreateShader(GL_FRAGMENT_SHADER);
- source = strdup("#version 110 \n"
- "uniform sampler2D texture;"
- "varying vec2 texcoord;"
- "void main()"
- "{"
- " gl_FragColor = texture2D(texture, texcoord);"
- "}");
- length = strlen(source);
- glShaderSource(glsl->image_fshader, 1, (const GLchar**)&source, &length);
- glCompileShader(glsl->image_fshader);
- free(source);
-
- glGetShaderiv(glsl->image_fshader, GL_COMPILE_STATUS, &action_ok);
- if (!action_ok) {
- fprintf(stderr, "Failed to compile image fshader :\n");
- display_log(glsl->image_fshader, glGetShaderiv, glGetShaderInfoLog);
- return (1);
- }
-
- glsl->image_program = glCreateProgram();
- glAttachShader(glsl->image_program, glsl->image_vshader);
- glAttachShader(glsl->image_program, glsl->image_fshader);
- glLinkProgram(glsl->image_program);
-
- glGetProgramiv(glsl->image_program, GL_LINK_STATUS, &action_ok);
- if (!action_ok) {
- fprintf(stderr, "Failed to link image shader program:\n");
- display_log(glsl->image_program, glGetProgramiv, glGetProgramInfoLog);
- return (1);
- }
-
- glFlush();
-
- return (0);
-}
-
-
-
-
-int mlx_shaders_font(glsl_info_t *glsl)
-{
- char *source;
- int length;
- GLint action_ok;
-
- glsl->font_vshader = glCreateShader(GL_VERTEX_SHADER);
- source = strdup("#version 110 \n"
- "attribute vec2 position;"
- "uniform vec2 winhalfsize;"
- "uniform vec2 fontposinwin;"
- "uniform vec2 fontposinatlas;"
- "uniform vec2 fontatlassize;"
- "varying vec2 texcoord;"
- "void main()"
- "{"
-#ifdef STRINGPUTX11
- " texcoord = (position * vec2(1.4, -1.4) + fontposinatlas ) / fontatlassize;"
-#else
- " texcoord = (position * vec2(1.0, -1.0) + fontposinatlas ) / fontatlassize;"
-#endif
- " vec2 pos = position - winhalfsize + fontposinwin;"
- " pos = pos / winhalfsize;"
- " gl_Position = vec4( pos, 0.0, 1.0);"
- "}");
- length = strlen(source);
- glShaderSource(glsl->font_vshader, 1, (const GLchar**)&source, &length);
- glCompileShader(glsl->font_vshader);
- free(source);
-
- glGetShaderiv(glsl->font_vshader, GL_COMPILE_STATUS, &action_ok);
- if (!action_ok) {
- fprintf(stderr, "Failed to compile font vshader :\n");
- display_log(glsl->font_vshader, glGetShaderiv, glGetShaderInfoLog);
- return (1);
- }
-
- glsl->font_fshader = glCreateShader(GL_FRAGMENT_SHADER);
- source = strdup("#version 110 \n"
- "uniform sampler2D texture;"
- "uniform vec4 color;"
- "varying vec2 texcoord;"
- "void main()"
- "{"
- " gl_FragColor = color * texture2D(texture, texcoord);"
- "}");
- length = strlen(source);
- glShaderSource(glsl->font_fshader, 1, (const GLchar**)&source, &length);
- glCompileShader(glsl->font_fshader);
- free(source);
-
- glGetShaderiv(glsl->font_fshader, GL_COMPILE_STATUS, &action_ok);
- if (!action_ok) {
- fprintf(stderr, "Failed to compile font fshader :\n");
- display_log(glsl->font_fshader, glGetShaderiv, glGetShaderInfoLog);
- return (1);
- }
-
- glsl->font_program = glCreateProgram();
- glAttachShader(glsl->font_program, glsl->font_vshader);
- glAttachShader(glsl->font_program, glsl->font_fshader);
- glLinkProgram(glsl->font_program);
-
- glGetProgramiv(glsl->font_program, GL_LINK_STATUS, &action_ok);
- if (!action_ok) {
- fprintf(stderr, "Failed to link font shader program:\n");
- display_log(glsl->font_program, glGetProgramiv, glGetProgramInfoLog);
- return (1);
- }
-
- glFlush();
-
- return (0);
-}
-
-
-
-int mlx_shaders(glsl_info_t *glsl)
-{
- return (mlx_shaders_pixel(glsl) + mlx_shaders_image(glsl) + mlx_shaders_font(glsl));
-}
diff --git a/minilibx/mlx_string_put.c b/minilibx/mlx_string_put.c
new file mode 100755
index 0000000..8492a09
--- /dev/null
+++ b/minilibx/mlx_string_put.c
@@ -0,0 +1,26 @@
+/*
+ ** mlx_string_put.c for MiniLibX in
+ **
+ ** Made by Charlie Root
+ ** Login <ol@epitech.net>
+ **
+ ** Started on Mon Jul 31 19:01:33 2000 Charlie Root
+** Last update Tue Sep 25 17:11:47 2001 Charlie Root
+ */
+
+
+#include "mlx_int.h"
+
+
+
+int mlx_string_put(t_xvar *xvar,t_win_list *win,
+ int x,int y,int color,char *string)
+{
+ XGCValues xgcv;
+
+ xgcv.foreground = mlx_int_get_good_color(xvar,color);
+ XChangeGC(xvar->display,win->gc,GCForeground,&xgcv);
+ XDrawString(xvar->display,win->window,win->gc,x,y,string,strlen(string));
+ if (xvar->do_flush)
+ XFlush(xvar->display);
+}
diff --git a/minilibx/mlx_xpm.c b/minilibx/mlx_xpm.c
index 78d8c9b..1ab8acd 100644..100755
--- a/minilibx/mlx_xpm.c
+++ b/minilibx/mlx_xpm.c
@@ -1,36 +1,24 @@
-// mlx xpm
-// by ol
-
-#include <OpenGL/gl3.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <sys/mman.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <string.h>
-#include "mlx_int.h"
-
-typedef struct s_xpm_col
-{
- int name;
- int col;
-} t_xpm_col;
+/*
+** xpm-read.c for MinilibX in
+**
+** Made by Charlie Root
+** Login <ol@epitech.net>
+**
+** Started on Tue Dec 11 15:25:27 2001 olivier crouzet
+** Last update Sat Oct 1 14:56:13 2005 Olivier Crouzet
+*/
-struct s_col_name
-{
- char *name;
- int color;
-};
+#include "mlx_int.h"
-//extern struct s_col_name mlx_col_name[];
-#include "mlx_rgb.c"
+extern struct s_col_name mlx_col_name[];
#define RETURN { if (colors) free(colors); if (tab) free(tab); \
if (colors_direct) free(colors_direct); \
- if (img) mlx_destroy_image(xvar, img); \
- return ((void *)0); }
+ if (img) {XDestroyImage(img->image); \
+ XFreePixmap(xvar->display,img->pix);free(img);} \
+ return ((void *)0);}
@@ -109,9 +97,8 @@ int mlx_int_get_text_rgb(char *name, char *end)
}
-void mlx_int_xpm_set_pixel(mlx_img_list_t *img, char *data, int opp, int col, int x)
+int mlx_int_xpm_set_pixel(t_img *img, char *data, int opp, int col, int x)
{
- /*
int dec;
dec = opp;
@@ -123,13 +110,10 @@ void mlx_int_xpm_set_pixel(mlx_img_list_t *img, char *data, int opp, int col, in
*(data+x*opp+opp-dec-1) = col&0xFF;
col >>= 8;
}
- */
- // opp is 4, do it the simple way
- *((unsigned int *)(data+4*x)) = col;
}
-void *mlx_int_parse_xpm(mlx_ptr_t *xvar,void *info,int info_size,char *(*f)())
+void *mlx_int_parse_xpm(t_xvar *xvar,void *info,int info_size,char *(*f)())
{
int pos;
char *line;
@@ -146,11 +130,14 @@ void *mlx_int_parse_xpm(mlx_ptr_t *xvar,void *info,int info_size,char *(*f)())
int x;
int i;
int j;
- mlx_img_list_t *img;
+ t_img *img;
t_xpm_col *colors;
int *colors_direct;
int width;
int height;
+ XImage *clip_img;
+ XGCValues xgcv;
+ Pixmap clip_pix;
colors = 0;
colors_direct = 0;
@@ -189,39 +176,35 @@ void *mlx_int_parse_xpm(mlx_ptr_t *xvar,void *info,int info_size,char *(*f)())
if (!tab[j])
RETURN;
-
- rgb_col = mlx_int_get_text_rgb(tab[j], tab[j+1]);
- /*
+
if ((rgb_col = mlx_int_get_text_rgb(tab[j], tab[j+1]))==-1)
{
- if (!(clip_data = malloc(4*width*height)) || // ok, nice size ..
+ if (!(clip_data = malloc(4*width*height)) || /* ok, nice size .. */
!(clip_img = XCreateImage(xvar->display, xvar->visual,
1, XYPixmap, 0, clip_data,
width, height, 8, (width+7)/8)) )
RETURN;
memset(clip_data, 0xFF, 4*width*height);
}
- */
+
if (method)
- colors_direct[mlx_int_get_col_name(line,cpp)] = rgb_col;
- // rgb_col>=0?mlx_get_color_value(xvar, rgb_col):rgb_col;
+ colors_direct[mlx_int_get_col_name(line,cpp)] =
+ rgb_col>=0?mlx_get_color_value(xvar, rgb_col):rgb_col;
else
{
colors[i].name = mlx_int_get_col_name(line,cpp);
- colors[i].col = rgb_col; // rgb_col>=0?mlx_get_color_value(xvar,rgb_col):rgb_col;
+ colors[i].col = rgb_col>=0?mlx_get_color_value(xvar,rgb_col):rgb_col;
}
free(tab);
- tab = 0;
}
if (!(img = mlx_new_image(xvar,width,height)))
RETURN;
- //opp = img->bpp/8;
- opp = 4;
+ opp = img->bpp/8;
i = height;
- data = img->buffer;
+ data = img->data;
while (i--)
{
if (!(line = f(info,&pos,info_size)))
@@ -243,18 +226,14 @@ void *mlx_int_parse_xpm(mlx_ptr_t *xvar,void *info,int info_size,char *(*f)())
j = 0;
}
}
- // if (col==-1)
- // XPutPixel(clip_img, x, height-1-i, 0);
- // else
if (col==-1)
- col = 0xFF000000;
- mlx_int_xpm_set_pixel(img, data, opp, col, x);
+ XPutPixel(clip_img, x, height-1-i, 0);
+ else
+ mlx_int_xpm_set_pixel(img, data, opp, col, x);
x ++;
}
- // data += img->size_line;
- data += img->width*4;
+ data += img->size_line;
}
- /*
if (clip_data)
{
if (!(clip_pix = XCreatePixmap(xvar->display, xvar->root,
@@ -272,7 +251,6 @@ void *mlx_int_parse_xpm(mlx_ptr_t *xvar,void *info,int info_size,char *(*f)())
XSync(xvar->display, False);
XDestroyImage(clip_img);
}
- */
if (colors)
free(colors);
if (colors_direct)
@@ -281,7 +259,7 @@ void *mlx_int_parse_xpm(mlx_ptr_t *xvar,void *info,int info_size,char *(*f)())
}
-void mlx_int_file_get_rid_comment(char *ptr, int size)
+int mlx_int_file_get_rid_comment(char *ptr, int size)
{
int com_begin;
int com_end;
@@ -299,13 +277,14 @@ void mlx_int_file_get_rid_comment(char *ptr, int size)
}
-void *mlx_xpm_file_to_image(mlx_ptr_t *xvar,char *file,int *width,int *height)
+void *mlx_xpm_file_to_image(t_xvar *xvar,char const *file,int *width,int *height)
{
int fd;
int size;
char *ptr;
- mlx_img_list_t *img;
+ t_img *img;
+ fd = -1;
if ((fd = open(file,O_RDONLY))==-1 || (size = lseek(fd,0,SEEK_END))==-1 ||
(ptr = mmap(0,size,PROT_WRITE|PROT_READ,MAP_PRIVATE,fd,0))==
(void *)MAP_FAILED)
@@ -315,7 +294,7 @@ void *mlx_xpm_file_to_image(mlx_ptr_t *xvar,char *file,int *width,int *height)
return ((void *)0);
}
mlx_int_file_get_rid_comment(ptr, size);
- if ((img = mlx_int_parse_xpm(xvar,ptr,size,mlx_int_get_line)))
+ if (img = mlx_int_parse_xpm(xvar,ptr,size,mlx_int_get_line))
{
*width = img->width;
*height = img->height;
@@ -325,11 +304,11 @@ void *mlx_xpm_file_to_image(mlx_ptr_t *xvar,char *file,int *width,int *height)
return (img);
}
-void *mlx_xpm_to_image(mlx_ptr_t *xvar,char **xpm_data,int *width,int *height)
+void *mlx_xpm_to_image(t_xvar *xvar,char **xpm_data,int *width,int *height)
{
- mlx_img_list_t *img;
+ t_img *img;
- if ((img = mlx_int_parse_xpm(xvar,xpm_data,0,mlx_int_static_line)))
+ if (img = mlx_int_parse_xpm(xvar,xpm_data,0,mlx_int_static_line))
{
*width = img->width;
*height = img->height;
diff --git a/minilibx/mlx_xpm.c.ok b/minilibx/mlx_xpm.c.ok
new file mode 100755
index 0000000..73f2d9e
--- /dev/null
+++ b/minilibx/mlx_xpm.c.ok
@@ -0,0 +1,310 @@
+/*
+** xpm-read.c for MinilibX in
+**
+** Made by Charlie Root
+** Login <ol@epitech.net>
+**
+** Started on Tue Dec 11 15:25:27 2001 olivier crouzet
+** Last update Sat Oct 1 14:40:55 2005 Olivier Crouzet
+*/
+
+
+#include "mlx_int.h"
+
+extern struct s_col_name mlx_col_name[];
+
+
+#define RETURN { if (colors) free(colors); if (tab) free(tab); \
+ if (colors_direct) free(colors_direct); \
+ if (img) {XDestroyImage(img->image); \
+ XFreePixmap(xvar->display,img->pix);free(img);} \
+ return ((void *)0);}
+
+
+
+
+char *mlx_int_get_line(char *ptr,int *pos,int size)
+{
+ int pos2;
+ int pos3;
+ int pos4;
+
+ if ((pos2 = mlx_int_str_str(ptr+*pos,"\"",size-*pos))==-1)
+ return ((char *)0);
+ if ((pos3 = mlx_int_str_str(ptr+*pos+pos2+1,"\"",size-*pos-pos2-1))==-1)
+ return ((char *)0);
+ *(ptr+*pos+pos2) = 0;
+ *(ptr+*pos+pos2+1+pos3) = 0;
+ pos4 = *pos+pos2+1;
+ *pos += pos2+pos3+2;
+ return (ptr+pos4);
+}
+
+
+
+char *mlx_int_static_line(char **xpm_data,int *pos,int size)
+{
+ static char *copy = 0;
+ static int len = 0;
+ int len2;
+ char *str;
+
+ str = xpm_data[(*pos)++];
+ if ((len2 = strlen(str))>len)
+ {
+ if (copy)
+ free(copy);
+ if (!(copy = malloc(len2+1)))
+ return ((char *)0);
+ len = len2;
+ }
+ /* strcpy(copy,str); */
+ strlcpy(copy, str, len2+1);
+ return (copy);
+}
+
+
+int mlx_int_get_col_name(char *str,int size)
+{
+ int result;
+
+ result = 0;
+ while (size--)
+ result = (result<<8)+*(str++);
+ return (result);
+}
+
+int mlx_int_get_text_rgb(char *name)
+{
+ int i;
+
+ if (*name == '#')
+ return (strtol(name+1,0,16));
+ i = 0;
+ while (mlx_col_name[i].name)
+ {
+ if (!strcasecmp(mlx_col_name[i].name, name))
+ return (mlx_col_name[i].color);
+ i ++;
+ }
+ return (0);
+}
+
+
+int mlx_int_xpm_set_pixel(t_img *img, char *data, int opp, int col, int x)
+{
+ int dec;
+
+ dec = opp;
+ while (dec--)
+ {
+ if (img->image->byte_order)
+ *(data+x*opp+dec) = col&0xFF;
+ else
+ *(data+x*opp+opp-dec-1) = col&0xFF;
+ col >>= 8;
+ }
+}
+
+
+void *mlx_int_parse_xpm(t_xvar *xvar,void *info,int info_size,char *(*f)())
+{
+ int pos;
+ char *line;
+ char **tab;
+ char *data;
+ char *clip_data;
+ int nc;
+ int opp;
+ int cpp;
+ int col;
+ int rgb_col;
+ int col_name;
+ int method;
+ int x;
+ int i;
+ int j;
+ t_img *img;
+ t_xpm_col *colors;
+ int *colors_direct;
+ int width;
+ int height;
+ XImage *clip_img;
+ XGCValues xgcv;
+ Pixmap clip_pix;
+
+ colors = 0;
+ colors_direct = 0;
+ img = 0;
+ tab = 0;
+ pos = 0;
+ if (!(line = f(info,&pos,info_size)) ||
+ !(tab = mlx_int_str_to_wordtab(line)) || !(width = atoi(tab[0])) ||
+ !(height = atoi(tab[1])) || !(nc = atoi(tab[2])) ||
+ !(cpp = atoi(tab[3])) )
+ RETURN;
+ free(tab);
+ tab = 0;
+
+ method = 0;
+ if (cpp<=2)
+ {
+ method = 1;
+ if (!(colors_direct = malloc((cpp==2?65536:256)*sizeof(int))))
+ RETURN;
+ }
+ else
+ if (!(colors = malloc(nc*sizeof(*colors))))
+ RETURN;
+
+ clip_data = 0;
+
+ i = nc;
+ while (i--)
+ {
+ if (!(line = f(info,&pos,info_size)) ||
+ !(tab = mlx_int_str_to_wordtab(line+cpp)) )
+ RETURN;
+ j = 0;
+ while (tab[j] && strcmp(tab[j++],"c"));
+ if (!tab[j])
+ RETURN;
+
+ if ((rgb_col = mlx_int_get_text_rgb(tab[j]))==-1)
+ {
+ if (!(clip_data = malloc(4*width*height)) || /* ok, nice size .. */
+ !(clip_img = XCreateImage(xvar->display, xvar->visual,
+ 1, XYPixmap, 0, clip_data,
+ width, height, 8, (width+7)/8)) )
+ RETURN;
+ memset(clip_data, 0xFF, 4*width*height);
+ }
+
+ if (method)
+ colors_direct[mlx_int_get_col_name(line,cpp)] =
+ rgb_col>=0?mlx_get_color_value(xvar, rgb_col):rgb_col;
+ else
+ {
+ colors[i].name = mlx_int_get_col_name(line,cpp);
+ colors[i].col = rgb_col>=0?mlx_get_color_value(xvar,rgb_col):rgb_col;
+ }
+ free(tab);
+ }
+
+ if (!(img = mlx_new_image(xvar,width,height)))
+ RETURN;
+ opp = img->bpp/8;
+
+
+ i = height;
+ data = img->data;
+ while (i--)
+ {
+ if (!(line = f(info,&pos,info_size)))
+ RETURN;
+ x = 0;
+ while (x<width)
+ {
+ col = 0;
+ col_name = mlx_int_get_col_name(line+cpp*x,cpp);
+ if (method)
+ col = colors_direct[col_name];
+ else
+ {
+ j = nc;
+ while (j--)
+ if (colors[j].name==col_name)
+ {
+ col = colors[j].col;
+ j = 0;
+ }
+ }
+ if (col==-1)
+ XPutPixel(clip_img, x, height-1-i, 0);
+ else
+ mlx_int_xpm_set_pixel(img, data, opp, col, x);
+ x ++;
+ }
+ data += img->size_line;
+ }
+ if (clip_data)
+ {
+ if (!(clip_pix = XCreatePixmap(xvar->display, xvar->root,
+ width, height, 1)) )
+ RETURN;
+ img->gc = XCreateGC(xvar->display, clip_pix, 0, &xgcv);
+ XPutImage(xvar->display, clip_pix, img->gc, clip_img,
+ 0, 0, 0, 0, width, height);
+ XFreeGC(xvar->display, img->gc);
+ xgcv.clip_mask = clip_pix;
+ xgcv.function = GXcopy;
+ xgcv.plane_mask = AllPlanes;
+ img->gc = XCreateGC(xvar->display, xvar->root, GCClipMask|GCFunction|
+ GCPlaneMask, &xgcv);
+ XSync(xvar->display, False);
+ XDestroyImage(clip_img);
+ }
+ if (colors)
+ free(colors);
+ if (colors_direct)
+ free(colors_direct);
+ return (img);
+}
+
+
+int mlx_int_file_get_rid_comment(char *ptr, int size)
+{
+ int com_begin;
+ int com_end;
+
+ while ((com_begin = mlx_int_str_str_cote(ptr,"/*",size))!=-1)
+ {
+ com_end = mlx_int_str_str(ptr+com_begin+2,"*/",size-com_begin-2);
+ memset(ptr+com_begin,' ',com_end+4);
+ }
+ while ((com_begin = mlx_int_str_str_cote(ptr,"//",size))!=-1)
+ {
+ com_end = mlx_int_str_str(ptr+com_begin+2,"\n",size-com_begin-2);
+ memset(ptr+com_begin,' ',com_end+3);
+ }
+}
+
+
+void *mlx_xpm_file_to_image(t_xvar *xvar,char const *file,int *width,int *height)
+{
+ int fd;
+ int size;
+ char *ptr;
+ t_img *img;
+
+ fd = -1;
+ if ((fd = open(file,O_RDONLY))==-1 || (size = lseek(fd,0,SEEK_END))==-1 ||
+ (ptr = mmap(0,size,PROT_WRITE|PROT_READ,MAP_PRIVATE,fd,0))==
+ (void *)MAP_FAILED)
+ {
+ if (fd>=0)
+ close(fd);
+ return ((void *)0);
+ }
+ mlx_int_file_get_rid_comment(ptr, size);
+ if (img = mlx_int_parse_xpm(xvar,ptr,size,mlx_int_get_line))
+ {
+ *width = img->width;
+ *height = img->height;
+ }
+ munmap(ptr,size);
+ close(fd);
+ return (img);
+}
+
+void *mlx_xpm_to_image(t_xvar *xvar,char **xpm_data,int *width,int *height)
+{
+ t_img *img;
+
+ if (img = mlx_int_parse_xpm(xvar,xpm_data,0,mlx_int_static_line))
+ {
+ *width = img->width;
+ *height = img->height;
+ }
+ return (img);
+}
diff --git a/minilibx/rgb2c.pl b/minilibx/rgb2c.pl
new file mode 100755
index 0000000..9ef39a0
--- /dev/null
+++ b/minilibx/rgb2c.pl
@@ -0,0 +1,38 @@
+#!/usr/bin/perl
+#
+## rgb2c.pl for MiniLibX in /home/boulon/work/c/raytraceur/minilibx
+##
+## Made by Olivier Crouzet
+## Login <ol@epitech.net>
+##
+## Started on Tue Oct 5 16:33:46 2004 Olivier Crouzet
+## Last update Tue Oct 5 16:36:11 2004 Olivier Crouzet
+##
+
+
+#
+# Generate a .c file with encoded colors, from the XFree86 rgb.txt file.
+#
+
+open(RGB, "/usr/X11/lib/X11/rgb.txt");
+
+
+printf("/*\n** This is a generated file with rgb2c.pl and rgb.txt from\n");
+printf("** the XFree86 distribution.\n*/\n\n");
+printf("struct s_col_name mlx_col_name[] =\n{\n");
+
+while (<RGB>)
+{
+ @tab = split;
+ if ($tab[0] ne "!")
+ {
+ $color = $tab[3];
+ if ("$tab[4]" ne "")
+ {
+ $color = "$tab[3] $tab[4]";
+ }
+ printf(" { \"%s\" , 0x%x },\n", $color, $tab[0]*65536+$tab[1]*256+$tab[2]);
+ }
+}
+
+printf(" { 0, 0 }\n};\n");
diff --git a/minilibx/test/Makefile.mk b/minilibx/test/Makefile.mk
new file mode 100755
index 0000000..5238a12
--- /dev/null
+++ b/minilibx/test/Makefile.mk
@@ -0,0 +1,24 @@
+
+
+INC=%%%%
+
+INCLIB=$(INC)/../lib
+
+CC=gcc
+
+CFLAGS= -I$(INC) -O3 -I..
+
+NAME= mlx-test
+SRC = main.c
+OBJ = $(SRC:.c=.o)
+
+all :$(NAME)
+
+$(NAME) :$(OBJ)
+ $(CC) -o $(NAME) $(OBJ) $(shell pkg-config --libs --static mlx)
+
+clean :
+ rm -f $(NAME) $(OBJ) *~ core *.core
+
+
+re : clean all
diff --git a/minilibx/test/main.c b/minilibx/test/main.c
new file mode 100755
index 0000000..ea132b4
--- /dev/null
+++ b/minilibx/test/main.c
@@ -0,0 +1,284 @@
+
+#include "mlx.h"
+#include "mlx_int.h"
+
+#define WIN1_SX 242
+#define WIN1_SY 242
+#define IM1_SX 42
+#define IM1_SY 42
+#define IM3_SX 242
+#define IM3_SY 242
+
+void *mlx;
+void *win1;
+void *win2;
+void *win3;
+void *im1;
+void *im2;
+void *im3;
+void *im4;
+int bpp1;
+int bpp2;
+int bpp3;
+int bpp4;
+int sl1;
+int sl2;
+int sl3;
+int sl4;
+int endian1;
+int endian2;
+int endian3;
+int endian4;
+char *data1;
+char *data2;
+char *data3;
+char *data4;
+int xpm1_x;
+int xpm1_y;
+
+int local_endian;
+
+int expose_win1(void *p)
+{
+ mlx_put_image_to_window(mlx,win1,im3,0,0);
+}
+
+int expose_win2(void *p)
+{
+ mlx_put_image_to_window(mlx,win2,im4,0,0);
+ mlx_put_image_to_window(mlx,win2,im2,0,0);
+}
+
+int key_win1(int key,void *p)
+{
+ printf("Key in Win1 : %d\n",key);
+ if (key==0xFF1B)
+ exit(0);
+}
+
+int key_win2(int key,void *p)
+{
+ printf("Key in Win2 : %d\n",key);
+ if (key==0xFF1B)
+ exit(0);
+}
+
+int key_win3(int key,void *p)
+{
+ printf("Key in Win3 : %d\n",key);
+ if (key==0xFF1B)
+ mlx_destroy_window(mlx,win3);
+}
+
+int mouse_win1(int button,int x,int y, void *p)
+{
+ printf("Mouse in Win1, button %d at %dx%d.\n",button,x,y);
+}
+
+int mouse_win2(int button,int x,int y, void *p)
+{
+ printf("Mouse in Win2, button %d at %dx%d.\n",button,x,y);
+}
+
+int mouse_win3(int x,int y, void *p)
+{
+ printf("Mouse moving in Win3, at %dx%d.\n",x,y);
+}
+
+
+int main()
+{
+ int a;
+
+ printf("MinilibX Test Program\n");
+ a = 0x11223344;
+ if (((unsigned char *)&a)[0] == 0x11)
+ local_endian = 1;
+ else
+ local_endian = 0;
+ printf(" => Local Endian : %d\n",local_endian);
+
+ printf(" => Connection ...");
+ if (!(mlx = mlx_init()))
+ {
+ printf(" !! KO !!\n");
+ exit(1);
+ }
+ printf("OK (use_xshm %d pshm_format %d)\n",((t_xvar *)mlx)->use_xshm,((t_xvar *)mlx)->pshm_format);
+
+ printf(" => Window1 %dx%d \"Title 1\" ...",WIN1_SX,WIN1_SY);
+ if (!(win1 = mlx_new_window(mlx,WIN1_SX,WIN1_SY,"Title1")))
+ {
+ printf(" !! KO !!\n");
+ exit(1);
+ }
+ printf("OK\n");
+
+ printf(" => Colormap sans event ...");
+ color_map_1(win1,WIN1_SX,WIN1_SY);
+ printf("OK\n");
+ sleep(2);
+
+ printf(" => Clear Window ...");
+ mlx_clear_window(mlx,win1);
+ printf("OK\n");
+ sleep(2);
+
+ printf(" => Image1 ZPixmap %dx%d ...",IM1_SX,IM1_SY);
+ if (!(im1 = mlx_new_image(mlx,IM1_SX,IM1_SY)))
+ {
+ printf(" !! KO !!\n");
+ exit(1);
+ }
+ data1 = mlx_get_data_addr(im1,&bpp1,&sl1,&endian1);
+ printf("OK (bpp1: %d, sizeline1: %d endian: %d type: %d)\n",bpp1,sl1,endian1,
+ ((t_img *)im1)->type);
+
+ printf(" => Fill Image1 ...");
+ color_map_2(data1,bpp1,sl1,IM1_SX,IM1_SY,endian1, 1);
+ printf("OK (pixmap : %d)\n",(int)((t_img *)im1)->pix);
+
+ printf(" => Put Image1 ...");
+ mlx_put_image_to_window(mlx,win1,im1,20,20);
+ printf("OK\n");
+ sleep(2);
+
+ printf(" => Destroy Image1 ... ");
+ mlx_destroy_image(mlx, im1);
+ printf("OK\n");
+ sleep(2);
+
+ printf(" => Image3 ZPixmap %dx%d ...",IM3_SX,IM3_SY);
+ if (!(im3 = mlx_new_image(mlx,IM3_SX,IM3_SY)))
+ {
+ printf(" !! KO !!\n");
+ exit(1);
+ }
+ data3 = mlx_get_data_addr(im3,&bpp3,&sl3,&endian3);
+ printf("OK (bpp3 %d, sizeline3 %d endian3 %d type %d)\n",bpp3,sl3,endian3,
+ ((t_img *)im3)->type);
+
+ printf(" => Fill Image3 ...");
+ color_map_2(data3,bpp3,sl3,IM3_SX,IM3_SY,endian3, 1);
+ printf("OK (pixmap : %d)\n",(int)((t_img *)im3)->pix);
+
+ printf(" => Put Image3 ...");
+ mlx_put_image_to_window(mlx,win1,im3,20,20);
+ printf("OK\n");
+ sleep(2);
+
+ printf(" => String ...");
+ mlx_string_put(mlx,win1,5,WIN1_SY/2,0xFF99FF,"String output");
+ mlx_string_put(mlx,win1,15,WIN1_SY/2+20,0x00FFFF,"MinilibX test");
+ printf("OK\n");
+ sleep(2);
+
+ printf(" => Xpm from file ...");
+ if (!(im2 = mlx_xpm_file_to_image(mlx,"open.xpm",&xpm1_x,&xpm1_y)))
+ {
+ printf(" !! KO !!\n");
+ exit(1);
+ }
+ data2 = mlx_get_data_addr(im2,&bpp2,&sl2,&endian2);
+ printf("OK (xpm %dx%d)(img bpp2: %d, sizeline2: %d endian: %d type: %d)\n",
+ xpm1_x,xpm1_y,bpp2,sl2,endian2,((t_img *)im2)->type);
+ sleep(2);
+
+ printf(" => Put xpm ...");
+ mlx_put_image_to_window(mlx,win1,im2,0,0);
+ mlx_put_image_to_window(mlx,win1,im2,100,100);
+ printf("OK\n");
+ sleep(2);
+
+ printf(" => 2nd window,");
+ win2 = mlx_new_window(mlx,WIN1_SX,WIN1_SY,"Title2");
+ if (!(im4 = mlx_new_image(mlx,IM3_SX, IM3_SY)))
+ {
+ printf(" !! KO !!\n");
+ exit(1);
+ }
+ data4 = mlx_get_data_addr(im4,&bpp4,&sl4,&endian4);
+ color_map_2(data4,bpp4,sl4,IM3_SX,IM3_SY,endian4, 2);
+
+ printf(" 3rd window, Installing hooks ...");
+ win3 = mlx_new_window(mlx,WIN1_SX,WIN1_SY,"Title3");
+ mlx_expose_hook(win1,expose_win1,0);
+ mlx_mouse_hook(win1,mouse_win1,0);
+ mlx_key_hook(win1,key_win1,0);
+ mlx_expose_hook(win2,expose_win2,0);
+ mlx_mouse_hook(win2,mouse_win2,0);
+ mlx_key_hook(win2,key_win2,0);
+ mlx_key_hook(win3,key_win3,0);
+
+ mlx_hook(win3, MotionNotify, PointerMotionMask, mouse_win3, 0);
+
+ printf("OK\nNow in Loop. Just play. Esc in 3 to destroy, 1&2 to quit.\n");
+
+ mlx_loop(mlx);
+}
+
+
+int color_map_1(void *win,int w,int h)
+{
+ int x;
+ int y;
+ int color;
+
+ x = w;
+ while (x--)
+ {
+ y = h;
+ while (y--)
+ {
+ color = (x*255)/w+((((w-x)*255)/w)<<16)+(((y*255)/h)<<8);
+ mlx_pixel_put(mlx,win,x,y,color);
+ }
+ }
+}
+
+
+int color_map_2(unsigned char *data,int bpp,int sl,int w,int h,int endian, int type)
+{
+ int x;
+ int y;
+ int opp;
+ int dec;
+ int color;
+ int color2;
+ unsigned char *ptr;
+
+ opp = bpp/8;
+ printf("(opp : %d) ",opp);
+ y = h;
+ while (y--)
+ {
+ ptr = data+y*sl;
+ x = w;
+ while (x--)
+ {
+ if (type==2)
+ color = (y*255)/w+((((w-x)*255)/w)<<16)
+ +(((y*255)/h)<<8);
+ else
+ color = (x*255)/w+((((w-x)*255)/w)<<16)+(((y*255)/h)<<8);
+ color2 = mlx_get_color_value(mlx,color);
+ dec = opp;
+ while (dec--)
+ if (endian==local_endian)
+ {
+ if (endian)
+ *(ptr+x*opp+dec) = ((unsigned char *)(&color2))[4-opp+dec];
+ else
+ *(ptr+x*opp+dec) = ((unsigned char *)(&color2))[dec];
+ }
+ else
+ {
+ if (endian)
+ *(ptr+x*opp+dec) = ((unsigned char *)(&color2))[opp-1-dec];
+ else
+ *(ptr+x*opp+dec) = ((unsigned char *)(&color2))[3-dec];
+ }
+ }
+ }
+
+}
diff --git a/minilibx/test/new_win.c b/minilibx/test/new_win.c
new file mode 100755
index 0000000..62bed4b
--- /dev/null
+++ b/minilibx/test/new_win.c
@@ -0,0 +1,31 @@
+
+
+
+#include "mlx.h"
+
+
+void *mlx;
+void *win1;
+void *win2;
+
+
+
+int gere_mouse(int x,int y,int button,void*toto)
+{
+ printf("Mouse event - new win\n");
+ mlx_destroy_window(mlx,win1);
+ win1 = mlx_new_window(mlx,random()%500,random()%500,"new win");
+ mlx_mouse_hook(win1,gere_mouse,0);
+}
+
+
+int main()
+{
+ srandom(time(0));
+ mlx = mlx_init();
+ win1 = mlx_new_window(mlx,300,300,"win1");
+ win2 = mlx_new_window(mlx,600,600,"win2");
+ mlx_mouse_hook(win1,gere_mouse,0);
+ mlx_mouse_hook(win2,gere_mouse,0);
+ mlx_loop(mlx);
+}
diff --git a/minilibx/test/open.xpm b/minilibx/test/open.xpm
new file mode 100755
index 0000000..87be371
--- /dev/null
+++ b/minilibx/test/open.xpm
@@ -0,0 +1,1439 @@
+/* XPM */
+static char * open30_2_xpm[] = {
+"64 64 1372 2",
+" c None",
+". c #08090D",
+"+ c #1A1E23",
+"@ c #1F2124",
+"# c #060809",
+"$ c #1A1E21",
+"% c #4F606C",
+"& c #3D4145",
+"* c #868D93",
+"= c #454E56",
+"- c #627481",
+"; c #667C8A",
+"> c #2D3031",
+", c #D7E1E7",
+"' c #4D5157",
+") c #8997A5",
+"! c #282E31",
+"~ c #333B41",
+"{ c #A5C6DB",
+"] c #718C9B",
+"^ c #000000",
+"/ c #181B1F",
+"( c #262828",
+"_ c #D2DEE7",
+": c #B8C5D0",
+"< c #151719",
+"[ c #08090B",
+"} c #272B30",
+"| c #2D3037",
+"1 c #26282C",
+"2 c #1A1D1F",
+"3 c #B1CADB",
+"4 c #56646E",
+"5 c #080809",
+"6 c #080A0C",
+"7 c #1E2126",
+"8 c #98B7C9",
+"9 c #A2CAE2",
+"0 c #7FA1B5",
+"a c #06080A",
+"b c #252729",
+"c c #A7ADB2",
+"d c #272B2E",
+"e c #1E2023",
+"f c #C8D8E5",
+"g c #C9DDED",
+"h c #8996A3",
+"i c #6B7782",
+"j c #C7DFF0",
+"k c #CCE0F0",
+"l c #AFC1CF",
+"m c #47535B",
+"n c #B0D3E8",
+"o c #7E99A9",
+"p c #738493",
+"q c #97B4C7",
+"r c #53606A",
+"s c #6E8996",
+"t c #A1CBE3",
+"u c #9CC6DE",
+"v c #90B5CB",
+"w c #171D22",
+"x c #1E2629",
+"y c #020202",
+"z c #ABB3BA",
+"A c #BBC4C8",
+"B c #222323",
+"C c #141617",
+"D c #5D6164",
+"E c #ACB5BC",
+"F c #676D74",
+"G c #BDD4E5",
+"H c #B3D1E7",
+"I c #B0D1E7",
+"J c #728A99",
+"K c #94AEBF",
+"L c #B1D1E7",
+"M c #505C64",
+"N c #7B98A9",
+"O c #A1CBE0",
+"P c #99C3D9",
+"Q c #475863",
+"R c #A0C9DE",
+"S c #9CC6DA",
+"T c #9ECAE1",
+"U c #9CC5DD",
+"V c #9AC4DC",
+"W c #263137",
+"X c #3C4A55",
+"Y c #658190",
+"Z c #66686B",
+"` c #7D8085",
+" . c #363839",
+".. c #797E81",
+"+. c #D2DBE1",
+"@. c #DDE9F4",
+"#. c #CADEEF",
+"$. c #778593",
+"%. c #AED0E5",
+"&. c #9EC9DE",
+"*. c #9EC8DF",
+"=. c #9BC1D8",
+"-. c #9EC8DE",
+";. c #6B8596",
+">. c #9BC5DC",
+",. c #9BC6DF",
+"'. c #9CC5DC",
+"). c #688595",
+"!. c #6B8698",
+"~. c #9CC4DC",
+"{. c #9BC4DC",
+"]. c #9DC5DD",
+"^. c #647D8C",
+"/. c #485864",
+"(. c #161A1D",
+"_. c #36444C",
+":. c #95BDD5",
+"<. c #566E7E",
+"[. c #A4AAAD",
+"}. c #E9F2F7",
+"|. c #DEEAF6",
+"1. c #B5D4E9",
+"2. c #A9CFE3",
+"3. c #90B3C9",
+"4. c #9FCAE1",
+"5. c #9BC4DD",
+"6. c #7490A2",
+"7. c #99C2DB",
+"8. c #81A5BA",
+"9. c #9CC5DE",
+"0. c #98C1DA",
+"a. c #5F7889",
+"b. c #96BFD8",
+"c. c #44545F",
+"d. c #565A5E",
+"e. c #DFE6EC",
+"f. c #E6EEF7",
+"g. c #D6E4F2",
+"h. c #BFD6E9",
+"i. c #A9CCE3",
+"j. c #9FC8DD",
+"k. c #9DC6DD",
+"l. c #9CC4DD",
+"m. c #7D9FB0",
+"n. c #98C0D6",
+"o. c #9AC5DD",
+"p. c #97BFD8",
+"q. c #9BC5DF",
+"r. c #2D3840",
+"s. c #626567",
+"t. c #E7ECF5",
+"u. c #E1EAF5",
+"v. c #CEE3F3",
+"w. c #B7D6EA",
+"x. c #A4CBE0",
+"y. c #8AAFC5",
+"z. c #647F90",
+"A. c #648092",
+"B. c #89B0C7",
+"C. c #9CC6DF",
+"D. c #5D7486",
+"E. c #7B9BAF",
+"F. c #84A8BF",
+"G. c #9BC5DD",
+"H. c #96BED5",
+"I. c #4B5D69",
+"J. c #9BC5DE",
+"K. c #536B77",
+"L. c #2E3B41",
+"M. c #1B2124",
+"N. c #3F4F58",
+"O. c #4D5152",
+"P. c #E7EEF3",
+"Q. c #E2EAF5",
+"R. c #CEE2F2",
+"S. c #BAD5E9",
+"T. c #9DC2D7",
+"U. c #5C7281",
+"V. c #232A31",
+"W. c #08090A",
+"X. c #121418",
+"Y. c #131619",
+"Z. c #131719",
+"`. c #87ACC3",
+" + c #7B9BAE",
+".+ c #87ADC3",
+"++ c #8FB5CB",
+"@+ c #678295",
+"#+ c #96C0D8",
+"$+ c #607787",
+"%+ c #6B8595",
+"&+ c #96C1DB",
+"*+ c #6A8595",
+"=+ c #35424A",
+"-+ c #7090A1",
+";+ c #15191C",
+">+ c #2D3033",
+",+ c #DDE5EB",
+"'+ c #D2E3F1",
+")+ c #BAD7EB",
+"!+ c #A9CFE5",
+"~+ c #272F35",
+"{+ c #1C2227",
+"]+ c #4F697B",
+"^+ c #6B8FA9",
+"/+ c #759CB6",
+"(+ c #7BA0BB",
+"_+ c #80A5BC",
+":+ c #88B0C8",
+"<+ c #96C3DB",
+"[+ c #8FB6CD",
+"}+ c #80A1B3",
+"|+ c #556876",
+"1+ c #96BFD7",
+"2+ c #566B77",
+"3+ c #93B8CD",
+"4+ c #637A8D",
+"5+ c #9DC6DE",
+"6+ c #8FB4CA",
+"7+ c #55697A",
+"8+ c #6F8F9F",
+"9+ c #91BDD5",
+"0+ c #283239",
+"a+ c #050406",
+"b+ c #767B80",
+"c+ c #BDC6CE",
+"d+ c #D4E5F3",
+"e+ c #C1D7EA",
+"f+ c #A7CDE4",
+"g+ c #9FC9DE",
+"h+ c #668596",
+"i+ c #6D90AA",
+"j+ c #5C7994",
+"k+ c #60849F",
+"l+ c #6286A1",
+"m+ c #688CA8",
+"n+ c #7298B2",
+"o+ c #82A8C2",
+"p+ c #8FBAD5",
+"q+ c #96C2DB",
+"r+ c #89ADC4",
+"s+ c #96BED6",
+"t+ c #99C2DA",
+"u+ c #6C899A",
+"v+ c #92BBD2",
+"w+ c #9AC4DD",
+"x+ c #5B717D",
+"y+ c #9EC6DE",
+"z+ c #8BB1C9",
+"A+ c #718EA0",
+"B+ c #94C3DB",
+"C+ c #536B78",
+"D+ c #3E505F",
+"E+ c #4E6373",
+"F+ c #2C333C",
+"G+ c #070708",
+"H+ c #040404",
+"I+ c #1A1C1E",
+"J+ c #202326",
+"K+ c #050606",
+"L+ c #23292E",
+"M+ c #A1C0D4",
+"N+ c #9FC9DD",
+"O+ c #97C2DB",
+"P+ c #80A8C1",
+"Q+ c #668AA6",
+"R+ c #4B5D72",
+"S+ c #4C647A",
+"T+ c #5F80A0",
+"U+ c #60859E",
+"V+ c #678AA6",
+"W+ c #739BB5",
+"X+ c #85AEC7",
+"Y+ c #92BDD7",
+"Z+ c #96BFD5",
+"`+ c #627B8A",
+" @ c #89B1C9",
+".@ c #2B353C",
+"+@ c #7597B2",
+"@@ c #779CB8",
+"#@ c #52697C",
+"$@ c #1D2328",
+"%@ c #445663",
+"&@ c #5E7A8D",
+"*@ c #252F37",
+"=@ c #090909",
+"-@ c #859BB2",
+";@ c #859DB8",
+">@ c #6E8396",
+",@ c #252C33",
+"'@ c #9CC4D7",
+")@ c #92C0D9",
+"!@ c #79A0BA",
+"~@ c #6487A3",
+"{@ c #566979",
+"]@ c #8CB0C2",
+"^@ c #51697C",
+"/@ c #60849D",
+"(@ c #6D8EAC",
+"_@ c #7BA0BC",
+":@ c #8AB4CE",
+"<@ c #95C2DB",
+"[@ c #9AC5DC",
+"}@ c #95C1DA",
+"|@ c #607B8C",
+"1@ c #597488",
+"2@ c #7EA6BF",
+"3@ c #597587",
+"4@ c #455664",
+"5@ c #668598",
+"6@ c #82A9C4",
+"7@ c #617F92",
+"8@ c #1A2328",
+"9@ c #2B3137",
+"0@ c #728FAC",
+"a@ c #51657B",
+"b@ c #6B8AA8",
+"c@ c #8EAEC7",
+"d@ c #A8C8E2",
+"e@ c #92BDD6",
+"f@ c #769DBA",
+"g@ c #526E87",
+"h@ c #7490A0",
+"i@ c #A6CDE4",
+"j@ c #97BFD4",
+"k@ c #55697D",
+"l@ c #6286A0",
+"m@ c #7399B3",
+"n@ c #84ACC5",
+"o@ c #92BFD9",
+"p@ c #99C4DC",
+"q@ c #94C0DA",
+"r@ c #4F6575",
+"s@ c #7DA5BF",
+"t@ c #7FA2BC",
+"u@ c #8FB6CE",
+"v@ c #95C3DB",
+"w@ c #8EB8D2",
+"x@ c #6A879D",
+"y@ c #111318",
+"z@ c #252A30",
+"A@ c #81868C",
+"B@ c #A5ABAD",
+"C@ c #70767C",
+"D@ c #38434F",
+"E@ c #637F9B",
+"F@ c #516980",
+"G@ c #799AB5",
+"H@ c #A5C3D9",
+"I@ c #93BDD6",
+"J@ c #779EBA",
+"K@ c #445A6B",
+"L@ c #93B5C9",
+"M@ c #B6D3E8",
+"N@ c #AECFE4",
+"O@ c #95BDD2",
+"P@ c #52687A",
+"Q@ c #6486A3",
+"R@ c #7092B0",
+"S@ c #90BCD6",
+"T@ c #97C4DC",
+"U@ c #A0C9E0",
+"V@ c #99C5DD",
+"W@ c #86AEC6",
+"X@ c #8FBAD4",
+"Y@ c #91BDD6",
+"Z@ c #7094AC",
+"`@ c #2A353E",
+" # c #0B0E10",
+".# c #888D90",
+"+# c #787D82",
+"@# c #465360",
+"## c #56697F",
+"$# c #A6CADD",
+"%# c #5A7382",
+"&# c #6C8CAA",
+"*# c #A5BED3",
+"=# c #A7CAE0",
+"-# c #94C1DA",
+";# c #7EA4BF",
+"># c #415160",
+",# c #9DC3D5",
+"'# c #B3CFE1",
+")# c #AAC3D4",
+"!# c #A8CDE4",
+"~# c #89ACBE",
+"{# c #567088",
+"]# c #6C91AC",
+"^# c #81A7C2",
+"/# c #96C4DC",
+"(# c #85A9BD",
+"_# c #708C9B",
+":# c #5A6E7B",
+"<# c #6C8695",
+"[# c #97C3DB",
+"}# c #8BB5CE",
+"|# c #425461",
+"1# c #63819E",
+"2# c #415465",
+"3# c #0B0D0E",
+"4# c #607387",
+"5# c #687D8C",
+"6# c #B8D6E9",
+"7# c #7893A2",
+"8# c #576F85",
+"9# c #A7BACF",
+"0# c #B0CEE5",
+"a# c #98C4DC",
+"b# c #88B1CA",
+"c# c #36444E",
+"d# c #8FA0AD",
+"e# c #73818D",
+"f# c #596D81",
+"g# c #B4D0E4",
+"h# c #A3CDE2",
+"i# c #658296",
+"j# c #6A8DAB",
+"k# c #7BA5C0",
+"l# c #94BAD2",
+"m# c #6D899B",
+"n# c #99C3DC",
+"o# c #8EB9D2",
+"p# c #7AA0BA",
+"q# c #6C8FAB",
+"r# c #6484A1",
+"s# c #1F252C",
+"t# c #121619",
+"u# c #7E96B0",
+"v# c #7A8A96",
+"w# c #BCD7EA",
+"x# c #A0C5D9",
+"y# c #3C4B57",
+"z# c #A9BACD",
+"A# c #BCD5E8",
+"B# c #84A6BA",
+"C# c #8EA1AE",
+"D# c #CFD1D4",
+"E# c #ECF6FA",
+"F# c #ABB7C2",
+"G# c #556F84",
+"H# c #57626A",
+"I# c #5C7078",
+"J# c #6C8AA7",
+"K# c #80A6C0",
+"L# c #91B8D0",
+"M# c #94BFD8",
+"N# c #87B0CA",
+"O# c #7CA2BB",
+"P# c #7097AF",
+"Q# c #495E6F",
+"R# c #0C0E11",
+"S# c #3A3F43",
+"T# c #8AA3BB",
+"U# c #778592",
+"V# c #C0D8EB",
+"W# c #B3D5E9",
+"X# c #404A53",
+"Y# c #B2C2D3",
+"Z# c #96A1AC",
+"`# c #9DB2C3",
+" $ c #AEBECE",
+".$ c #EDEFF3",
+"+$ c #F7FAFC",
+"@$ c #B6BFC7",
+"#$ c #556E85",
+"$$ c #121314",
+"%$ c #2B2E2F",
+"&$ c #555A5E",
+"*$ c #3B4C5B",
+"=$ c #6F8EA4",
+"-$ c #92BED8",
+";$ c #9DC7DF",
+">$ c #87ACC1",
+",$ c #546A78",
+"'$ c #516874",
+")$ c #4E6570",
+"!$ c #4D6271",
+"~$ c #4C6271",
+"{$ c #4E677A",
+"]$ c #38454E",
+"^$ c #6C7278",
+"/$ c #86A1B6",
+"($ c #5C656C",
+"_$ c #A4B0BA",
+":$ c #555D64",
+"<$ c #657178",
+"[$ c #A6B0B5",
+"}$ c #939CA1",
+"|$ c #D4E4F1",
+"1$ c #A0BACE",
+"2$ c #B9C7D7",
+"3$ c #F6F7F9",
+"4$ c #C6CED1",
+"5$ c #506A7C",
+"6$ c #060607",
+"7$ c #676A6B",
+"8$ c #91999F",
+"9$ c #7CA3BE",
+"0$ c #96BCD4",
+"a$ c #5B717E",
+"b$ c #4B5F6C",
+"c$ c #455864",
+"d$ c #5B717F",
+"e$ c #81A5B9",
+"f$ c #98C4DD",
+"g$ c #93BFD8",
+"h$ c #87B1CA",
+"i$ c #7BA1BC",
+"j$ c #5A7489",
+"k$ c #222A33",
+"l$ c #838A92",
+"m$ c #9DADBC",
+"n$ c #ECF0F5",
+"o$ c #F1F9FB",
+"p$ c #818A8D",
+"q$ c #4A5155",
+"r$ c #6A6F72",
+"s$ c #7E898F",
+"t$ c #E6F1F7",
+"u$ c #CADCED",
+"v$ c #A0B7CC",
+"w$ c #C6D1DF",
+"x$ c #AFB3B4",
+"y$ c #5F707D",
+"z$ c #CBCFD1",
+"A$ c #F4F5F6",
+"B$ c #66737F",
+"C$ c #87B2CB",
+"D$ c #90B7CD",
+"E$ c #596E7B",
+"F$ c #586F7E",
+"G$ c #8BB0C8",
+"H$ c #91BED6",
+"I$ c #83ADC7",
+"J$ c #6D8EA7",
+"K$ c #3F5161",
+"L$ c #2D3A45",
+"M$ c #1F2020",
+"N$ c #BDC5CC",
+"O$ c #E0EDF5",
+"P$ c #BBCAD8",
+"Q$ c #E1E4E7",
+"R$ c #5E6368",
+"S$ c #5B5F62",
+"T$ c #D9E7F3",
+"U$ c #A4C3D6",
+"V$ c #89A3B3",
+"W$ c #7B91A1",
+"X$ c #627990",
+"Y$ c #42505A",
+"Z$ c #CACCCE",
+"`$ c #F9F9F9",
+" % c #FDFDFD",
+".% c #BCBEC0",
+"+% c #5C7689",
+"@% c #8DB9D3",
+"#% c #8FB5CC",
+"$% c #536471",
+"%% c #98C1D9",
+"&% c #91BED7",
+"*% c #81AAC5",
+"=% c #597386",
+"-% c #41535F",
+";% c #6486A2",
+">% c #4D667D",
+",% c #070809",
+"'% c #44484E",
+")% c #BEC8D0",
+"!% c #8096A6",
+"~% c #516473",
+"{% c #A9ACAF",
+"]% c #8B8F91",
+"^% c #A8B3BD",
+"/% c #C5DAEB",
+"(% c #9FC8E1",
+"_% c #8FBCD6",
+":% c #81A8C2",
+"<% c #6C90AC",
+"[% c #56728C",
+"}% c #585B5F",
+"|% c #CBCDCD",
+"1% c #C1C3C6",
+"2% c #4F565F",
+"3% c #82ABC3",
+"4% c #93BCD3",
+"5% c #95BED7",
+"6% c #8EB9D3",
+"7% c #5B788B",
+"8% c #627E91",
+"9% c #7FA7C1",
+"0% c #6C91AB",
+"a% c #546F87",
+"b% c #6F7376",
+"c% c #D5E2EF",
+"d% c #A9C4D8",
+"e% c #81A1BA",
+"f% c #333940",
+"g% c #5F6B76",
+"h% c #C0D5E8",
+"i% c #AACCE2",
+"j% c #8EB8D3",
+"k% c #7FA5BF",
+"l% c #7095B0",
+"m% c #4E697E",
+"n% c #07090A",
+"o% c #0D0F10",
+"p% c #7193A6",
+"q% c #96C3DC",
+"r% c #8EBCD7",
+"s% c #91BDD7",
+"t% c #8FBBD6",
+"u% c #7699AD",
+"v% c #4D626F",
+"w% c #252D33",
+"x% c #101215",
+"y% c #0C0D0E",
+"z% c #0A0C0E",
+"A% c #06090A",
+"B% c #7F8488",
+"C% c #D7E3F1",
+"D% c #B6D0E4",
+"E% c #A3C2D7",
+"F% c #596872",
+"G% c #A9BED0",
+"H% c #B4D0E5",
+"I% c #9EC8DC",
+"J% c #8FB9D4",
+"K% c #85ADC7",
+"L% c #7FA4BE",
+"M% c #4B606F",
+"N% c #4E6372",
+"O% c #89B6D0",
+"P% c #92C1DA",
+"Q% c #9DC7DD",
+"R% c #95C0DA",
+"S% c #94BED8",
+"T% c #8BB8D1",
+"U% c #7AA0B9",
+"V% c #4E667A",
+"W% c #344151",
+"X% c #0C0D0F",
+"Y% c #8A8F92",
+"Z% c #D4E6F5",
+"`% c #BCD5E9",
+" & c #8599A5",
+".& c #939DA6",
+"+& c #C4DAEB",
+"@& c #89A6B9",
+"#& c #7D9FB5",
+"$& c #98C3DC",
+"%& c #95C0D9",
+"&& c #7CA2B9",
+"*& c #7697AE",
+"=& c #698498",
+"-& c #7394A8",
+";& c #9EC7DF",
+">& c #8DB1C4",
+",& c #6B8594",
+"'& c #50636C",
+")& c #50626C",
+"!& c #7F9FB1",
+"~& c #93B8D0",
+"{& c #627A88",
+"]& c #90B6CC",
+"^& c #93BDD7",
+"/& c #87AFC9",
+"(& c #7291A7",
+"_& c #384651",
+":& c #121618",
+"<& c #12171B",
+"[& c #4F6986",
+"}& c #597998",
+"|& c #324052",
+"1& c #969CA1",
+"2& c #D6E6F5",
+"3& c #C6DCEE",
+"4& c #505A64",
+"5& c #82929F",
+"6& c #99ABBB",
+"7& c #A1B9CA",
+"8& c #87A0B0",
+"9& c #718EA1",
+"0& c #8DB2C9",
+"a& c #8BAEC4",
+"b& c #586D7D",
+"c& c #97C0D9",
+"d& c #8DB3C9",
+"e& c #95B8CD",
+"f& c #9DC0D6",
+"g& c #6F8B9C",
+"h& c #354249",
+"i& c #464E54",
+"j& c #8A98A5",
+"k& c #AABAC7",
+"l& c #86939E",
+"m& c #41494F",
+"n& c #4A5861",
+"o& c #97C1DA",
+"p& c #5E7888",
+"q& c #5C7482",
+"r& c #88ACC2",
+"s& c #91BFD7",
+"t& c #799CB5",
+"u& c #47596A",
+"v& c #0D0F12",
+"w& c #1A2127",
+"x& c #56778D",
+"y& c #688BA9",
+"z& c #5D7F9E",
+"A& c #547391",
+"B& c #0E1013",
+"C& c #9DA6AB",
+"D& c #C8DCED",
+"E& c #7A8996",
+"F& c #B5CEE0",
+"G& c #BCDBEC",
+"H& c #B9D5EA",
+"I& c #8BA2B2",
+"J& c #6C8A9D",
+"K& c #97BFD7",
+"L& c #3E4E59",
+"M& c #92B5CB",
+"N& c #535F68",
+"O& c #454F56",
+"P& c #6F7C87",
+"Q& c #ABC0D1",
+"R& c #C7DCEE",
+"S& c #C5DBED",
+"T& c #C2D7EA",
+"U& c #BFD8EA",
+"V& c #BCD7EB",
+"W& c #62717B",
+"X& c #5B6F7B",
+"Y& c #95C3DC",
+"Z& c #8BB2C9",
+"`& c #485761",
+" * c #42525F",
+".* c #6686A1",
+"+* c #587896",
+"@* c #1B2129",
+"#* c #5C7A94",
+"$* c #7DA2BD",
+"%* c #84AEC7",
+"&* c #749BB5",
+"** c #5C7E9C",
+"=* c #27343F",
+"-* c #A4A9B2",
+";* c #D9E7F4",
+">* c #C8DBEC",
+",* c #B1C8DA",
+"'* c #5D6C76",
+")* c #A8C5D8",
+"!* c #A6BDD0",
+"~* c #B9D6EA",
+"{* c #B9D4E9",
+"]* c #8198A8",
+"^* c #8AADC3",
+"/* c #8CB1CA",
+"(* c #96C2D8",
+"_* c #A3C7DF",
+":* c #ADCDE3",
+"<* c #ABD0E4",
+"[* c #ADCFE3",
+"}* c #AACEE4",
+"|* c #A4CDE3",
+"1* c #A1CBE1",
+"2* c #A3CCE3",
+"3* c #A2C9DF",
+"4* c #41515A",
+"5* c #81A2B5",
+"6* c #94C0D7",
+"7* c #5E7789",
+"8* c #526777",
+"9* c #516777",
+"0* c #6B8CA5",
+"a* c #759CBA",
+"b* c #658AA5",
+"c* c #587798",
+"d* c #1B242B",
+"e* c #0E1110",
+"f* c #101214",
+"g* c #202931",
+"h* c #59758E",
+"i* c #799FBB",
+"j* c #84B1CA",
+"k* c #86ACC6",
+"l* c #354758",
+"m* c #A0A6AE",
+"n* c #DAE6F2",
+"o* c #C4DCEE",
+"p* c #B4D2E8",
+"q* c #3E4A53",
+"r* c #698091",
+"s* c #5D7581",
+"t* c #A3CAE0",
+"u* c #A6CFE5",
+"v* c #A5CCE5",
+"w* c #718A9C",
+"x* c #98C3DB",
+"y* c #83ABC7",
+"z* c #2E3B46",
+"A* c #33414A",
+"B* c #678398",
+"C* c #8AB3CE",
+"D* c #93BED7",
+"E* c #97C4DB",
+"F* c #42525E",
+"G* c #88ACC0",
+"H* c #789EB9",
+"I* c #7A9FBB",
+"J* c #7EA2BD",
+"K* c #779DB5",
+"L* c #577081",
+"M* c #5B7B9B",
+"N* c #1D2229",
+"O* c #547390",
+"P* c #54728D",
+"Q* c #6082A0",
+"R* c #688EA9",
+"S* c #6689A7",
+"T* c #6086A0",
+"U* c #6285A1",
+"V* c #6B8DAA",
+"W* c #718FAB",
+"X* c #3E5568",
+"Y* c #969DA1",
+"Z* c #DBE8F4",
+"`* c #95ACBD",
+" = c #758B9A",
+".= c #A4C9DE",
+"+= c #698190",
+"@= c #667E8A",
+"#= c #7D99AA",
+"$= c #7B9BAD",
+"%= c #6F8C9A",
+"&= c #536976",
+"*= c #84ADC6",
+"== c #6D92AD",
+"-= c #62829E",
+";= c #43576A",
+">= c #2F3B46",
+",= c #5C788A",
+"'= c #86AFC8",
+")= c #93BED8",
+"!= c #93BAD5",
+"~= c #93BAD2",
+"{= c #92BCD4",
+"]= c #7EA2B6",
+"^= c #3D4D56",
+"/= c #485B67",
+"(= c #7596A9",
+"_= c #8CBBD4",
+":= c #90BCD5",
+"<= c #91BFD9",
+"[= c #789BAD",
+"}= c #465B6A",
+"|= c #59789A",
+"1= c #5D7F9D",
+"2= c #5E839C",
+"3= c #59799A",
+"4= c #415569",
+"5= c #2D3A46",
+"6= c #2E3B49",
+"7= c #4A647C",
+"8= c #587690",
+"9= c #39485A",
+"0= c #7F8589",
+"a= c #D9E8F5",
+"b= c #CCDEEE",
+"c= c #8597A5",
+"d= c #B3D2E3",
+"e= c #9BB3C4",
+"f= c #B2CEE1",
+"g= c #B2D1E7",
+"h= c #ABCFE6",
+"i= c #94B7CB",
+"j= c #495C6A",
+"k= c #688498",
+"l= c #617B8A",
+"m= c #85ADC8",
+"n= c #78A0B9",
+"o= c #62819B",
+"p= c #2E3843",
+"q= c #485A6C",
+"r= c #67889C",
+"s= c #8AB5CF",
+"t= c #8EB9D1",
+"u= c #6C899B",
+"v= c #6E91A7",
+"w= c #678399",
+"x= c #6888A1",
+"y= c #323E48",
+"z= c #5B7585",
+"A= c #98C5DD",
+"B= c #83ACC1",
+"C= c #2D373F",
+"D= c #4B637C",
+"E= c #567694",
+"F= c #26313C",
+"G= c #15191F",
+"H= c #4D647A",
+"I= c #252F39",
+"J= c #5D6163",
+"K= c #DDE9F5",
+"L= c #CEDFEE",
+"M= c #8898A5",
+"N= c #B0CBDC",
+"O= c #BFDAEC",
+"P= c #BFDBEC",
+"Q= c #BBDAEC",
+"R= c #BAD7EA",
+"S= c #6B808F",
+"T= c #7297B0",
+"U= c #8CB8D1",
+"V= c #95C1D9",
+"W= c #91BCD6",
+"X= c #86AEC8",
+"Y= c #7496B3",
+"Z= c #6587A2",
+"`= c #384958",
+" - c #323F4B",
+".- c #546A7C",
+"+- c #6C88A1",
+"@- c #779AB1",
+"#- c #658297",
+"$- c #3B4A58",
+"%- c #33404B",
+"&- c #202830",
+"*- c #577287",
+"=- c #86B1CC",
+"-- c #86ACC0",
+";- c #6E8797",
+">- c #9CC7DF",
+",- c #92BCD5",
+"'- c #91BCD5",
+")- c #8EB6CE",
+"!- c #344453",
+"~- c #263039",
+"{- c #364452",
+"]- c #2B3643",
+"^- c #2A2D2E",
+"/- c #E1EBF4",
+"(- c #D2E4F3",
+"_- c #A0B2C3",
+":- c #8094A1",
+"<- c #BAD8EB",
+"[- c #B8D6EA",
+"}- c #485A6A",
+"|- c #789FB9",
+"1- c #90BBD3",
+"2- c #94C4DC",
+"3- c #88B3CD",
+"4- c #7A9EB9",
+"5- c #698BA8",
+"6- c #4D677C",
+"7- c #151A1E",
+"8- c #1A2125",
+"9- c #171C21",
+"0- c #1D2329",
+"a- c #1D262E",
+"b- c #486073",
+"c- c #6A8CAA",
+"d- c #7CA2BE",
+"e- c #90BDD7",
+"f- c #9AC5DE",
+"g- c #7493A2",
+"h- c #708B99",
+"i- c #8CB7D1",
+"j- c #7494AB",
+"k- c #68889F",
+"l- c #6A8FA5",
+"m- c #7BA2BC",
+"n- c #171D21",
+"o- c #1D262F",
+"p- c #212B36",
+"q- c #09090B",
+"r- c #BBC2C9",
+"s- c #D4E4F2",
+"t- c #C1D9EB",
+"u- c #44515A",
+"v- c #92B5C9",
+"w- c #6B8795",
+"x- c #4E687E",
+"y- c #7EA6C0",
+"z- c #91BED8",
+"A- c #93BFD9",
+"B- c #8CB5D0",
+"C- c #7DA4BE",
+"D- c #6F92AE",
+"E- c #6687A5",
+"F- c #526C85",
+"G- c #415669",
+"H- c #384655",
+"I- c #6589A4",
+"J- c #6E92AE",
+"K- c #80A8C2",
+"L- c #92BCD6",
+"M- c #91BFD8",
+"N- c #799AAF",
+"O- c #6A8796",
+"P- c #81AAC3",
+"Q- c #577187",
+"R- c #1F2930",
+"S- c #192027",
+"T- c #1B2227",
+"U- c #0D1010",
+"V- c #0E1012",
+"W- c #070709",
+"X- c #5C6062",
+"Y- c #DCE8F3",
+"Z- c #C4DCEF",
+"`- c #9BB3C6",
+" ; c #3A424F",
+".; c #313A44",
+"+; c #35424C",
+"@; c #374655",
+"#; c #6E91AD",
+"$; c #87B2CC",
+"%; c #799EBA",
+"&; c #618298",
+"*; c #7095AF",
+"=; c #435663",
+"-; c #80A7C0",
+";; c #95C4DC",
+">; c #779CB3",
+",; c #526D7E",
+"'; c #516A7A",
+"); c #526B7B",
+"!; c #465764",
+"~; c #34414E",
+"{; c #5C7E9A",
+"]; c #2B3741",
+"^; c #4B657F",
+"/; c #5C7D9C",
+"(; c #557088",
+"_; c #0F0F10",
+":; c #B9C2CA",
+"<; c #CCDFEF",
+"[; c #B4CDE1",
+"}; c #8DAEC8",
+"|; c #6F93AE",
+"1; c #678CA6",
+"2; c #6E92AF",
+"3; c #81A8C1",
+"4; c #8FBBD5",
+"5; c #8DB9D2",
+"6; c #6D8FA2",
+"7; c #586F82",
+"8; c #394851",
+"9; c #86B0C6",
+"0; c #85AFC8",
+"a; c #6F94AF",
+"b; c #698DA8",
+"c; c #6889A7",
+"d; c #5E7E9F",
+"e; c #475D75",
+"f; c #2E3C4A",
+"g; c #5D7E9D",
+"h; c #405465",
+"i; c #36393B",
+"j; c #D7E5F1",
+"k; c #A4C5DC",
+"l; c #668496",
+"m; c #7595AB",
+"n; c #7798AE",
+"o; c #97C2DA",
+"p; c #789DB3",
+"q; c #8BB1C8",
+"r; c #93C0D9",
+"s; c #8BB5CF",
+"t; c #85AFC9",
+"u; c #82AAC6",
+"v; c #5F7C95",
+"w; c #1E252C",
+"x; c #54728E",
+"y; c #587899",
+"z; c #5A7B9B",
+"A; c #2D3843",
+"B; c #798086",
+"C; c #D1E3F1",
+"D; c #B7D3E8",
+"E; c #7E98AB",
+"F; c #181C1F",
+"G; c #46525F",
+"H; c #80A1B8",
+"I; c #99C3DB",
+"J; c #85ACC2",
+"K; c #21272D",
+"L; c #0A0B0D",
+"M; c #53718C",
+"N; c #577797",
+"O; c #1B2229",
+"P; c #0D0E0F",
+"Q; c #B3BDC4",
+"R; c #CADDED",
+"S; c #B4D3E7",
+"T; c #2B3339",
+"U; c #2F3840",
+"V; c #7899AC",
+"W; c #93C1D9",
+"X; c #8FBCD5",
+"Y; c #8BB6D1",
+"Z; c #8DB8D2",
+"`; c #92BFD8",
+" > c #678092",
+".> c #547089",
+"+> c #5C7F9B",
+"@> c #1F262E",
+"#> c #202223",
+"$> c #B1BECB",
+"%> c #C3D9EB",
+"&> c #7B8D99",
+"*> c #708B9A",
+"=> c #85ABC1",
+"-> c #7FA3BA",
+";> c #92BBD3",
+">> c #7CA0B4",
+",> c #97BDD4",
+"'> c #657E8F",
+")> c #93BDD4",
+"!> c #88ADC7",
+"~> c #6F94AE",
+"{> c #526A7E",
+"]> c #65849B",
+"^> c #799DBB",
+"/> c #84AFC9",
+"(> c #8FB9D2",
+"_> c #323C45",
+":> c #516C84",
+"<> c #658AA4",
+"[> c #5B7C9B",
+"}> c #2E3A49",
+"|> c #2A3038",
+"1> c #252D3A",
+"2> c #1B1E20",
+"3> c #ADBFCF",
+"4> c #C0D6E7",
+"5> c #B0CDE2",
+"6> c #8EB3C9",
+"7> c #526975",
+"8> c #6B899D",
+"9> c #597183",
+"0> c #90BAD5",
+"a> c #94C2DA",
+"b> c #82ABC5",
+"c> c #495E6E",
+"d> c #82A8C3",
+"e> c #81A4BA",
+"f> c #7594A5",
+"g> c #87ABC3",
+"h> c #4D6573",
+"i> c #6689A6",
+"j> c #526E85",
+"k> c #243037",
+"l> c #607B96",
+"m> c #7699B6",
+"n> c #789EB5",
+"o> c #303D48",
+"p> c #7498B4",
+"q> c #7094AF",
+"r> c #597792",
+"s> c #242F39",
+"t> c #1A1D25",
+"u> c #374553",
+"v> c #4D677D",
+"w> c #14191E",
+"x> c #040505",
+"y> c #171A1D",
+"z> c #8A9FAD",
+"A> c #BCD9EC",
+"B> c #B5D3E7",
+"C> c #A2CAE1",
+"D> c #9DC7DE",
+"E> c #9EC7DD",
+"F> c #3B4A57",
+"G> c #455867",
+"H> c #98C2DB",
+"I> c #85B0CC",
+"J> c #7496B2",
+"K> c #4C606F",
+"L> c #6E8EA3",
+"M> c #7EA0B6",
+"N> c #91BBD3",
+"O> c #8DB7D1",
+"P> c #90BAD4",
+"Q> c #96C1DA",
+"R> c #3B4853",
+"S> c #688AA5",
+"T> c #4C657A",
+"U> c #1B2026",
+"V> c #2B3C44",
+"W> c #5F7A90",
+"X> c #587284",
+"Y> c #536978",
+"Z> c #88B1CC",
+"`> c #759AB8",
+" , c #617E9A",
+"., c #556F85",
+"+, c #20272E",
+"@, c #323D48",
+"#, c #333E4A",
+"$, c #060707",
+"%, c #4A5159",
+"&, c #ACC3D5",
+"*, c #ACCFE5",
+"=, c #5A6874",
+"-, c #AACDE1",
+";, c #9CC6DC",
+">, c #35414C",
+",, c #769AB2",
+"', c #80AAC5",
+"), c #6F92AB",
+"!, c #38464F",
+"~, c #7EA4B9",
+"{, c #97C3DC",
+"], c #7A9FB6",
+"^, c #3F505C",
+"/, c #6D8DA6",
+"(, c #1E282E",
+"_, c #080909",
+":, c #090A0C",
+"<, c #344452",
+"[, c #3B4857",
+"}, c #7799AE",
+"|, c #8DB6D1",
+"1, c #66869E",
+"2, c #3D4957",
+"3, c #536C84",
+"4, c #353F4C",
+"5, c #111215",
+"6, c #65727E",
+"7, c #A6BCCD",
+"8, c #5D6972",
+"9, c #AED0E6",
+"0, c #99C5DC",
+"a, c #8DB5D0",
+"b, c #8DB5CE",
+"c, c #90BBD5",
+"d, c #84AAC5",
+"e, c #8EBBD5",
+"f, c #80A7C1",
+"g, c #6C8DA2",
+"h, c #85AFC6",
+"i, c #61839B",
+"j, c #374352",
+"k, c #576D83",
+"l, c #80A6C1",
+"m, c #81A4BB",
+"n, c #111315",
+"o, c #111418",
+"p, c #4C6378",
+"q, c #33424C",
+"r, c #37454D",
+"s, c #8DB4CF",
+"t, c #7397B3",
+"u, c #3A495A",
+"v, c #0D0F13",
+"w, c #27303A",
+"x, c #272E36",
+"y, c #0F1012",
+"z, c #90A4B2",
+"A, c #A8CBE2",
+"B, c #91BCD4",
+"C, c #80ABC3",
+"D, c #567083",
+"E, c #67899D",
+"F, c #94C2DB",
+"G, c #95C1DB",
+"H, c #779CB2",
+"I, c #60849E",
+"J, c #64849F",
+"K, c #1A1F22",
+"L, c #405061",
+"M, c #79A1BD",
+"N, c #324051",
+"O, c #6183A1",
+"P, c #6B8FAD",
+"Q, c #6485A2",
+"R, c #34444F",
+"S, c #060606",
+"T, c #2D3339",
+"U, c #B2CBDF",
+"V, c #94BCD5",
+"W, c #7DA2BA",
+"X, c #3F5264",
+"Y, c #5A7991",
+"Z, c #7195B3",
+"`, c #7BA5BD",
+" ' c #81AAC6",
+".' c #88B2CC",
+"+' c #8EBBD4",
+"@' c #8AB2CC",
+"#' c #82ADC7",
+"$' c #7092A5",
+"%' c #95C2DA",
+"&' c #41525F",
+"*' c #6387A3",
+"=' c #475F72",
+"-' c #21282F",
+";' c #5B7288",
+">' c #0D0F11",
+",' c #0B0E11",
+"'' c #212C36",
+")' c #26323C",
+"!' c #161B20",
+"~' c #55616D",
+"{' c #9BB9D0",
+"]' c #799EB6",
+"^' c #27313A",
+"/' c #1A222B",
+"(' c #5D7E99",
+"_' c #6587A4",
+":' c #6789A6",
+"<' c #6B8EAB",
+"[' c #628097",
+"}' c #6D8B9D",
+"|' c #769AAF",
+"1' c #6E91A9",
+"2' c #6C8EAD",
+"3' c #6E91AF",
+"4' c #3C4D59",
+"5' c #8BB1CB",
+"6' c #232D32",
+"7' c #13171B",
+"8' c #232B32",
+"9' c #839AAF",
+"0' c #789BB3",
+"a' c #283138",
+"b' c #0C0E0F",
+"c' c #242B33",
+"d' c #3D4D5B",
+"e' c #435768",
+"f' c #4B6176",
+"g' c #283137",
+"h' c #8DB4CC",
+"i' c #41535E",
+"j' c #405362",
+"k' c #3C4F60",
+"l' c #3C4E5B",
+"m' c #2B353E",
+"n' c #526876",
+"o' c #92BAD3",
+"p' c #1B1F23",
+"q' c #31383F",
+"r' c #7F9CB6",
+"s' c #21292F",
+"t' c #29333F",
+"u' c #1F252E",
+"v' c #090A0E",
+"w' c #4D626E",
+"x' c #96BDD3",
+"y' c #191D20",
+"z' c #13181B",
+"A' c #80A4BC",
+"B' c #1B2027",
+"C' c #5D7182",
+"D' c #2C383F",
+"E' c #364857",
+"F' c #1A2028",
+"G' c #333F49",
+"H' c #7FA2B5",
+"I' c #4A5E6E",
+"J' c #232E35",
+"K' c #252D35",
+"L' c #2F3A41",
+"M' c #0A0B0E",
+"N' c #14191D",
+"O' c #5A717F",
+"P' c #212931",
+"Q' c #222B34",
+"R' c #101216",
+"S' c #21272B",
+" ",
+" ",
+" ",
+" . ",
+" + ",
+" @ # $ % ",
+" & * = - ; ",
+" > , ' ) ! ~ { ] ",
+" ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a ",
+" b c d e f g h i j k l m n o p q r s t u v w x ",
+" y z A B C D E F G H I J K L M N O P Q R S T U U V W X Y ",
+" Z ` ...+.@.#.$.%.O &.*.=.-.;.>.,.'.).!.~.~.~.{.].^./.(._.:.<. ",
+" b [.}.|.#.1.2.3.4.{.~.~.~.~.5.6.5.~.7.8.{.~.~.~.~.9.0.a.b.].c. ",
+" d.e.f.g.h.i.j.k.{.~.~.~.~.l.~.m.% n.~.o.{.{.~.~.~.~.p.V 9.~.q.r. ",
+" s.t.u.v.w.x.u y.z.A.B.5.~.~.5.C.D.E.F.~.~.G.~.~.~.G.H.I.J.~.~.J.K.L. M.N. ",
+" O.P.Q.R.S.T.U.V.W.X.Y.Z.`.~.~.5. +.+++@+U ~.~.~.~.~.#+$+%+,.~.~.G.&+*+=+-+;+ ",
+" >+,+Q.'+)+!+~+{+]+^+/+(+_+:+<+~.[+}+U 9.|+5.~.~.~.~.1+2+3+4+5+~.].6+7+8+9+0+ ",
+" a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+5.U ~.U r+s+~.~.~.t+u+v+w+x+y+~.z+A+t+B+C+D+E+ F+G+ ",
+" H+I+J+K+L+M+N+O+P+Q+R+S+T+U+V+W+X+Y+V ~.~.~.~.U ~.~.~.o.9.{.Z+`+9.~.~.~.V @.@+@@@#@ $@%@&@*@ ",
+" =@-@;@>@,@'@'.)@!@~@{@]@^@/@l+(@_@:@<@~.~.~.U {.~.~.~.{.~.~.{.[@~.~.~.~.}@|@1@2@3@4@5@6@7@8@ ",
+" 9@0@a@b@c@d@-.e@f@g@h@i@j@k@l@V+m@n@o@p@~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.{.q@r@s@t@u@v@w@x@y@ ",
+"z@A@B@C@D@E@X F@G@H@R I@J@K@L@M@N@O@P@Q@R@o+S@T@~.~.~.~.~.~.~.~.~.~.~.~.~.~.9.U@V@W@X@<+V Y@Z@`@ # ",
+" .#+#@###$#%#&#*#=#-#;#>#,#'#)#!#~#{#]#^#S@/#~.~.~.~.~.~.~.~.~.~.~.~.~.U (#_#:#<#p@{.[#}#|#1#2# ",
+" 3#4#5#6#7#8#9#0#a#b#c#d#e#f#g#h#i#j#k#S@/#~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.l#m#9.{.~.n#o#p#q#r#s# ",
+" t#u#v#w#x#y#z#A#B#C#D#E#F#G#H#I#% J#K#S@T@~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.L#0.l.~.~.{.M#N#O#P#Q#R# ",
+" S#T#U#V#W#X#Y#Z#`# $.$+$@$#$$$%$&$*$=$-$a#~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.o.o.;$9.G.~.>$,$'$)$!$~${$]$ ",
+" ^$/$($_$:$<$[$}$|$1$2$3$4$5$6$7$8$9$:+<+~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.G.0$a$b$c$d$e$f$g$h$i$j$k$ ",
+" [ l$m$n$o$p$q$r$s$t$u$v$w$x$y$z$A$B$C$M#p@~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.;$D$E$F$G$H$I$J$K$L$ ",
+" M$N$O$P$Q$R$S$T$U$V$W$X$Y$Z$`$ %.%+%@%<+{.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.#%$%%%p@&%*%=%-%;%>%,% ",
+" '%)%!%~%{%]%^%/%(%_%:%<%[%}%|%1%2%3%-$T@~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.4%5%U p@6%7%8%9%0%a%y ",
+" b%c%d%e%f%g%h%i%G.[#j%k%l%m%n%o%p%@%q%{.~.~.~.~.~.~.~.~.~.~.~.~.~.~.{.~.~.~.~.~.~.V G.}@r%s%t%u%v%w%M.x%y%z%A% ",
+" B%C%D%E%F%G%H%I%V o.<@J%K%L%M%N%O%P%p@~.~.~.~.~.~.~.~.~.U ~.~.U 9.Q%{.~.~.~.~.~.{.%%U {.~.~.{.v@R%S%T%U%V%W% X%$ ",
+" Y%Z%`% &.&+&@&#&U ~.{.$&%&&&*&=&-&T@~.~.~.~.~.~.~.~.~.~.~.;&>&,&'&)&!&5+~.~.~.~.{.~&{&]&9.~.p@^&/&(&_&:& <&[&}&|& ",
+" 1&2&3&4&5&6&7&8&9&l.~.{.V 0&a&b&c&~.~.~.~.~.~.~.5.d&e&f&g&h&i&j&k&l&m&n&~.~.G.~.~.~.o&p&q&r&s&t&u&v& w&x&y&z&A&B& ",
+" C&2&D&E&F&G&G&H&I&J&U ~.~.U K&L&,.~.~.~.~.~.~.~.U M&N&O&P&Q&R&S&T&U&V&W&X&].{.~.~.{./#Y&Z&`& *.*+*@* (.#*$*%*&***=* ",
+" -*;*>*,*'*)*!*~*{*]*^*~.5.{.5./*U ~.~.~.~.~.~.{.[#(*_*:*<*[*[*}*|*1*2*3*4*5*U ~.~.6*7*8*9*0*a*b*c*d*e*f*g*h*i*%*j*k*<%l* ",
+" m*n*o*p*q*r*s*t*u*v*w*1+~.~.~.~.~.~.~.~.~.~.~.x*y*z*A*B*C*D*E*V U ~.G.~.:.F*G*l.{.R%X+H*I*J*K*L*M*N*O*P*Q*R*S*T*U*V*W*X* ",
+" Y*Z*D&`* =.=+=@=#=$=%=&={.~.~.~.~.~.~.~.~.~.~.<+*===-=;=>=,='=)=[#p@!=~={=]=^=/=(=a#&%_=:=<=-#[=}=k$|=1=2=3=4=5=6=7=8=9= ",
+" 0=a=b=c=d=e=f=g=h=i=j=k=l=5.~.~.~.~.~.~.~.~.~.V -$m=n===o=p=q=r=s=t=:+u=v=w=x=y=z=A=J.V U ~.V [#B=C=D=1=E=F= G=H=I= ",
+" J=K=L=M=N=O=P=Q=R=S=T=U=V=5.U ~.~.~.~.~.~.~.~.~.{.x*W=X=Y=Z=`= -.-+-@-#-$-%-&-*-=---;->-9.x*)=,-'-)-c.!-~- {-]- ",
+" ^-/-(-_-:-<-<-[-%.}-|-1-T@~.{.~.~.~.~.~.~.~.~.~.~.V 2-^&3-4-5-6-7-8-9-0-a-b-c-d-e-f-g-h-V@i-j-k-l-T=m-7@n- o-p- ",
+" q-r-s-t-u-v-!+2*w-x-y-z-V ~.~.~.~.~.~.~.~.~.~.~.~.~.~./#A-B-C-D-E-F-G-H-I-J-K-L-<@M-W=N-O-P-Q-R-<&S-T-U-V- W- ",
+" X-Y-Z-`- ;.;+;@;#;$;q+~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~./#v@W=N#%;&;*;=;-;s=-#;;>;,;';);!;~;{;];^;/;(;H+ ",
+" _;:;<;[;};|;1;2;3;4;{.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.{.T@-#5;6;7;8;9;[#V <+0;a;b;c;E-d;e;f;|=g;h; ",
+" i;j;V#k;F.l;m;n;o;~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.{.~.{.p@S@s=p;q;~.~.{.r;s;t;u;~$v;w;x;y;z;A; ",
+" H+B;C;D;E;F;G;H;~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.{.U ~.~.V E*E*V ~.~.~.{.T@/#I;J;K;L;M;y;N;O; ",
+" P;Q;R;S;T;U;~.{.~.~.~.~.~.~.~.~.l.U {.p@~.~.{.V ~.~.5+V;].~.~.~.~.{.{.p@W;X;Y;Z;`;/# >W..>+>N;@> ",
+" #>$>%>&>*>G.~.~.~.~.~.~.~.~.{.`.=>V=->;>~.n##&>>T@,>'>].~.~.~.~.~.)>!>i$~>{>]>^>/>(>_>:><>[>}> |>1> ",
+" 2>3>4>5>U@U ~.~.~.~.~.~.~.{.6>7>8>9>0>a#a>b>c>d>e>f>~.~.~.V ~.~.g>h>i>1=j>,%k>l>m>n>o>p>q>r>s>t>u>v>w> ",
+" x>y>z>A>B>C>5+D>E>~.~.~.~.{.%&F>G>3;s%{.H>I>J>K>L>M>~.V N>O>P>x*Q>R>S>T>U> X%V>W>X>Y>Z>P-`> ,.,+, ",
+" @,#,$,%,&,1.*,=,-,;,{.p@V {.X@>,,,Z;V ~.5.`;',),!,~,~.{,],^,/,/&-$F$(,_, :,<,[,},<@|,1,2, ",
+" B&3,4, 5,6,7,8,9,0,`;a,b,B+c,d,s=<+~.~.~.a#e,f,g,h,V -#9$i,j,k,l,m,n, o,p,q,r,s,t,u,v, ",
+" w,x, y,z,A,B,C,D,E,o@F,G,<+~.~.~.~.~.;;P>j%}@p@H,]#I,J,K,L,M,=+ N,O,P,Q,R,S, ",
+" T,U,V,W,X,Y,Z,`, '.'+'x*~.{.O+@%@'#'$'%'a#&'*'='-' ~;;'>' ,''')'!' ",
+" ~'{']'^'/'('_'_':'<'['}'{.V |'1'2'3'4'5'}@6'7' 8'K; ",
+" v&9'0'a' b'c'd'e'f'1@g'h'G.i'j'k'l'm'n'o'p' y ",
+" q'r's' t'u'H+ v'w'x'y' z'A'B' ",
+" C'D' E'F' G'H' I'J' ",
+" K'L' M' N'O' P'Q' ",
+" R' S' ",
+" ",
+" ",
+" ",
+" "};
diff --git a/minilibx/test/open24.xpm b/minilibx/test/open24.xpm
new file mode 100755
index 0000000..f363254
--- /dev/null
+++ b/minilibx/test/open24.xpm
@@ -0,0 +1,230 @@
+/* XPM */
+static char *open[] = {
+/* width height num_colors chars_per_pixel */
+" 45 55 168 2",
+/* colors */
+".. s None c None",
+".# c #450304",
+".a c #ce7e7c",
+".b c #b94344",
+".c c #b65254",
+".d c #780204",
+".e c #b04c4c",
+".f c #b00204",
+".g c #8a8a64",
+".h c #969a24",
+".i c #b6b60c",
+".j c #cac614",
+".k c #cece34",
+".l c #cace54",
+".m c #caca94",
+".n c #c24e4c",
+".o c #aa0204",
+".p c #9e4244",
+".q c #bc0204",
+".r c #a40204",
+".s c #9e262c",
+".t c #8c3a3c",
+".u c #5c1414",
+".v c #5b0204",
+".w c #700204",
+".x c #722214",
+".y c #b52624",
+".z c #8e3234",
+".A c #b60204",
+".B c #c20204",
+".C c #860204",
+".D c #560304",
+".E c #800204",
+".F c #9e0204",
+".G c #920204",
+".H c #620204",
+".I c #a41314",
+".J c #996a6c",
+".K c #920d09",
+".L c #c80204",
+".M c #690204",
+".N c #980204",
+".O c #984c4c",
+".P c #e2dedc",
+".Q c #ae5e5c",
+".R c #bc6a6c",
+".S c #a21a1c",
+".T c #8a0a04",
+".U c #671e1c",
+".V c #941b1c",
+".W c #b8b4b4",
+".X c #e8e6e4",
+".Y c #ccb4b4",
+".Z c #c07c7c",
+".0 c #f3f2eb",
+".1 c #b49696",
+".2 c #521614",
+".3 c #9e5a5c",
+".4 c #d4d4d4",
+".5 c #a7a5a1",
+".6 c #dec4c4",
+".7 c #e4d6d4",
+".8 c #f4f2f4",
+".9 c #cccac4",
+"#. c #9a161c",
+"## c #8c0204",
+"#a c #862c2c",
+"#b c #7e5e5c",
+"#c c #a39694",
+"#d c #6b6667",
+"#e c #322624",
+"#f c #b09e9c",
+"#g c #b23234",
+"#h c #500304",
+"#i c #222224",
+"#j c #2e322c",
+"#k c #925c5c",
+"#l c #721a1c",
+"#m c #6e6e6c",
+"#n c #0a0a0c",
+"#o c #b2b2b4",
+"#p c #8e6264",
+"#q c #884444",
+"#r c #8c5c5c",
+"#s c #121214",
+"#t c #b2aeac",
+"#u c #c21e1c",
+"#v c #6e0e0c",
+"#w c #623e3c",
+"#x c #b64e4c",
+"#y c #bc3634",
+"#z c #624e1c",
+"#A c #6e727c",
+"#B c #824e4c",
+"#C c #8b8d87",
+"#D c #a09674",
+"#E c #766844",
+"#F c #7a663c",
+"#G c #828c90",
+"#H c #beb6a4",
+"#I c #3a0204",
+"#J c #8e9298",
+"#K c #562529",
+"#L c #7c3838",
+"#M c #bab294",
+"#N c #7e4644",
+"#O c #929a9c",
+"#P c #762a2c",
+"#Q c #a60e0c",
+"#R c #ae1e1c",
+"#S c #460a0c",
+"#T c #a6aaa4",
+"#U c #6a4a4c",
+"#V c #784c50",
+"#W c #761214",
+"#X c #9e1e1c",
+"#Y c #988c90",
+"#Z c #821e1c",
+"#0 c #7a1618",
+"#1 c #7a6e74",
+"#2 c #7e7a77",
+"#3 c #808688",
+"#4 c #828284",
+"#5 c #828279",
+"#6 c #827a64",
+"#7 c #7e765c",
+"#8 c #864a34",
+"#9 c #825a44",
+"a. c #766e54",
+"a# c #7e7e74",
+"aa c #806464",
+"ab c #7e724c",
+"ac c #766634",
+"ad c #765a2c",
+"ae c #8e7e54",
+"af c #a69e8c",
+"ag c #c7c2ac",
+"ah c #9a2a1c",
+"ai c #aa3a3c",
+"aj c #979894",
+"ak c #70684c",
+"al c #62522c",
+"am c #6e5e3c",
+"an c #92866c",
+"ao c #968e6c",
+"ap c #826e54",
+"aq c #84765c",
+"ar c #86522c",
+"as c #7e4624",
+"at c #7e3614",
+"au c #6e5254",
+"av c #712e2c",
+"aw c #7a5654",
+"ax c #82727c",
+"ay c #a63634",
+"az c #8a6a6c",
+"aA c #863534",
+"aB c #5c1a18",
+"aC c #6a2c2c",
+"aD c #5e0e14",
+"aE c #868684",
+"aF c #922624",
+"aG c #901614",
+"aH c #c21614",
+"aI c #520e0c",
+"aJ c #805654",
+"aK c #b00c0c",
+"aL c #c2221c",
+/* pixels */
+"..........................................................................................",
+"..........................................................................................",
+".....................................#.a.#................................................",
+"...................................#.b.c.#.#.#.#...........#.d............................",
+".................................#.e.f.f.#.g.h.i.j.k.l.m...f.n............................",
+".................................d.f.o.f.#.#.#.d.d.#.#.#...f.f.d..........................",
+".................................p.q.q.r.s.t.u.v.w.x.d.d.#.d.r.y.d........................",
+".................................z.A.B.q.C.D.E.F.G.E.H.E.I.F.q.A.d........................",
+".................................J.G.f.G.w.K.f.L.B.B.r.M.f.B.L.A.d........................",
+".................................d.w.N.M.O.P.Q.B.B.o.R.S.E.q.q.T.d........................",
+".................................d.U.M.V.W.X.Y.q.B.Z.0.1.E.r.N.d..........................",
+".................................d.2.r.3.4.5.6.A.f.7.8.9#.###a.#..........................",
+"................................#b.d.L#c#d#e#f.N.V.5#d.4#g.E.d............................",
+"...............................d#h.r.L#f#i#j#k.M#l#m#n#o.b.r.d............................",
+"...............................d#h##.q#g#p#q##.q.N#r#s#t#u.q#v.#..........................",
+"..............#j................#w.w.C.r.q##.r.B.f.T#x#y.L.r.M.d..........................",
+"............#j#z#j#A#A#j.........d.D.r.M.C.f.r.r.r.q.B.C.N.E#B............................",
+"..........#j#C#D#E#z#F#G#j.......d.d.#.G##.w.M.M.C.C.d.G.r.u.d............................",
+"....................#E#H#C#j.........d#I.w.F.f.o.o.o.N.M.#.d..............................",
+"......................#E#j#J#j......#K.M.#.#.v.w.M.v.##h.H#L.d............................",
+"..........................#M#j.......v.F.q.r.d.w.w.C.E.M.v.M#N.d..........................",
+"..........................#E#O#j#j#K##.f.L.L.L.B.q.f##.M.v.w.w#P.d.#...d.d................",
+"............................#C#E.#.v.o.B.L.L.q.q.q.q.N.M.D#h.M.N.r#Q#R#S.H.J.#............",
+"............................#j#T#U.C.q.q.o.G.F.f.q.A.N.d.v.v##.o.q.L.r.C.A###k............",
+"..............................#C#V.N.A.N.f.q.F.C.E.f.F.E.H#n#W.K.I#X#a.z.V.q.d#p.d........",
+"................................#Y.r.K#Z.K.q.A.G.w#0#b#1#2#3#4#5#5#6#6#7#8.q.G#9..........",
+"..................#j#oa..5#j..#J#Ja##4#4aa.o.A##.E.xabacadae#Daf#M#Magah.r.qai.#..........",
+"................aja#akalamanaoapaqaaarasat.r.o.E.w.T.T.E.H.#...........#.d.d.#............",
+"...........E....#j#j#C#M#j#n#naa#V.O.f.N.F.q.G.d.w.r.C.d.H.#...............#..............",
+"...........#.F.F.J#n#n#n#n#n#nauav#p.q.N.d.d.w.M.F.F.E.d.U................................",
+".........E.F.E.E.d.z#n.d#n#n#naw.Uax.r##.d.w.D.M.r.N.E.w.d................................",
+".........E.F.......d.Fay.E.F#naz.2#A.D#h.r.f.w##.r##.d.H.M................................",
+".........F.#...........E.E.F.baAaB#A.#.E.f.r.w.N.N.E.waC.#................................",
+".........F.#...............d.F.E#K#d.H.G.F.G.w.N##.d.D.#..................................",
+".........F.#....................#Aau.v.E##.w.E.E.w.H.d.......d..av.d......................",
+".........E.#..................#j#GaC.M.H.M.d.d.w.H.#.d.d.#aC.w.C##.E.d....................",
+"...........F.................5#O...#aD.w.d.w.H.D.M######.G.F.o.f.o.N.3....................",
+"...........F.E...........5aEakak.....#.##h#h.v.N.o.f.q.L.L.L.L.L.q.faF....................",
+"...........E.E......#E#C.5aq#j.....#.v.N.F.d.N.r.F.r.F#Q.I.o.q.L.L.L.y....................",
+".............E.....................#.E.B.qaG.d.d.d.....#.#.....d#x.b......................",
+".............E.F...................E.w.L.LaG.#............................................",
+"...............E.E.................EaA.q.qaG.#............................................",
+"...............E.F.E.................E.r.r#Z.#............................................",
+".................E.F.E...............E.G.NaA..............................................",
+".................E#uaH.................w.dav..............................................",
+"...................E.E.............EaI.M.w.v.#............................................",
+"...................................E.D.d.E.waJ............................................",
+".....................................C.N.N##.M............................................",
+"..................................#W.f.q.A.f.G#q..........................................",
+".....................................q.L.L.L.q.V.#........................................",
+"...................................#.daK.q.qaL.d..........................................",
+".......................................#.#.#..............................................",
+"..........................................................................................",
+"..........................................................................................",
+".........................................................................................."
+};
diff --git a/minilibx/test/open30.xpm b/minilibx/test/open30.xpm
new file mode 100755
index 0000000..87be371
--- /dev/null
+++ b/minilibx/test/open30.xpm
@@ -0,0 +1,1439 @@
+/* XPM */
+static char * open30_2_xpm[] = {
+"64 64 1372 2",
+" c None",
+". c #08090D",
+"+ c #1A1E23",
+"@ c #1F2124",
+"# c #060809",
+"$ c #1A1E21",
+"% c #4F606C",
+"& c #3D4145",
+"* c #868D93",
+"= c #454E56",
+"- c #627481",
+"; c #667C8A",
+"> c #2D3031",
+", c #D7E1E7",
+"' c #4D5157",
+") c #8997A5",
+"! c #282E31",
+"~ c #333B41",
+"{ c #A5C6DB",
+"] c #718C9B",
+"^ c #000000",
+"/ c #181B1F",
+"( c #262828",
+"_ c #D2DEE7",
+": c #B8C5D0",
+"< c #151719",
+"[ c #08090B",
+"} c #272B30",
+"| c #2D3037",
+"1 c #26282C",
+"2 c #1A1D1F",
+"3 c #B1CADB",
+"4 c #56646E",
+"5 c #080809",
+"6 c #080A0C",
+"7 c #1E2126",
+"8 c #98B7C9",
+"9 c #A2CAE2",
+"0 c #7FA1B5",
+"a c #06080A",
+"b c #252729",
+"c c #A7ADB2",
+"d c #272B2E",
+"e c #1E2023",
+"f c #C8D8E5",
+"g c #C9DDED",
+"h c #8996A3",
+"i c #6B7782",
+"j c #C7DFF0",
+"k c #CCE0F0",
+"l c #AFC1CF",
+"m c #47535B",
+"n c #B0D3E8",
+"o c #7E99A9",
+"p c #738493",
+"q c #97B4C7",
+"r c #53606A",
+"s c #6E8996",
+"t c #A1CBE3",
+"u c #9CC6DE",
+"v c #90B5CB",
+"w c #171D22",
+"x c #1E2629",
+"y c #020202",
+"z c #ABB3BA",
+"A c #BBC4C8",
+"B c #222323",
+"C c #141617",
+"D c #5D6164",
+"E c #ACB5BC",
+"F c #676D74",
+"G c #BDD4E5",
+"H c #B3D1E7",
+"I c #B0D1E7",
+"J c #728A99",
+"K c #94AEBF",
+"L c #B1D1E7",
+"M c #505C64",
+"N c #7B98A9",
+"O c #A1CBE0",
+"P c #99C3D9",
+"Q c #475863",
+"R c #A0C9DE",
+"S c #9CC6DA",
+"T c #9ECAE1",
+"U c #9CC5DD",
+"V c #9AC4DC",
+"W c #263137",
+"X c #3C4A55",
+"Y c #658190",
+"Z c #66686B",
+"` c #7D8085",
+" . c #363839",
+".. c #797E81",
+"+. c #D2DBE1",
+"@. c #DDE9F4",
+"#. c #CADEEF",
+"$. c #778593",
+"%. c #AED0E5",
+"&. c #9EC9DE",
+"*. c #9EC8DF",
+"=. c #9BC1D8",
+"-. c #9EC8DE",
+";. c #6B8596",
+">. c #9BC5DC",
+",. c #9BC6DF",
+"'. c #9CC5DC",
+"). c #688595",
+"!. c #6B8698",
+"~. c #9CC4DC",
+"{. c #9BC4DC",
+"]. c #9DC5DD",
+"^. c #647D8C",
+"/. c #485864",
+"(. c #161A1D",
+"_. c #36444C",
+":. c #95BDD5",
+"<. c #566E7E",
+"[. c #A4AAAD",
+"}. c #E9F2F7",
+"|. c #DEEAF6",
+"1. c #B5D4E9",
+"2. c #A9CFE3",
+"3. c #90B3C9",
+"4. c #9FCAE1",
+"5. c #9BC4DD",
+"6. c #7490A2",
+"7. c #99C2DB",
+"8. c #81A5BA",
+"9. c #9CC5DE",
+"0. c #98C1DA",
+"a. c #5F7889",
+"b. c #96BFD8",
+"c. c #44545F",
+"d. c #565A5E",
+"e. c #DFE6EC",
+"f. c #E6EEF7",
+"g. c #D6E4F2",
+"h. c #BFD6E9",
+"i. c #A9CCE3",
+"j. c #9FC8DD",
+"k. c #9DC6DD",
+"l. c #9CC4DD",
+"m. c #7D9FB0",
+"n. c #98C0D6",
+"o. c #9AC5DD",
+"p. c #97BFD8",
+"q. c #9BC5DF",
+"r. c #2D3840",
+"s. c #626567",
+"t. c #E7ECF5",
+"u. c #E1EAF5",
+"v. c #CEE3F3",
+"w. c #B7D6EA",
+"x. c #A4CBE0",
+"y. c #8AAFC5",
+"z. c #647F90",
+"A. c #648092",
+"B. c #89B0C7",
+"C. c #9CC6DF",
+"D. c #5D7486",
+"E. c #7B9BAF",
+"F. c #84A8BF",
+"G. c #9BC5DD",
+"H. c #96BED5",
+"I. c #4B5D69",
+"J. c #9BC5DE",
+"K. c #536B77",
+"L. c #2E3B41",
+"M. c #1B2124",
+"N. c #3F4F58",
+"O. c #4D5152",
+"P. c #E7EEF3",
+"Q. c #E2EAF5",
+"R. c #CEE2F2",
+"S. c #BAD5E9",
+"T. c #9DC2D7",
+"U. c #5C7281",
+"V. c #232A31",
+"W. c #08090A",
+"X. c #121418",
+"Y. c #131619",
+"Z. c #131719",
+"`. c #87ACC3",
+" + c #7B9BAE",
+".+ c #87ADC3",
+"++ c #8FB5CB",
+"@+ c #678295",
+"#+ c #96C0D8",
+"$+ c #607787",
+"%+ c #6B8595",
+"&+ c #96C1DB",
+"*+ c #6A8595",
+"=+ c #35424A",
+"-+ c #7090A1",
+";+ c #15191C",
+">+ c #2D3033",
+",+ c #DDE5EB",
+"'+ c #D2E3F1",
+")+ c #BAD7EB",
+"!+ c #A9CFE5",
+"~+ c #272F35",
+"{+ c #1C2227",
+"]+ c #4F697B",
+"^+ c #6B8FA9",
+"/+ c #759CB6",
+"(+ c #7BA0BB",
+"_+ c #80A5BC",
+":+ c #88B0C8",
+"<+ c #96C3DB",
+"[+ c #8FB6CD",
+"}+ c #80A1B3",
+"|+ c #556876",
+"1+ c #96BFD7",
+"2+ c #566B77",
+"3+ c #93B8CD",
+"4+ c #637A8D",
+"5+ c #9DC6DE",
+"6+ c #8FB4CA",
+"7+ c #55697A",
+"8+ c #6F8F9F",
+"9+ c #91BDD5",
+"0+ c #283239",
+"a+ c #050406",
+"b+ c #767B80",
+"c+ c #BDC6CE",
+"d+ c #D4E5F3",
+"e+ c #C1D7EA",
+"f+ c #A7CDE4",
+"g+ c #9FC9DE",
+"h+ c #668596",
+"i+ c #6D90AA",
+"j+ c #5C7994",
+"k+ c #60849F",
+"l+ c #6286A1",
+"m+ c #688CA8",
+"n+ c #7298B2",
+"o+ c #82A8C2",
+"p+ c #8FBAD5",
+"q+ c #96C2DB",
+"r+ c #89ADC4",
+"s+ c #96BED6",
+"t+ c #99C2DA",
+"u+ c #6C899A",
+"v+ c #92BBD2",
+"w+ c #9AC4DD",
+"x+ c #5B717D",
+"y+ c #9EC6DE",
+"z+ c #8BB1C9",
+"A+ c #718EA0",
+"B+ c #94C3DB",
+"C+ c #536B78",
+"D+ c #3E505F",
+"E+ c #4E6373",
+"F+ c #2C333C",
+"G+ c #070708",
+"H+ c #040404",
+"I+ c #1A1C1E",
+"J+ c #202326",
+"K+ c #050606",
+"L+ c #23292E",
+"M+ c #A1C0D4",
+"N+ c #9FC9DD",
+"O+ c #97C2DB",
+"P+ c #80A8C1",
+"Q+ c #668AA6",
+"R+ c #4B5D72",
+"S+ c #4C647A",
+"T+ c #5F80A0",
+"U+ c #60859E",
+"V+ c #678AA6",
+"W+ c #739BB5",
+"X+ c #85AEC7",
+"Y+ c #92BDD7",
+"Z+ c #96BFD5",
+"`+ c #627B8A",
+" @ c #89B1C9",
+".@ c #2B353C",
+"+@ c #7597B2",
+"@@ c #779CB8",
+"#@ c #52697C",
+"$@ c #1D2328",
+"%@ c #445663",
+"&@ c #5E7A8D",
+"*@ c #252F37",
+"=@ c #090909",
+"-@ c #859BB2",
+";@ c #859DB8",
+">@ c #6E8396",
+",@ c #252C33",
+"'@ c #9CC4D7",
+")@ c #92C0D9",
+"!@ c #79A0BA",
+"~@ c #6487A3",
+"{@ c #566979",
+"]@ c #8CB0C2",
+"^@ c #51697C",
+"/@ c #60849D",
+"(@ c #6D8EAC",
+"_@ c #7BA0BC",
+":@ c #8AB4CE",
+"<@ c #95C2DB",
+"[@ c #9AC5DC",
+"}@ c #95C1DA",
+"|@ c #607B8C",
+"1@ c #597488",
+"2@ c #7EA6BF",
+"3@ c #597587",
+"4@ c #455664",
+"5@ c #668598",
+"6@ c #82A9C4",
+"7@ c #617F92",
+"8@ c #1A2328",
+"9@ c #2B3137",
+"0@ c #728FAC",
+"a@ c #51657B",
+"b@ c #6B8AA8",
+"c@ c #8EAEC7",
+"d@ c #A8C8E2",
+"e@ c #92BDD6",
+"f@ c #769DBA",
+"g@ c #526E87",
+"h@ c #7490A0",
+"i@ c #A6CDE4",
+"j@ c #97BFD4",
+"k@ c #55697D",
+"l@ c #6286A0",
+"m@ c #7399B3",
+"n@ c #84ACC5",
+"o@ c #92BFD9",
+"p@ c #99C4DC",
+"q@ c #94C0DA",
+"r@ c #4F6575",
+"s@ c #7DA5BF",
+"t@ c #7FA2BC",
+"u@ c #8FB6CE",
+"v@ c #95C3DB",
+"w@ c #8EB8D2",
+"x@ c #6A879D",
+"y@ c #111318",
+"z@ c #252A30",
+"A@ c #81868C",
+"B@ c #A5ABAD",
+"C@ c #70767C",
+"D@ c #38434F",
+"E@ c #637F9B",
+"F@ c #516980",
+"G@ c #799AB5",
+"H@ c #A5C3D9",
+"I@ c #93BDD6",
+"J@ c #779EBA",
+"K@ c #445A6B",
+"L@ c #93B5C9",
+"M@ c #B6D3E8",
+"N@ c #AECFE4",
+"O@ c #95BDD2",
+"P@ c #52687A",
+"Q@ c #6486A3",
+"R@ c #7092B0",
+"S@ c #90BCD6",
+"T@ c #97C4DC",
+"U@ c #A0C9E0",
+"V@ c #99C5DD",
+"W@ c #86AEC6",
+"X@ c #8FBAD4",
+"Y@ c #91BDD6",
+"Z@ c #7094AC",
+"`@ c #2A353E",
+" # c #0B0E10",
+".# c #888D90",
+"+# c #787D82",
+"@# c #465360",
+"## c #56697F",
+"$# c #A6CADD",
+"%# c #5A7382",
+"&# c #6C8CAA",
+"*# c #A5BED3",
+"=# c #A7CAE0",
+"-# c #94C1DA",
+";# c #7EA4BF",
+"># c #415160",
+",# c #9DC3D5",
+"'# c #B3CFE1",
+")# c #AAC3D4",
+"!# c #A8CDE4",
+"~# c #89ACBE",
+"{# c #567088",
+"]# c #6C91AC",
+"^# c #81A7C2",
+"/# c #96C4DC",
+"(# c #85A9BD",
+"_# c #708C9B",
+":# c #5A6E7B",
+"<# c #6C8695",
+"[# c #97C3DB",
+"}# c #8BB5CE",
+"|# c #425461",
+"1# c #63819E",
+"2# c #415465",
+"3# c #0B0D0E",
+"4# c #607387",
+"5# c #687D8C",
+"6# c #B8D6E9",
+"7# c #7893A2",
+"8# c #576F85",
+"9# c #A7BACF",
+"0# c #B0CEE5",
+"a# c #98C4DC",
+"b# c #88B1CA",
+"c# c #36444E",
+"d# c #8FA0AD",
+"e# c #73818D",
+"f# c #596D81",
+"g# c #B4D0E4",
+"h# c #A3CDE2",
+"i# c #658296",
+"j# c #6A8DAB",
+"k# c #7BA5C0",
+"l# c #94BAD2",
+"m# c #6D899B",
+"n# c #99C3DC",
+"o# c #8EB9D2",
+"p# c #7AA0BA",
+"q# c #6C8FAB",
+"r# c #6484A1",
+"s# c #1F252C",
+"t# c #121619",
+"u# c #7E96B0",
+"v# c #7A8A96",
+"w# c #BCD7EA",
+"x# c #A0C5D9",
+"y# c #3C4B57",
+"z# c #A9BACD",
+"A# c #BCD5E8",
+"B# c #84A6BA",
+"C# c #8EA1AE",
+"D# c #CFD1D4",
+"E# c #ECF6FA",
+"F# c #ABB7C2",
+"G# c #556F84",
+"H# c #57626A",
+"I# c #5C7078",
+"J# c #6C8AA7",
+"K# c #80A6C0",
+"L# c #91B8D0",
+"M# c #94BFD8",
+"N# c #87B0CA",
+"O# c #7CA2BB",
+"P# c #7097AF",
+"Q# c #495E6F",
+"R# c #0C0E11",
+"S# c #3A3F43",
+"T# c #8AA3BB",
+"U# c #778592",
+"V# c #C0D8EB",
+"W# c #B3D5E9",
+"X# c #404A53",
+"Y# c #B2C2D3",
+"Z# c #96A1AC",
+"`# c #9DB2C3",
+" $ c #AEBECE",
+".$ c #EDEFF3",
+"+$ c #F7FAFC",
+"@$ c #B6BFC7",
+"#$ c #556E85",
+"$$ c #121314",
+"%$ c #2B2E2F",
+"&$ c #555A5E",
+"*$ c #3B4C5B",
+"=$ c #6F8EA4",
+"-$ c #92BED8",
+";$ c #9DC7DF",
+">$ c #87ACC1",
+",$ c #546A78",
+"'$ c #516874",
+")$ c #4E6570",
+"!$ c #4D6271",
+"~$ c #4C6271",
+"{$ c #4E677A",
+"]$ c #38454E",
+"^$ c #6C7278",
+"/$ c #86A1B6",
+"($ c #5C656C",
+"_$ c #A4B0BA",
+":$ c #555D64",
+"<$ c #657178",
+"[$ c #A6B0B5",
+"}$ c #939CA1",
+"|$ c #D4E4F1",
+"1$ c #A0BACE",
+"2$ c #B9C7D7",
+"3$ c #F6F7F9",
+"4$ c #C6CED1",
+"5$ c #506A7C",
+"6$ c #060607",
+"7$ c #676A6B",
+"8$ c #91999F",
+"9$ c #7CA3BE",
+"0$ c #96BCD4",
+"a$ c #5B717E",
+"b$ c #4B5F6C",
+"c$ c #455864",
+"d$ c #5B717F",
+"e$ c #81A5B9",
+"f$ c #98C4DD",
+"g$ c #93BFD8",
+"h$ c #87B1CA",
+"i$ c #7BA1BC",
+"j$ c #5A7489",
+"k$ c #222A33",
+"l$ c #838A92",
+"m$ c #9DADBC",
+"n$ c #ECF0F5",
+"o$ c #F1F9FB",
+"p$ c #818A8D",
+"q$ c #4A5155",
+"r$ c #6A6F72",
+"s$ c #7E898F",
+"t$ c #E6F1F7",
+"u$ c #CADCED",
+"v$ c #A0B7CC",
+"w$ c #C6D1DF",
+"x$ c #AFB3B4",
+"y$ c #5F707D",
+"z$ c #CBCFD1",
+"A$ c #F4F5F6",
+"B$ c #66737F",
+"C$ c #87B2CB",
+"D$ c #90B7CD",
+"E$ c #596E7B",
+"F$ c #586F7E",
+"G$ c #8BB0C8",
+"H$ c #91BED6",
+"I$ c #83ADC7",
+"J$ c #6D8EA7",
+"K$ c #3F5161",
+"L$ c #2D3A45",
+"M$ c #1F2020",
+"N$ c #BDC5CC",
+"O$ c #E0EDF5",
+"P$ c #BBCAD8",
+"Q$ c #E1E4E7",
+"R$ c #5E6368",
+"S$ c #5B5F62",
+"T$ c #D9E7F3",
+"U$ c #A4C3D6",
+"V$ c #89A3B3",
+"W$ c #7B91A1",
+"X$ c #627990",
+"Y$ c #42505A",
+"Z$ c #CACCCE",
+"`$ c #F9F9F9",
+" % c #FDFDFD",
+".% c #BCBEC0",
+"+% c #5C7689",
+"@% c #8DB9D3",
+"#% c #8FB5CC",
+"$% c #536471",
+"%% c #98C1D9",
+"&% c #91BED7",
+"*% c #81AAC5",
+"=% c #597386",
+"-% c #41535F",
+";% c #6486A2",
+">% c #4D667D",
+",% c #070809",
+"'% c #44484E",
+")% c #BEC8D0",
+"!% c #8096A6",
+"~% c #516473",
+"{% c #A9ACAF",
+"]% c #8B8F91",
+"^% c #A8B3BD",
+"/% c #C5DAEB",
+"(% c #9FC8E1",
+"_% c #8FBCD6",
+":% c #81A8C2",
+"<% c #6C90AC",
+"[% c #56728C",
+"}% c #585B5F",
+"|% c #CBCDCD",
+"1% c #C1C3C6",
+"2% c #4F565F",
+"3% c #82ABC3",
+"4% c #93BCD3",
+"5% c #95BED7",
+"6% c #8EB9D3",
+"7% c #5B788B",
+"8% c #627E91",
+"9% c #7FA7C1",
+"0% c #6C91AB",
+"a% c #546F87",
+"b% c #6F7376",
+"c% c #D5E2EF",
+"d% c #A9C4D8",
+"e% c #81A1BA",
+"f% c #333940",
+"g% c #5F6B76",
+"h% c #C0D5E8",
+"i% c #AACCE2",
+"j% c #8EB8D3",
+"k% c #7FA5BF",
+"l% c #7095B0",
+"m% c #4E697E",
+"n% c #07090A",
+"o% c #0D0F10",
+"p% c #7193A6",
+"q% c #96C3DC",
+"r% c #8EBCD7",
+"s% c #91BDD7",
+"t% c #8FBBD6",
+"u% c #7699AD",
+"v% c #4D626F",
+"w% c #252D33",
+"x% c #101215",
+"y% c #0C0D0E",
+"z% c #0A0C0E",
+"A% c #06090A",
+"B% c #7F8488",
+"C% c #D7E3F1",
+"D% c #B6D0E4",
+"E% c #A3C2D7",
+"F% c #596872",
+"G% c #A9BED0",
+"H% c #B4D0E5",
+"I% c #9EC8DC",
+"J% c #8FB9D4",
+"K% c #85ADC7",
+"L% c #7FA4BE",
+"M% c #4B606F",
+"N% c #4E6372",
+"O% c #89B6D0",
+"P% c #92C1DA",
+"Q% c #9DC7DD",
+"R% c #95C0DA",
+"S% c #94BED8",
+"T% c #8BB8D1",
+"U% c #7AA0B9",
+"V% c #4E667A",
+"W% c #344151",
+"X% c #0C0D0F",
+"Y% c #8A8F92",
+"Z% c #D4E6F5",
+"`% c #BCD5E9",
+" & c #8599A5",
+".& c #939DA6",
+"+& c #C4DAEB",
+"@& c #89A6B9",
+"#& c #7D9FB5",
+"$& c #98C3DC",
+"%& c #95C0D9",
+"&& c #7CA2B9",
+"*& c #7697AE",
+"=& c #698498",
+"-& c #7394A8",
+";& c #9EC7DF",
+">& c #8DB1C4",
+",& c #6B8594",
+"'& c #50636C",
+")& c #50626C",
+"!& c #7F9FB1",
+"~& c #93B8D0",
+"{& c #627A88",
+"]& c #90B6CC",
+"^& c #93BDD7",
+"/& c #87AFC9",
+"(& c #7291A7",
+"_& c #384651",
+":& c #121618",
+"<& c #12171B",
+"[& c #4F6986",
+"}& c #597998",
+"|& c #324052",
+"1& c #969CA1",
+"2& c #D6E6F5",
+"3& c #C6DCEE",
+"4& c #505A64",
+"5& c #82929F",
+"6& c #99ABBB",
+"7& c #A1B9CA",
+"8& c #87A0B0",
+"9& c #718EA1",
+"0& c #8DB2C9",
+"a& c #8BAEC4",
+"b& c #586D7D",
+"c& c #97C0D9",
+"d& c #8DB3C9",
+"e& c #95B8CD",
+"f& c #9DC0D6",
+"g& c #6F8B9C",
+"h& c #354249",
+"i& c #464E54",
+"j& c #8A98A5",
+"k& c #AABAC7",
+"l& c #86939E",
+"m& c #41494F",
+"n& c #4A5861",
+"o& c #97C1DA",
+"p& c #5E7888",
+"q& c #5C7482",
+"r& c #88ACC2",
+"s& c #91BFD7",
+"t& c #799CB5",
+"u& c #47596A",
+"v& c #0D0F12",
+"w& c #1A2127",
+"x& c #56778D",
+"y& c #688BA9",
+"z& c #5D7F9E",
+"A& c #547391",
+"B& c #0E1013",
+"C& c #9DA6AB",
+"D& c #C8DCED",
+"E& c #7A8996",
+"F& c #B5CEE0",
+"G& c #BCDBEC",
+"H& c #B9D5EA",
+"I& c #8BA2B2",
+"J& c #6C8A9D",
+"K& c #97BFD7",
+"L& c #3E4E59",
+"M& c #92B5CB",
+"N& c #535F68",
+"O& c #454F56",
+"P& c #6F7C87",
+"Q& c #ABC0D1",
+"R& c #C7DCEE",
+"S& c #C5DBED",
+"T& c #C2D7EA",
+"U& c #BFD8EA",
+"V& c #BCD7EB",
+"W& c #62717B",
+"X& c #5B6F7B",
+"Y& c #95C3DC",
+"Z& c #8BB2C9",
+"`& c #485761",
+" * c #42525F",
+".* c #6686A1",
+"+* c #587896",
+"@* c #1B2129",
+"#* c #5C7A94",
+"$* c #7DA2BD",
+"%* c #84AEC7",
+"&* c #749BB5",
+"** c #5C7E9C",
+"=* c #27343F",
+"-* c #A4A9B2",
+";* c #D9E7F4",
+">* c #C8DBEC",
+",* c #B1C8DA",
+"'* c #5D6C76",
+")* c #A8C5D8",
+"!* c #A6BDD0",
+"~* c #B9D6EA",
+"{* c #B9D4E9",
+"]* c #8198A8",
+"^* c #8AADC3",
+"/* c #8CB1CA",
+"(* c #96C2D8",
+"_* c #A3C7DF",
+":* c #ADCDE3",
+"<* c #ABD0E4",
+"[* c #ADCFE3",
+"}* c #AACEE4",
+"|* c #A4CDE3",
+"1* c #A1CBE1",
+"2* c #A3CCE3",
+"3* c #A2C9DF",
+"4* c #41515A",
+"5* c #81A2B5",
+"6* c #94C0D7",
+"7* c #5E7789",
+"8* c #526777",
+"9* c #516777",
+"0* c #6B8CA5",
+"a* c #759CBA",
+"b* c #658AA5",
+"c* c #587798",
+"d* c #1B242B",
+"e* c #0E1110",
+"f* c #101214",
+"g* c #202931",
+"h* c #59758E",
+"i* c #799FBB",
+"j* c #84B1CA",
+"k* c #86ACC6",
+"l* c #354758",
+"m* c #A0A6AE",
+"n* c #DAE6F2",
+"o* c #C4DCEE",
+"p* c #B4D2E8",
+"q* c #3E4A53",
+"r* c #698091",
+"s* c #5D7581",
+"t* c #A3CAE0",
+"u* c #A6CFE5",
+"v* c #A5CCE5",
+"w* c #718A9C",
+"x* c #98C3DB",
+"y* c #83ABC7",
+"z* c #2E3B46",
+"A* c #33414A",
+"B* c #678398",
+"C* c #8AB3CE",
+"D* c #93BED7",
+"E* c #97C4DB",
+"F* c #42525E",
+"G* c #88ACC0",
+"H* c #789EB9",
+"I* c #7A9FBB",
+"J* c #7EA2BD",
+"K* c #779DB5",
+"L* c #577081",
+"M* c #5B7B9B",
+"N* c #1D2229",
+"O* c #547390",
+"P* c #54728D",
+"Q* c #6082A0",
+"R* c #688EA9",
+"S* c #6689A7",
+"T* c #6086A0",
+"U* c #6285A1",
+"V* c #6B8DAA",
+"W* c #718FAB",
+"X* c #3E5568",
+"Y* c #969DA1",
+"Z* c #DBE8F4",
+"`* c #95ACBD",
+" = c #758B9A",
+".= c #A4C9DE",
+"+= c #698190",
+"@= c #667E8A",
+"#= c #7D99AA",
+"$= c #7B9BAD",
+"%= c #6F8C9A",
+"&= c #536976",
+"*= c #84ADC6",
+"== c #6D92AD",
+"-= c #62829E",
+";= c #43576A",
+">= c #2F3B46",
+",= c #5C788A",
+"'= c #86AFC8",
+")= c #93BED8",
+"!= c #93BAD5",
+"~= c #93BAD2",
+"{= c #92BCD4",
+"]= c #7EA2B6",
+"^= c #3D4D56",
+"/= c #485B67",
+"(= c #7596A9",
+"_= c #8CBBD4",
+":= c #90BCD5",
+"<= c #91BFD9",
+"[= c #789BAD",
+"}= c #465B6A",
+"|= c #59789A",
+"1= c #5D7F9D",
+"2= c #5E839C",
+"3= c #59799A",
+"4= c #415569",
+"5= c #2D3A46",
+"6= c #2E3B49",
+"7= c #4A647C",
+"8= c #587690",
+"9= c #39485A",
+"0= c #7F8589",
+"a= c #D9E8F5",
+"b= c #CCDEEE",
+"c= c #8597A5",
+"d= c #B3D2E3",
+"e= c #9BB3C4",
+"f= c #B2CEE1",
+"g= c #B2D1E7",
+"h= c #ABCFE6",
+"i= c #94B7CB",
+"j= c #495C6A",
+"k= c #688498",
+"l= c #617B8A",
+"m= c #85ADC8",
+"n= c #78A0B9",
+"o= c #62819B",
+"p= c #2E3843",
+"q= c #485A6C",
+"r= c #67889C",
+"s= c #8AB5CF",
+"t= c #8EB9D1",
+"u= c #6C899B",
+"v= c #6E91A7",
+"w= c #678399",
+"x= c #6888A1",
+"y= c #323E48",
+"z= c #5B7585",
+"A= c #98C5DD",
+"B= c #83ACC1",
+"C= c #2D373F",
+"D= c #4B637C",
+"E= c #567694",
+"F= c #26313C",
+"G= c #15191F",
+"H= c #4D647A",
+"I= c #252F39",
+"J= c #5D6163",
+"K= c #DDE9F5",
+"L= c #CEDFEE",
+"M= c #8898A5",
+"N= c #B0CBDC",
+"O= c #BFDAEC",
+"P= c #BFDBEC",
+"Q= c #BBDAEC",
+"R= c #BAD7EA",
+"S= c #6B808F",
+"T= c #7297B0",
+"U= c #8CB8D1",
+"V= c #95C1D9",
+"W= c #91BCD6",
+"X= c #86AEC8",
+"Y= c #7496B3",
+"Z= c #6587A2",
+"`= c #384958",
+" - c #323F4B",
+".- c #546A7C",
+"+- c #6C88A1",
+"@- c #779AB1",
+"#- c #658297",
+"$- c #3B4A58",
+"%- c #33404B",
+"&- c #202830",
+"*- c #577287",
+"=- c #86B1CC",
+"-- c #86ACC0",
+";- c #6E8797",
+">- c #9CC7DF",
+",- c #92BCD5",
+"'- c #91BCD5",
+")- c #8EB6CE",
+"!- c #344453",
+"~- c #263039",
+"{- c #364452",
+"]- c #2B3643",
+"^- c #2A2D2E",
+"/- c #E1EBF4",
+"(- c #D2E4F3",
+"_- c #A0B2C3",
+":- c #8094A1",
+"<- c #BAD8EB",
+"[- c #B8D6EA",
+"}- c #485A6A",
+"|- c #789FB9",
+"1- c #90BBD3",
+"2- c #94C4DC",
+"3- c #88B3CD",
+"4- c #7A9EB9",
+"5- c #698BA8",
+"6- c #4D677C",
+"7- c #151A1E",
+"8- c #1A2125",
+"9- c #171C21",
+"0- c #1D2329",
+"a- c #1D262E",
+"b- c #486073",
+"c- c #6A8CAA",
+"d- c #7CA2BE",
+"e- c #90BDD7",
+"f- c #9AC5DE",
+"g- c #7493A2",
+"h- c #708B99",
+"i- c #8CB7D1",
+"j- c #7494AB",
+"k- c #68889F",
+"l- c #6A8FA5",
+"m- c #7BA2BC",
+"n- c #171D21",
+"o- c #1D262F",
+"p- c #212B36",
+"q- c #09090B",
+"r- c #BBC2C9",
+"s- c #D4E4F2",
+"t- c #C1D9EB",
+"u- c #44515A",
+"v- c #92B5C9",
+"w- c #6B8795",
+"x- c #4E687E",
+"y- c #7EA6C0",
+"z- c #91BED8",
+"A- c #93BFD9",
+"B- c #8CB5D0",
+"C- c #7DA4BE",
+"D- c #6F92AE",
+"E- c #6687A5",
+"F- c #526C85",
+"G- c #415669",
+"H- c #384655",
+"I- c #6589A4",
+"J- c #6E92AE",
+"K- c #80A8C2",
+"L- c #92BCD6",
+"M- c #91BFD8",
+"N- c #799AAF",
+"O- c #6A8796",
+"P- c #81AAC3",
+"Q- c #577187",
+"R- c #1F2930",
+"S- c #192027",
+"T- c #1B2227",
+"U- c #0D1010",
+"V- c #0E1012",
+"W- c #070709",
+"X- c #5C6062",
+"Y- c #DCE8F3",
+"Z- c #C4DCEF",
+"`- c #9BB3C6",
+" ; c #3A424F",
+".; c #313A44",
+"+; c #35424C",
+"@; c #374655",
+"#; c #6E91AD",
+"$; c #87B2CC",
+"%; c #799EBA",
+"&; c #618298",
+"*; c #7095AF",
+"=; c #435663",
+"-; c #80A7C0",
+";; c #95C4DC",
+">; c #779CB3",
+",; c #526D7E",
+"'; c #516A7A",
+"); c #526B7B",
+"!; c #465764",
+"~; c #34414E",
+"{; c #5C7E9A",
+"]; c #2B3741",
+"^; c #4B657F",
+"/; c #5C7D9C",
+"(; c #557088",
+"_; c #0F0F10",
+":; c #B9C2CA",
+"<; c #CCDFEF",
+"[; c #B4CDE1",
+"}; c #8DAEC8",
+"|; c #6F93AE",
+"1; c #678CA6",
+"2; c #6E92AF",
+"3; c #81A8C1",
+"4; c #8FBBD5",
+"5; c #8DB9D2",
+"6; c #6D8FA2",
+"7; c #586F82",
+"8; c #394851",
+"9; c #86B0C6",
+"0; c #85AFC8",
+"a; c #6F94AF",
+"b; c #698DA8",
+"c; c #6889A7",
+"d; c #5E7E9F",
+"e; c #475D75",
+"f; c #2E3C4A",
+"g; c #5D7E9D",
+"h; c #405465",
+"i; c #36393B",
+"j; c #D7E5F1",
+"k; c #A4C5DC",
+"l; c #668496",
+"m; c #7595AB",
+"n; c #7798AE",
+"o; c #97C2DA",
+"p; c #789DB3",
+"q; c #8BB1C8",
+"r; c #93C0D9",
+"s; c #8BB5CF",
+"t; c #85AFC9",
+"u; c #82AAC6",
+"v; c #5F7C95",
+"w; c #1E252C",
+"x; c #54728E",
+"y; c #587899",
+"z; c #5A7B9B",
+"A; c #2D3843",
+"B; c #798086",
+"C; c #D1E3F1",
+"D; c #B7D3E8",
+"E; c #7E98AB",
+"F; c #181C1F",
+"G; c #46525F",
+"H; c #80A1B8",
+"I; c #99C3DB",
+"J; c #85ACC2",
+"K; c #21272D",
+"L; c #0A0B0D",
+"M; c #53718C",
+"N; c #577797",
+"O; c #1B2229",
+"P; c #0D0E0F",
+"Q; c #B3BDC4",
+"R; c #CADDED",
+"S; c #B4D3E7",
+"T; c #2B3339",
+"U; c #2F3840",
+"V; c #7899AC",
+"W; c #93C1D9",
+"X; c #8FBCD5",
+"Y; c #8BB6D1",
+"Z; c #8DB8D2",
+"`; c #92BFD8",
+" > c #678092",
+".> c #547089",
+"+> c #5C7F9B",
+"@> c #1F262E",
+"#> c #202223",
+"$> c #B1BECB",
+"%> c #C3D9EB",
+"&> c #7B8D99",
+"*> c #708B9A",
+"=> c #85ABC1",
+"-> c #7FA3BA",
+";> c #92BBD3",
+">> c #7CA0B4",
+",> c #97BDD4",
+"'> c #657E8F",
+")> c #93BDD4",
+"!> c #88ADC7",
+"~> c #6F94AE",
+"{> c #526A7E",
+"]> c #65849B",
+"^> c #799DBB",
+"/> c #84AFC9",
+"(> c #8FB9D2",
+"_> c #323C45",
+":> c #516C84",
+"<> c #658AA4",
+"[> c #5B7C9B",
+"}> c #2E3A49",
+"|> c #2A3038",
+"1> c #252D3A",
+"2> c #1B1E20",
+"3> c #ADBFCF",
+"4> c #C0D6E7",
+"5> c #B0CDE2",
+"6> c #8EB3C9",
+"7> c #526975",
+"8> c #6B899D",
+"9> c #597183",
+"0> c #90BAD5",
+"a> c #94C2DA",
+"b> c #82ABC5",
+"c> c #495E6E",
+"d> c #82A8C3",
+"e> c #81A4BA",
+"f> c #7594A5",
+"g> c #87ABC3",
+"h> c #4D6573",
+"i> c #6689A6",
+"j> c #526E85",
+"k> c #243037",
+"l> c #607B96",
+"m> c #7699B6",
+"n> c #789EB5",
+"o> c #303D48",
+"p> c #7498B4",
+"q> c #7094AF",
+"r> c #597792",
+"s> c #242F39",
+"t> c #1A1D25",
+"u> c #374553",
+"v> c #4D677D",
+"w> c #14191E",
+"x> c #040505",
+"y> c #171A1D",
+"z> c #8A9FAD",
+"A> c #BCD9EC",
+"B> c #B5D3E7",
+"C> c #A2CAE1",
+"D> c #9DC7DE",
+"E> c #9EC7DD",
+"F> c #3B4A57",
+"G> c #455867",
+"H> c #98C2DB",
+"I> c #85B0CC",
+"J> c #7496B2",
+"K> c #4C606F",
+"L> c #6E8EA3",
+"M> c #7EA0B6",
+"N> c #91BBD3",
+"O> c #8DB7D1",
+"P> c #90BAD4",
+"Q> c #96C1DA",
+"R> c #3B4853",
+"S> c #688AA5",
+"T> c #4C657A",
+"U> c #1B2026",
+"V> c #2B3C44",
+"W> c #5F7A90",
+"X> c #587284",
+"Y> c #536978",
+"Z> c #88B1CC",
+"`> c #759AB8",
+" , c #617E9A",
+"., c #556F85",
+"+, c #20272E",
+"@, c #323D48",
+"#, c #333E4A",
+"$, c #060707",
+"%, c #4A5159",
+"&, c #ACC3D5",
+"*, c #ACCFE5",
+"=, c #5A6874",
+"-, c #AACDE1",
+";, c #9CC6DC",
+">, c #35414C",
+",, c #769AB2",
+"', c #80AAC5",
+"), c #6F92AB",
+"!, c #38464F",
+"~, c #7EA4B9",
+"{, c #97C3DC",
+"], c #7A9FB6",
+"^, c #3F505C",
+"/, c #6D8DA6",
+"(, c #1E282E",
+"_, c #080909",
+":, c #090A0C",
+"<, c #344452",
+"[, c #3B4857",
+"}, c #7799AE",
+"|, c #8DB6D1",
+"1, c #66869E",
+"2, c #3D4957",
+"3, c #536C84",
+"4, c #353F4C",
+"5, c #111215",
+"6, c #65727E",
+"7, c #A6BCCD",
+"8, c #5D6972",
+"9, c #AED0E6",
+"0, c #99C5DC",
+"a, c #8DB5D0",
+"b, c #8DB5CE",
+"c, c #90BBD5",
+"d, c #84AAC5",
+"e, c #8EBBD5",
+"f, c #80A7C1",
+"g, c #6C8DA2",
+"h, c #85AFC6",
+"i, c #61839B",
+"j, c #374352",
+"k, c #576D83",
+"l, c #80A6C1",
+"m, c #81A4BB",
+"n, c #111315",
+"o, c #111418",
+"p, c #4C6378",
+"q, c #33424C",
+"r, c #37454D",
+"s, c #8DB4CF",
+"t, c #7397B3",
+"u, c #3A495A",
+"v, c #0D0F13",
+"w, c #27303A",
+"x, c #272E36",
+"y, c #0F1012",
+"z, c #90A4B2",
+"A, c #A8CBE2",
+"B, c #91BCD4",
+"C, c #80ABC3",
+"D, c #567083",
+"E, c #67899D",
+"F, c #94C2DB",
+"G, c #95C1DB",
+"H, c #779CB2",
+"I, c #60849E",
+"J, c #64849F",
+"K, c #1A1F22",
+"L, c #405061",
+"M, c #79A1BD",
+"N, c #324051",
+"O, c #6183A1",
+"P, c #6B8FAD",
+"Q, c #6485A2",
+"R, c #34444F",
+"S, c #060606",
+"T, c #2D3339",
+"U, c #B2CBDF",
+"V, c #94BCD5",
+"W, c #7DA2BA",
+"X, c #3F5264",
+"Y, c #5A7991",
+"Z, c #7195B3",
+"`, c #7BA5BD",
+" ' c #81AAC6",
+".' c #88B2CC",
+"+' c #8EBBD4",
+"@' c #8AB2CC",
+"#' c #82ADC7",
+"$' c #7092A5",
+"%' c #95C2DA",
+"&' c #41525F",
+"*' c #6387A3",
+"=' c #475F72",
+"-' c #21282F",
+";' c #5B7288",
+">' c #0D0F11",
+",' c #0B0E11",
+"'' c #212C36",
+")' c #26323C",
+"!' c #161B20",
+"~' c #55616D",
+"{' c #9BB9D0",
+"]' c #799EB6",
+"^' c #27313A",
+"/' c #1A222B",
+"(' c #5D7E99",
+"_' c #6587A4",
+":' c #6789A6",
+"<' c #6B8EAB",
+"[' c #628097",
+"}' c #6D8B9D",
+"|' c #769AAF",
+"1' c #6E91A9",
+"2' c #6C8EAD",
+"3' c #6E91AF",
+"4' c #3C4D59",
+"5' c #8BB1CB",
+"6' c #232D32",
+"7' c #13171B",
+"8' c #232B32",
+"9' c #839AAF",
+"0' c #789BB3",
+"a' c #283138",
+"b' c #0C0E0F",
+"c' c #242B33",
+"d' c #3D4D5B",
+"e' c #435768",
+"f' c #4B6176",
+"g' c #283137",
+"h' c #8DB4CC",
+"i' c #41535E",
+"j' c #405362",
+"k' c #3C4F60",
+"l' c #3C4E5B",
+"m' c #2B353E",
+"n' c #526876",
+"o' c #92BAD3",
+"p' c #1B1F23",
+"q' c #31383F",
+"r' c #7F9CB6",
+"s' c #21292F",
+"t' c #29333F",
+"u' c #1F252E",
+"v' c #090A0E",
+"w' c #4D626E",
+"x' c #96BDD3",
+"y' c #191D20",
+"z' c #13181B",
+"A' c #80A4BC",
+"B' c #1B2027",
+"C' c #5D7182",
+"D' c #2C383F",
+"E' c #364857",
+"F' c #1A2028",
+"G' c #333F49",
+"H' c #7FA2B5",
+"I' c #4A5E6E",
+"J' c #232E35",
+"K' c #252D35",
+"L' c #2F3A41",
+"M' c #0A0B0E",
+"N' c #14191D",
+"O' c #5A717F",
+"P' c #212931",
+"Q' c #222B34",
+"R' c #101216",
+"S' c #21272B",
+" ",
+" ",
+" ",
+" . ",
+" + ",
+" @ # $ % ",
+" & * = - ; ",
+" > , ' ) ! ~ { ] ",
+" ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a ",
+" b c d e f g h i j k l m n o p q r s t u v w x ",
+" y z A B C D E F G H I J K L M N O P Q R S T U U V W X Y ",
+" Z ` ...+.@.#.$.%.O &.*.=.-.;.>.,.'.).!.~.~.~.{.].^./.(._.:.<. ",
+" b [.}.|.#.1.2.3.4.{.~.~.~.~.5.6.5.~.7.8.{.~.~.~.~.9.0.a.b.].c. ",
+" d.e.f.g.h.i.j.k.{.~.~.~.~.l.~.m.% n.~.o.{.{.~.~.~.~.p.V 9.~.q.r. ",
+" s.t.u.v.w.x.u y.z.A.B.5.~.~.5.C.D.E.F.~.~.G.~.~.~.G.H.I.J.~.~.J.K.L. M.N. ",
+" O.P.Q.R.S.T.U.V.W.X.Y.Z.`.~.~.5. +.+++@+U ~.~.~.~.~.#+$+%+,.~.~.G.&+*+=+-+;+ ",
+" >+,+Q.'+)+!+~+{+]+^+/+(+_+:+<+~.[+}+U 9.|+5.~.~.~.~.1+2+3+4+5+~.].6+7+8+9+0+ ",
+" a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+5.U ~.U r+s+~.~.~.t+u+v+w+x+y+~.z+A+t+B+C+D+E+ F+G+ ",
+" H+I+J+K+L+M+N+O+P+Q+R+S+T+U+V+W+X+Y+V ~.~.~.~.U ~.~.~.o.9.{.Z+`+9.~.~.~.V @.@+@@@#@ $@%@&@*@ ",
+" =@-@;@>@,@'@'.)@!@~@{@]@^@/@l+(@_@:@<@~.~.~.U {.~.~.~.{.~.~.{.[@~.~.~.~.}@|@1@2@3@4@5@6@7@8@ ",
+" 9@0@a@b@c@d@-.e@f@g@h@i@j@k@l@V+m@n@o@p@~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.{.q@r@s@t@u@v@w@x@y@ ",
+"z@A@B@C@D@E@X F@G@H@R I@J@K@L@M@N@O@P@Q@R@o+S@T@~.~.~.~.~.~.~.~.~.~.~.~.~.~.9.U@V@W@X@<+V Y@Z@`@ # ",
+" .#+#@###$#%#&#*#=#-#;#>#,#'#)#!#~#{#]#^#S@/#~.~.~.~.~.~.~.~.~.~.~.~.~.U (#_#:#<#p@{.[#}#|#1#2# ",
+" 3#4#5#6#7#8#9#0#a#b#c#d#e#f#g#h#i#j#k#S@/#~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.l#m#9.{.~.n#o#p#q#r#s# ",
+" t#u#v#w#x#y#z#A#B#C#D#E#F#G#H#I#% J#K#S@T@~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.L#0.l.~.~.{.M#N#O#P#Q#R# ",
+" S#T#U#V#W#X#Y#Z#`# $.$+$@$#$$$%$&$*$=$-$a#~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.o.o.;$9.G.~.>$,$'$)$!$~${$]$ ",
+" ^$/$($_$:$<$[$}$|$1$2$3$4$5$6$7$8$9$:+<+~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.G.0$a$b$c$d$e$f$g$h$i$j$k$ ",
+" [ l$m$n$o$p$q$r$s$t$u$v$w$x$y$z$A$B$C$M#p@~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.;$D$E$F$G$H$I$J$K$L$ ",
+" M$N$O$P$Q$R$S$T$U$V$W$X$Y$Z$`$ %.%+%@%<+{.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.#%$%%%p@&%*%=%-%;%>%,% ",
+" '%)%!%~%{%]%^%/%(%_%:%<%[%}%|%1%2%3%-$T@~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.4%5%U p@6%7%8%9%0%a%y ",
+" b%c%d%e%f%g%h%i%G.[#j%k%l%m%n%o%p%@%q%{.~.~.~.~.~.~.~.~.~.~.~.~.~.~.{.~.~.~.~.~.~.V G.}@r%s%t%u%v%w%M.x%y%z%A% ",
+" B%C%D%E%F%G%H%I%V o.<@J%K%L%M%N%O%P%p@~.~.~.~.~.~.~.~.~.U ~.~.U 9.Q%{.~.~.~.~.~.{.%%U {.~.~.{.v@R%S%T%U%V%W% X%$ ",
+" Y%Z%`% &.&+&@&#&U ~.{.$&%&&&*&=&-&T@~.~.~.~.~.~.~.~.~.~.~.;&>&,&'&)&!&5+~.~.~.~.{.~&{&]&9.~.p@^&/&(&_&:& <&[&}&|& ",
+" 1&2&3&4&5&6&7&8&9&l.~.{.V 0&a&b&c&~.~.~.~.~.~.~.5.d&e&f&g&h&i&j&k&l&m&n&~.~.G.~.~.~.o&p&q&r&s&t&u&v& w&x&y&z&A&B& ",
+" C&2&D&E&F&G&G&H&I&J&U ~.~.U K&L&,.~.~.~.~.~.~.~.U M&N&O&P&Q&R&S&T&U&V&W&X&].{.~.~.{./#Y&Z&`& *.*+*@* (.#*$*%*&***=* ",
+" -*;*>*,*'*)*!*~*{*]*^*~.5.{.5./*U ~.~.~.~.~.~.{.[#(*_*:*<*[*[*}*|*1*2*3*4*5*U ~.~.6*7*8*9*0*a*b*c*d*e*f*g*h*i*%*j*k*<%l* ",
+" m*n*o*p*q*r*s*t*u*v*w*1+~.~.~.~.~.~.~.~.~.~.~.x*y*z*A*B*C*D*E*V U ~.G.~.:.F*G*l.{.R%X+H*I*J*K*L*M*N*O*P*Q*R*S*T*U*V*W*X* ",
+" Y*Z*D&`* =.=+=@=#=$=%=&={.~.~.~.~.~.~.~.~.~.~.<+*===-=;=>=,='=)=[#p@!=~={=]=^=/=(=a#&%_=:=<=-#[=}=k$|=1=2=3=4=5=6=7=8=9= ",
+" 0=a=b=c=d=e=f=g=h=i=j=k=l=5.~.~.~.~.~.~.~.~.~.V -$m=n===o=p=q=r=s=t=:+u=v=w=x=y=z=A=J.V U ~.V [#B=C=D=1=E=F= G=H=I= ",
+" J=K=L=M=N=O=P=Q=R=S=T=U=V=5.U ~.~.~.~.~.~.~.~.~.{.x*W=X=Y=Z=`= -.-+-@-#-$-%-&-*-=---;->-9.x*)=,-'-)-c.!-~- {-]- ",
+" ^-/-(-_-:-<-<-[-%.}-|-1-T@~.{.~.~.~.~.~.~.~.~.~.~.V 2-^&3-4-5-6-7-8-9-0-a-b-c-d-e-f-g-h-V@i-j-k-l-T=m-7@n- o-p- ",
+" q-r-s-t-u-v-!+2*w-x-y-z-V ~.~.~.~.~.~.~.~.~.~.~.~.~.~./#A-B-C-D-E-F-G-H-I-J-K-L-<@M-W=N-O-P-Q-R-<&S-T-U-V- W- ",
+" X-Y-Z-`- ;.;+;@;#;$;q+~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~./#v@W=N#%;&;*;=;-;s=-#;;>;,;';);!;~;{;];^;/;(;H+ ",
+" _;:;<;[;};|;1;2;3;4;{.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.{.T@-#5;6;7;8;9;[#V <+0;a;b;c;E-d;e;f;|=g;h; ",
+" i;j;V#k;F.l;m;n;o;~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.{.~.{.p@S@s=p;q;~.~.{.r;s;t;u;~$v;w;x;y;z;A; ",
+" H+B;C;D;E;F;G;H;~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.{.U ~.~.V E*E*V ~.~.~.{.T@/#I;J;K;L;M;y;N;O; ",
+" P;Q;R;S;T;U;~.{.~.~.~.~.~.~.~.~.l.U {.p@~.~.{.V ~.~.5+V;].~.~.~.~.{.{.p@W;X;Y;Z;`;/# >W..>+>N;@> ",
+" #>$>%>&>*>G.~.~.~.~.~.~.~.~.{.`.=>V=->;>~.n##&>>T@,>'>].~.~.~.~.~.)>!>i$~>{>]>^>/>(>_>:><>[>}> |>1> ",
+" 2>3>4>5>U@U ~.~.~.~.~.~.~.{.6>7>8>9>0>a#a>b>c>d>e>f>~.~.~.V ~.~.g>h>i>1=j>,%k>l>m>n>o>p>q>r>s>t>u>v>w> ",
+" x>y>z>A>B>C>5+D>E>~.~.~.~.{.%&F>G>3;s%{.H>I>J>K>L>M>~.V N>O>P>x*Q>R>S>T>U> X%V>W>X>Y>Z>P-`> ,.,+, ",
+" @,#,$,%,&,1.*,=,-,;,{.p@V {.X@>,,,Z;V ~.5.`;',),!,~,~.{,],^,/,/&-$F$(,_, :,<,[,},<@|,1,2, ",
+" B&3,4, 5,6,7,8,9,0,`;a,b,B+c,d,s=<+~.~.~.a#e,f,g,h,V -#9$i,j,k,l,m,n, o,p,q,r,s,t,u,v, ",
+" w,x, y,z,A,B,C,D,E,o@F,G,<+~.~.~.~.~.;;P>j%}@p@H,]#I,J,K,L,M,=+ N,O,P,Q,R,S, ",
+" T,U,V,W,X,Y,Z,`, '.'+'x*~.{.O+@%@'#'$'%'a#&'*'='-' ~;;'>' ,''')'!' ",
+" ~'{']'^'/'('_'_':'<'['}'{.V |'1'2'3'4'5'}@6'7' 8'K; ",
+" v&9'0'a' b'c'd'e'f'1@g'h'G.i'j'k'l'm'n'o'p' y ",
+" q'r's' t'u'H+ v'w'x'y' z'A'B' ",
+" C'D' E'F' G'H' I'J' ",
+" K'L' M' N'O' P'Q' ",
+" R' S' ",
+" ",
+" ",
+" ",
+" "};
diff --git a/src/event.c b/src/event.c
index 668a599..e868ae8 100644
--- a/src/event.c
+++ b/src/event.c
@@ -69,9 +69,10 @@ int event_keydown(int key, t_state *state)
int event_mouse(int button, int x, int y, t_state *state)
{
- (void)x;
- (void)y;
+ /* (void)x; */
+ /* (void)y; */
+ /* printf("%d\n", button); */
if (button == MLX_MOUSE_SCROLL_UP)
{
h_zoom_in(state);
@@ -85,6 +86,13 @@ int event_mouse(int button, int x, int y, t_state *state)
/* state->center.r -= MOVE_SPEED * (double)(x - WINDOW_WIDTH / 2) / WINDOW_WIDTH; */
/* state->center.i -= MOVE_SPEED * (double)(y - WINDOW_HEIGHT / 2) / WINDOW_HEIGHT; */
}
+ else if (button == MLX_MOUSE_LEFT)
+ {
+ printf("%d %d\n", x, y);
+ state->center.r = ((double)x / FWINDOW_WIDTH) * state->plane.r - state->plane.r / 2.0;
+ state->center.i = ((double)y / FWINDOW_HEIGHT) * state->plane.i - state->plane.i / 2.0;
+
+ }
else
return (0);
state->updated = false;
diff --git a/src/fractals/burningship.c b/src/fractals/burningship.c
index 07baf38..d9e1a9c 100644
--- a/src/fractals/burningship.c
+++ b/src/fractals/burningship.c
@@ -20,9 +20,10 @@ int burningship(t_state *state, t_complex c)
t_complex z;
t_complex z_square;
double tmp;
-
+
(void)state;
- z = c;
+ z.r = c.r;
+ z.i = c.i;
n = -1;
while (++n < state->iterations)
{
@@ -30,7 +31,7 @@ int burningship(t_state *state, t_complex c)
z_square.r = z.r * z.r;
if (z_square.r + z_square.i > BURNING_SHIP_ESCAPE_RADIUS_SQUARED)
break;
- tmp = z_square.r - z_square.i + z.r;
+ tmp = z_square.r - z_square.i + c.r;
z.i = fabs(2.0 * z.r * z.i + c.i);
z.r = fabs(tmp);
}
diff --git a/src/fractals/tricorn.c b/src/fractals/tricorn.c
index 2abe01b..63c003b 100644
--- a/src/fractals/tricorn.c
+++ b/src/fractals/tricorn.c
@@ -20,7 +20,7 @@ int tricorn(t_state *state, t_complex c)
t_complex z;
t_complex z_square;
double tmp;
-
+
(void)state;
z = c;
n = -1;
@@ -30,7 +30,7 @@ int tricorn(t_state *state, t_complex c)
z_square.r = z.r * z.r;
if (z_square.r + z_square.i > TRICORN_ESCAPE_RADIUS_SQUARED)
break;
- tmp = z_square.r - z_square.i + z.r;
+ tmp = z_square.r - z_square.i + c.r;
z.i = -2.0 * z.r * z.i + c.i;
z.r = tmp;
}
diff --git a/src/main.c b/src/main.c
index 22e8c84..841eb69 100644
--- a/src/main.c
+++ b/src/main.c
@@ -22,7 +22,7 @@ int main(int argc, char **argv)
return (0);
}
mlx_hook(state.window_ptr, 17, 0, event_quit, (void*)&state);
- mlx_hook(state.window_ptr, 2, 2, event_keydown, (void*)&state);
+ mlx_key_hook(state.window_ptr, event_keydown, (void*)&state);
mlx_hook(state.window_ptr, 6, 64, event_mouse_motion, (void*)&state);
mlx_mouse_hook(state.window_ptr, event_mouse, (void*)&state);
mlx_loop_hook(state.mlx_ptr, render_update, (void*)&state);