From 95d5361d7aae103a12315abe8690fb0c477734a3 Mon Sep 17 00:00:00 2001 From: kinou-p Date: Wed, 18 May 2022 19:15:19 +0200 Subject: [PATCH] add textures --- Makefile | 3 +- includes/Cub3D.h | 29 +- libft/ft_atoi.c | 4 +- libft/ft_strjoin.c | 26 +- libft/libft.h | 3 +- map/map | 6 +- sprite/brick_wall.ppm | 12290 ++++++++++++++++++++++++++++++++++++ sprite/brick_wall_old.ppm | 770 +++ sprite/brick_wall_raw.ppm | 5 + srcs/cast_ray.c | 169 +- srcs/get_texture_array.c | 86 + srcs/main.c | 12 +- srcs/utils.c | 31 +- 13 files changed, 13396 insertions(+), 38 deletions(-) create mode 100644 sprite/brick_wall.ppm create mode 100644 sprite/brick_wall_old.ppm create mode 100644 sprite/brick_wall_raw.ppm create mode 100644 srcs/get_texture_array.c diff --git a/Makefile b/Makefile index b45c076..9454e56 100644 --- a/Makefile +++ b/Makefile @@ -6,12 +6,13 @@ # By: apommier +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2022/02/13 16:27:49 by apommier #+# #+# # -# Updated: 2022/05/04 18:08:34 by apommier ### ########.fr # +# Updated: 2022/05/06 18:52:57 by apommier ### ########.fr # # # # **************************************************************************** # NAME = Cub3D SRCS = srcs/main.c\ + srcs/get_texture_array.c\ srcs/cast_ray.c\ srcs/utils.c OBJS = ${SRCS:.c=.o} diff --git a/includes/Cub3D.h b/includes/Cub3D.h index af638fe..1d338ce 100644 --- a/includes/Cub3D.h +++ b/includes/Cub3D.h @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/02/13 16:30:59 by apommier #+# #+# */ -/* Updated: 2022/05/05 02:58:26 by apommier ### ########.fr */ +/* Updated: 2022/05/17 22:51:01 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -25,8 +25,28 @@ # define PI 3.1415926535 +typedef struct ray_info{ + float ty; + float tx; + float mp; + float dist; + int index; + int wall_type; + int pixel; + +} ray; + + +typedef struct all_wall_texture{ + int *north; + int *east; + int *west; + int *south; +} sprite; + typedef struct map_information{ char **map; + sprite texture; int floor; int sky; char *simple_map; @@ -52,9 +72,10 @@ typedef struct s_data { player player; } t_data; -int get_color(char one, char two, char three); -int reset_angle(int angle); -float deg_to_rad(int angle); +int *get_texture(int type); +int get_color(char one, char two, char three); +int reset_angle(int angle); +float deg_to_rad(int angle); void draw_ray(t_data *img); void print_ray(t_data *img); int key_press(int code, t_data *img); diff --git a/libft/ft_atoi.c b/libft/ft_atoi.c index 0073b7e..feeeabd 100644 --- a/libft/ft_atoi.c +++ b/libft/ft_atoi.c @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/11/29 00:09:17 by apommier #+# #+# */ -/* Updated: 2022/01/18 06:50:22 by apommier ### ########.fr */ +/* Updated: 2022/05/06 20:01:08 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -21,6 +21,8 @@ long ft_atoi(const char *nptr) minus = 1; nbr = 0; i = 0; + if (!nptr) + return (0); while ((nptr[i] >= 9 && nptr[i] <= 13) || nptr[i] == 32) i++; if (nptr[i] == '+') diff --git a/libft/ft_strjoin.c b/libft/ft_strjoin.c index da55361..078e8fc 100644 --- a/libft/ft_strjoin.c +++ b/libft/ft_strjoin.c @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/01/20 21:44:01 by apommier #+# #+# */ -/* Updated: 2022/01/21 08:07:04 by apommier ### ########.fr */ +/* Updated: 2022/05/06 19:29:27 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -39,3 +39,27 @@ char *ft_strjoin(char *save, char *s2) dest[j] = 0; return (dest); } + +char *ft_strjoin_delete(char *save, char *s2) +{ + char *dest; + int i; + int j; + + i = 0; + j = 0; + if (!save && !s2) + return (0); + dest = malloc(ft_strlen(save) + ft_strlen(s2) + 1); + while (save && save[i]) + dest[j++] = save[i++]; + i = 0; + while (s2 && s2[i]) + dest[j++] = s2[i++]; + dest[j] = 0; + if (save) + free(save); + if (s2) + free(s2); + return (dest); +} diff --git a/libft/libft.h b/libft/libft.h index 12ae4b9..4e83ab8 100644 --- a/libft/libft.h +++ b/libft/libft.h @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/12/11 03:21:27 by apommier #+# #+# */ -/* Updated: 2022/05/02 18:17:12 by apommier ### ########.fr */ +/* Updated: 2022/05/06 19:29:58 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -50,6 +50,7 @@ int ft_strncmp(const char *s1, const char *s2, size_t n); size_t ft_strlcpy(char *dst, const char *src, size_t size); size_t ft_strlcat(char *dst, const char *src, size_t size); char *ft_strjoin(char *save, char *s2); +char *ft_strjoin_delete(char *save, char *s2); char *ft_strnstr(const char *big, const char *little, size_t len); long ft_atoi(const char *nptr); void *ft_calloc(size_t nmenb, size_t size); diff --git a/map/map b/map/map index b2bf31c..993aa6d 100644 --- a/map/map +++ b/map/map @@ -3,6 +3,6 @@ 10100001 10000001 10000001 -10100101 -10000101 -11111111 \ No newline at end of file +11000101 +11000101 +11111111 diff --git a/sprite/brick_wall.ppm b/sprite/brick_wall.ppm new file mode 100644 index 0000000..b9e93c0 --- /dev/null +++ b/sprite/brick_wall.ppm @@ -0,0 +1,12290 @@ +64 64 +255 +155 +152 +145 +96 +41 +41 +96 +41 +41 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +125 +52 +50 +125 +52 +50 +125 +52 +50 +125 +52 +50 +125 +52 +50 +126 +53 +51 +126 +53 +51 +125 +53 +51 +124 +52 +50 +123 +51 +50 +122 +51 +50 +122 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +192 +187 +173 +192 +187 +173 +192 +187 +173 +192 +187 +173 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +122 +50 +50 +122 +51 +51 +124 +53 +52 +126 +55 +54 +129 +56 +53 +136 +59 +52 +136 +59 +52 +136 +59 +52 +192 +187 +173 +155 +152 +145 +96 +41 +41 +96 +41 +41 +96 +41 +41 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +170 +73 +50 +146 +61 +50 +146 +61 +50 +146 +61 +50 +146 +61 +50 +146 +61 +50 +123 +51 +50 +123 +51 +50 +123 +51 +50 +123 +51 +50 +123 +51 +50 +123 +51 +50 +123 +51 +50 +128 +53 +50 +126 +52 +50 +124 +52 +50 +146 +61 +50 +146 +61 +50 +146 +61 +50 +122 +50 +50 +146 +61 +50 +146 +61 +50 +192 +187 +173 +192 +187 +173 +121 +50 +50 +195 +86 +63 +195 +86 +63 +195 +86 +63 +195 +86 +63 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +170 +73 +51 +126 +52 +50 +134 +54 +50 +170 +73 +51 +136 +59 +52 +136 +59 +52 +136 +59 +52 +121 +50 +50 +121 +50 +50 +96 +41 +41 +155 +152 +145 +96 +41 +41 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +146 +61 +50 +171 +73 +50 +171 +73 +50 +146 +61 +50 +164 +69 +50 +164 +71 +50 +165 +71 +50 +168 +71 +50 +169 +72 +50 +170 +73 +50 +170 +73 +50 +170 +73 +50 +171 +73 +50 +171 +73 +50 +170 +73 +50 +146 +61 +50 +146 +61 +50 +146 +61 +50 +168 +71 +50 +146 +61 +50 +146 +61 +50 +146 +61 +50 +192 +187 +173 +121 +50 +50 +195 +86 +63 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +195 +86 +63 +171 +73 +50 +171 +73 +50 +170 +73 +50 +171 +73 +50 +170 +73 +50 +171 +72 +50 +169 +73 +51 +171 +73 +50 +171 +73 +50 +171 +73 +51 +122 +51 +50 +170 +73 +51 +171 +73 +50 +168 +72 +50 +167 +72 +50 +169 +72 +50 +163 +69 +50 +136 +59 +52 +121 +50 +50 +121 +50 +50 +121 +50 +50 +96 +41 +41 +192 +187 +173 +95 +41 +41 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +146 +61 +50 +170 +73 +50 +171 +73 +50 +170 +73 +50 +170 +73 +50 +170 +73 +50 +170 +73 +50 +170 +73 +50 +170 +73 +50 +170 +73 +50 +170 +73 +50 +170 +72 +50 +146 +61 +50 +170 +73 +50 +171 +72 +50 +170 +72 +50 +146 +61 +50 +146 +61 +50 +192 +187 +173 +121 +50 +50 +195 +86 +63 +171 +73 +50 +171 +73 +50 +195 +86 +63 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +170 +72 +50 +168 +72 +50 +195 +86 +63 +167 +71 +50 +167 +72 +50 +166 +72 +51 +169 +70 +50 +168 +73 +50 +170 +73 +50 +171 +73 +50 +171 +73 +50 +170 +73 +51 +170 +72 +50 +136 +59 +52 +169 +72 +50 +166 +72 +50 +136 +59 +52 +136 +59 +52 +136 +59 +52 +121 +50 +50 +96 +41 +41 +192 +186 +172 +94 +40 +40 +170 +72 +49 +170 +72 +49 +170 +72 +49 +170 +72 +49 +170 +72 +49 +145 +61 +50 +171 +72 +50 +171 +72 +50 +171 +72 +50 +171 +72 +50 +171 +73 +50 +146 +61 +50 +171 +73 +50 +146 +61 +50 +146 +61 +50 +146 +61 +50 +146 +61 +50 +169 +72 +50 +170 +72 +50 +169 +72 +50 +169 +71 +50 +167 +71 +50 +167 +71 +50 +168 +71 +50 +167 +71 +50 +167 +71 +50 +168 +71 +50 +146 +61 +50 +146 +61 +50 +146 +61 +50 +192 +187 +173 +121 +50 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +170 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +170 +72 +50 +169 +73 +50 +168 +72 +50 +168 +72 +50 +169 +72 +50 +167 +71 +50 +136 +57 +50 +168 +72 +50 +170 +73 +50 +170 +73 +50 +169 +72 +50 +169 +72 +50 +168 +72 +50 +168 +71 +50 +136 +59 +52 +136 +59 +52 +136 +59 +52 +121 +50 +50 +121 +50 +50 +190 +180 +167 +93 +40 +40 +169 +71 +48 +169 +71 +49 +169 +71 +49 +167 +71 +49 +144 +60 +49 +144 +60 +49 +144 +60 +49 +170 +72 +49 +170 +72 +49 +145 +60 +49 +169 +72 +49 +145 +60 +49 +145 +60 +49 +145 +60 +49 +145 +60 +49 +170 +71 +50 +145 +61 +50 +145 +61 +50 +169 +71 +50 +168 +71 +50 +167 +72 +50 +168 +70 +50 +166 +71 +50 +165 +71 +50 +166 +71 +50 +165 +70 +50 +165 +70 +50 +146 +61 +50 +123 +51 +50 +146 +61 +50 +192 +187 +173 +121 +50 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +136 +57 +50 +169 +70 +50 +167 +72 +50 +169 +72 +50 +171 +73 +50 +168 +72 +50 +170 +72 +50 +168 +72 +50 +168 +72 +50 +171 +73 +50 +167 +71 +50 +168 +72 +50 +169 +72 +50 +136 +57 +50 +169 +72 +50 +168 +72 +50 +136 +57 +50 +170 +71 +50 +168 +70 +50 +167 +71 +50 +167 +72 +50 +167 +71 +50 +167 +72 +50 +135 +59 +52 +120 +50 +50 +120 +49 +49 +191 +185 +170 +91 +39 +39 +168 +70 +48 +143 +58 +48 +143 +58 +48 +143 +58 +48 +143 +58 +48 +143 +59 +48 +143 +59 +48 +143 +59 +48 +143 +59 +48 +144 +59 +48 +144 +59 +48 +144 +59 +49 +144 +59 +49 +144 +59 +49 +144 +60 +49 +144 +60 +49 +144 +60 +49 +145 +60 +49 +145 +60 +49 +145 +60 +49 +168 +71 +49 +167 +70 +49 +164 +70 +49 +164 +71 +49 +164 +69 +49 +122 +51 +50 +145 +61 +50 +145 +61 +50 +122 +51 +50 +146 +61 +50 +192 +186 +172 +121 +50 +50 +171 +73 +50 +170 +73 +50 +136 +57 +50 +169 +73 +50 +136 +57 +50 +136 +57 +50 +171 +73 +50 +171 +73 +50 +136 +57 +50 +136 +57 +50 +171 +73 +50 +136 +57 +50 +171 +73 +50 +136 +57 +50 +136 +57 +50 +136 +57 +50 +164 +70 +50 +136 +57 +50 +136 +57 +50 +136 +57 +50 +136 +57 +50 +136 +57 +50 +136 +57 +50 +135 +57 +50 +135 +57 +50 +135 +56 +49 +135 +56 +49 +134 +56 +49 +167 +68 +49 +137 +57 +50 +188 +177 +162 +90 +38 +38 +164 +66 +47 +141 +57 +47 +141 +57 +47 +167 +68 +47 +142 +57 +47 +142 +57 +47 +142 +57 +47 +142 +58 +47 +142 +58 +47 +142 +58 +47 +143 +58 +48 +143 +58 +48 +143 +58 +48 +119 +49 +48 +143 +58 +48 +143 +59 +48 +143 +59 +48 +143 +59 +48 +143 +59 +48 +144 +59 +48 +144 +59 +48 +144 +59 +49 +144 +59 +49 +144 +59 +49 +144 +60 +49 +121 +50 +49 +121 +50 +49 +121 +50 +49 +121 +50 +49 +122 +50 +49 +192 +186 +172 +120 +49 +49 +168 +71 +49 +166 +70 +50 +166 +70 +49 +171 +72 +50 +135 +57 +50 +171 +72 +50 +135 +57 +50 +135 +57 +50 +136 +57 +50 +171 +73 +50 +136 +57 +50 +136 +57 +50 +136 +57 +50 +136 +57 +50 +136 +57 +50 +136 +57 +50 +136 +57 +50 +136 +57 +50 +136 +57 +50 +135 +57 +50 +135 +57 +50 +135 +56 +49 +135 +56 +49 +134 +56 +49 +134 +56 +49 +134 +55 +48 +133 +55 +48 +133 +55 +48 +132 +56 +50 +131 +56 +49 +188 +174 +159 +88 +37 +37 +140 +56 +46 +140 +56 +46 +140 +56 +46 +140 +56 +46 +140 +56 +46 +116 +47 +46 +141 +56 +46 +141 +56 +46 +117 +47 +46 +141 +57 +47 +141 +57 +47 +141 +57 +47 +117 +48 +47 +117 +48 +47 +118 +48 +47 +118 +48 +47 +142 +57 +47 +142 +58 +47 +142 +58 +47 +168 +69 +47 +143 +58 +48 +143 +58 +48 +119 +49 +48 +143 +58 +48 +143 +58 +48 +120 +49 +48 +120 +49 +48 +120 +49 +48 +120 +49 +48 +120 +50 +49 +192 +185 +171 +121 +51 +49 +166 +69 +49 +134 +55 +49 +170 +71 +49 +134 +56 +49 +134 +56 +49 +170 +72 +49 +134 +56 +49 +135 +56 +49 +135 +56 +49 +135 +56 +49 +135 +56 +49 +135 +56 +49 +135 +56 +49 +135 +57 +50 +135 +56 +49 +120 +49 +49 +120 +49 +49 +119 +49 +49 +134 +56 +49 +134 +55 +49 +134 +55 +48 +133 +55 +48 +133 +55 +48 +132 +54 +48 +132 +54 +47 +131 +53 +47 +131 +53 +47 +130 +53 +46 +129 +52 +46 +129 +54 +47 +149 +139 +133 +86 +37 +37 +138 +55 +45 +139 +55 +45 +139 +55 +45 +139 +55 +45 +139 +55 +45 +114 +46 +45 +115 +46 +45 +115 +46 +45 +115 +46 +45 +115 +47 +46 +140 +56 +46 +140 +56 +46 +140 +56 +46 +140 +56 +46 +116 +47 +46 +140 +56 +46 +116 +47 +46 +141 +56 +46 +141 +57 +46 +117 +48 +47 +117 +48 +47 +117 +48 +47 +141 +57 +47 +117 +48 +47 +118 +48 +47 +118 +48 +47 +118 +48 +47 +118 +48 +47 +119 +48 +47 +120 +49 +48 +191 +185 +170 +123 +51 +50 +160 +67 +48 +133 +55 +48 +133 +55 +48 +133 +55 +48 +133 +55 +48 +133 +55 +48 +133 +55 +48 +133 +55 +48 +134 +55 +48 +134 +55 +48 +133 +55 +48 +169 +70 +48 +133 +55 +48 +132 +54 +48 +117 +48 +48 +116 +47 +47 +116 +47 +47 +131 +54 +47 +115 +47 +47 +130 +53 +46 +130 +53 +46 +129 +52 +46 +129 +52 +46 +128 +52 +45 +128 +51 +45 +165 +66 +45 +127 +51 +44 +126 +50 +44 +126 +50 +44 +125 +51 +45 +149 +138 +132 +84 +36 +36 +112 +45 +44 +137 +54 +44 +137 +54 +44 +137 +54 +44 +137 +54 +44 +138 +54 +44 +138 +54 +44 +113 +45 +45 +113 +45 +45 +114 +46 +45 +114 +46 +45 +139 +55 +45 +139 +55 +45 +139 +55 +45 +139 +55 +45 +114 +46 +45 +115 +46 +45 +115 +46 +45 +115 +46 +45 +115 +47 +46 +115 +47 +46 +115 +47 +46 +116 +47 +46 +116 +47 +46 +116 +47 +46 +116 +47 +46 +89 +38 +38 +116 +47 +46 +117 +47 +46 +118 +48 +47 +191 +184 +169 +123 +50 +49 +156 +63 +48 +131 +53 +47 +115 +47 +47 +131 +53 +47 +115 +47 +47 +131 +53 +47 +131 +53 +47 +131 +53 +47 +131 +53 +47 +130 +53 +46 +130 +53 +46 +129 +53 +46 +129 +52 +46 +113 +46 +46 +112 +45 +45 +112 +45 +45 +111 +45 +45 +111 +45 +45 +111 +44 +44 +110 +44 +44 +110 +44 +44 +109 +44 +44 +109 +43 +43 +108 +43 +43 +124 +49 +43 +123 +49 +43 +106 +42 +42 +122 +48 +42 +122 +47 +42 +79 +34 +34 +148 +137 +131 +83 +35 +35 +111 +44 +43 +136 +53 +43 +111 +44 +43 +111 +44 +43 +136 +53 +43 +111 +44 +43 +112 +44 +44 +112 +44 +44 +112 +44 +44 +112 +45 +44 +112 +45 +44 +112 +45 +44 +137 +54 +44 +113 +45 +44 +113 +45 +44 +113 +45 +44 +113 +45 +44 +113 +45 +45 +113 +45 +45 +114 +46 +45 +114 +46 +45 +114 +46 +45 +114 +46 +45 +114 +46 +45 +114 +46 +45 +114 +46 +45 +87 +37 +37 +87 +37 +37 +114 +46 +45 +88 +38 +38 +191 +182 +167 +119 +49 +46 +138 +54 +45 +128 +51 +45 +112 +45 +45 +112 +45 +45 +112 +45 +45 +128 +51 +45 +111 +45 +45 +111 +45 +45 +110 +44 +44 +126 +50 +44 +126 +50 +44 +125 +50 +44 +125 +49 +43 +108 +43 +43 +108 +43 +43 +107 +43 +43 +106 +42 +42 +106 +42 +42 +106 +42 +42 +80 +34 +34 +105 +41 +41 +104 +41 +41 +103 +41 +41 +103 +41 +41 +103 +40 +40 +119 +46 +40 +101 +40 +40 +118 +45 +40 +100 +39 +39 +139 +119 +114 +148 +137 +130 +81 +35 +35 +110 +43 +43 +110 +43 +43 +110 +43 +43 +135 +52 +43 +135 +52 +43 +110 +44 +43 +111 +44 +43 +111 +44 +43 +111 +44 +43 +111 +44 +43 +111 +44 +43 +136 +53 +43 +111 +44 +43 +111 +44 +43 +111 +44 +43 +83 +35 +35 +83 +36 +36 +83 +36 +36 +111 +44 +43 +111 +44 +43 +111 +44 +43 +111 +44 +43 +111 +44 +43 +111 +44 +43 +111 +44 +44 +111 +44 +44 +111 +44 +44 +111 +44 +44 +84 +36 +36 +86 +37 +37 +190 +181 +165 +111 +45 +44 +123 +49 +43 +125 +49 +43 +108 +43 +43 +124 +49 +43 +107 +43 +43 +106 +42 +42 +106 +42 +42 +106 +42 +42 +105 +42 +42 +105 +42 +42 +121 +47 +41 +121 +47 +41 +105 +41 +41 +103 +41 +41 +102 +40 +40 +103 +40 +40 +101 +40 +40 +76 +33 +33 +76 +32 +32 +99 +39 +39 +75 +32 +32 +75 +32 +32 +98 +39 +39 +97 +38 +38 +97 +38 +38 +97 +38 +38 +97 +38 +38 +96 +38 +38 +108 +41 +38 +100 +38 +38 +148 +139 +132 +81 +35 +35 +109 +43 +42 +109 +43 +42 +135 +51 +42 +109 +43 +42 +109 +43 +42 +109 +43 +42 +109 +43 +42 +109 +43 +42 +109 +43 +42 +81 +35 +35 +81 +35 +35 +81 +35 +35 +81 +35 +35 +81 +35 +35 +81 +35 +35 +81 +35 +35 +81 +35 +35 +81 +35 +35 +81 +35 +35 +81 +35 +35 +109 +43 +42 +109 +43 +42 +109 +43 +42 +111 +44 +43 +112 +45 +44 +113 +45 +45 +113 +46 +45 +114 +46 +45 +88 +38 +38 +90 +39 +39 +191 +184 +170 +116 +47 +47 +113 +44 +44 +115 +46 +41 +120 +46 +41 +103 +41 +41 +119 +46 +40 +106 +41 +40 +103 +40 +40 +101 +40 +40 +101 +40 +40 +99 +39 +39 +98 +39 +39 +98 +39 +39 +98 +39 +39 +97 +38 +38 +73 +31 +31 +97 +38 +38 +73 +31 +31 +72 +31 +31 +72 +31 +31 +94 +37 +37 +71 +30 +30 +71 +30 +30 +93 +37 +37 +94 +37 +37 +93 +36 +36 +93 +36 +37 +93 +36 +36 +97 +38 +36 +95 +37 +36 +73 +31 +31 +149 +141 +135 +185 +165 +146 +144 +128 +122 +110 +43 +43 +109 +43 +43 +110 +44 +44 +84 +36 +36 +84 +36 +36 +84 +36 +36 +86 +37 +37 +84 +36 +36 +84 +36 +36 +84 +36 +36 +85 +36 +36 +86 +37 +37 +86 +37 +37 +146 +132 +126 +61 +60 +58 +63 +62 +59 +64 +63 +60 +65 +64 +61 +89 +38 +38 +90 +39 +39 +91 +39 +39 +58 +33 +33 +57 +33 +33 +89 +38 +38 +88 +37 +37 +87 +37 +37 +85 +36 +36 +83 +36 +36 +145 +131 +125 +108 +106 +103 +144 +129 +123 +114 +47 +47 +114 +48 +47 +111 +46 +44 +110 +45 +44 +108 +43 +43 +105 +42 +42 +101 +40 +40 +99 +39 +39 +100 +40 +40 +100 +40 +40 +101 +40 +40 +102 +41 +41 +103 +41 +41 +103 +42 +42 +103 +42 +42 +80 +34 +34 +51 +30 +30 +52 +30 +30 +83 +35 +35 +83 +36 +36 +83 +36 +36 +53 +30 +30 +83 +35 +35 +106 +43 +44 +106 +43 +44 +107 +43 +44 +105 +43 +43 +102 +41 +41 +78 +33 +33 +85 +36 +36 +141 +125 +119 +155 +152 +145 +155 +152 +145 +155 +152 +145 +155 +152 +145 +155 +152 +145 +155 +152 +145 +192 +187 +173 +192 +187 +173 +192 +187 +173 +189 +183 +169 +189 +183 +169 +192 +187 +173 +192 +187 +173 +192 +187 +173 +192 +187 +173 +155 +152 +145 +155 +152 +145 +155 +152 +145 +155 +152 +145 +155 +152 +145 +155 +152 +145 +155 +152 +145 +155 +152 +145 +192 +187 +173 +192 +187 +173 +192 +187 +173 +155 +152 +145 +155 +152 +145 +155 +152 +145 +155 +152 +145 +116 +115 +111 +116 +115 +111 +116 +115 +111 +155 +152 +145 +192 +187 +173 +191 +186 +172 +191 +185 +171 +192 +186 +172 +155 +152 +145 +155 +152 +145 +155 +152 +145 +155 +152 +145 +155 +152 +145 +192 +187 +173 +192 +187 +173 +192 +187 +173 +192 +187 +173 +192 +187 +173 +192 +187 +173 +192 +187 +173 +192 +187 +173 +192 +187 +173 +192 +186 +173 +192 +186 +173 +192 +186 +173 +192 +186 +173 +192 +187 +173 +192 +187 +173 +192 +187 +173 +192 +187 +173 +52 +51 +49 +52 +51 +49 +155 +152 +145 +155 +152 +145 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +96 +41 +41 +52 +51 +49 +71 +70 +67 +155 +152 +145 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +138 +59 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +155 +152 +145 +121 +50 +50 +121 +50 +50 +171 +73 +50 +171 +73 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +171 +73 +50 +171 +73 +50 +121 +50 +50 +121 +50 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +52 +51 +49 +155 +152 +145 +121 +50 +50 +121 +50 +50 +195 +86 +63 +195 +86 +63 +195 +86 +63 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +138 +59 +50 +171 +73 +50 +138 +59 +50 +121 +50 +50 +155 +152 +145 +121 +50 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +121 +50 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +121 +50 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +195 +86 +63 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +121 +50 +50 +121 +50 +50 +122 +50 +50 +155 +152 +145 +121 +50 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +195 +86 +63 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +195 +86 +63 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +195 +86 +63 +171 +73 +50 +138 +59 +50 +121 +50 +50 +155 +152 +145 +121 +50 +50 +171 +73 +50 +171 +73 +50 +195 +86 +63 +171 +73 +50 +171 +73 +50 +121 +50 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +195 +86 +63 +195 +86 +63 +171 +73 +50 +171 +73 +50 +171 +73 +50 +170 +72 +49 +170 +72 +49 +170 +72 +49 +171 +72 +50 +171 +72 +50 +171 +72 +50 +120 +50 +50 +122 +50 +50 +155 +151 +144 +121 +50 +50 +171 +73 +50 +195 +86 +63 +195 +86 +63 +171 +73 +50 +171 +73 +50 +171 +73 +50 +195 +86 +63 +195 +86 +63 +171 +73 +50 +171 +73 +50 +138 +59 +50 +138 +59 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +195 +86 +63 +171 +73 +50 +138 +59 +50 +116 +115 +111 +121 +50 +50 +171 +73 +50 +171 +73 +50 +195 +86 +63 +195 +86 +63 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +147 +61 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +170 +71 +49 +145 +60 +49 +145 +60 +49 +146 +60 +49 +170 +72 +49 +170 +72 +49 +120 +49 +49 +121 +49 +49 +192 +186 +172 +120 +49 +49 +170 +72 +49 +170 +72 +49 +170 +72 +49 +137 +58 +49 +170 +72 +49 +171 +72 +50 +171 +72 +50 +171 +72 +50 +171 +72 +50 +137 +59 +50 +137 +59 +50 +170 +73 +50 +171 +73 +50 +170 +72 +50 +170 +73 +50 +138 +59 +50 +138 +59 +50 +138 +59 +50 +138 +59 +50 +138 +59 +50 +138 +59 +50 +138 +59 +50 +138 +59 +50 +138 +59 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +138 +59 +50 +121 +50 +50 +116 +115 +111 +121 +50 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +195 +86 +63 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +147 +61 +50 +147 +61 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +72 +50 +171 +72 +50 +171 +72 +50 +171 +72 +50 +171 +72 +50 +171 +72 +50 +170 +72 +49 +170 +72 +49 +144 +59 +48 +144 +59 +48 +144 +59 +48 +145 +59 +48 +145 +59 +48 +169 +71 +48 +169 +71 +48 +120 +49 +49 +192 +185 +171 +169 +71 +49 +169 +71 +49 +170 +71 +49 +136 +58 +49 +136 +58 +49 +170 +71 +49 +170 +72 +49 +170 +71 +49 +137 +58 +49 +137 +58 +49 +137 +58 +49 +137 +58 +49 +137 +58 +49 +137 +58 +49 +137 +58 +49 +137 +58 +49 +137 +58 +49 +137 +58 +49 +137 +59 +50 +137 +59 +50 +137 +59 +50 +137 +59 +50 +137 +59 +50 +137 +59 +50 +138 +59 +50 +138 +59 +50 +138 +59 +50 +138 +59 +50 +138 +59 +50 +138 +59 +50 +116 +115 +111 +121 +50 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +72 +50 +171 +72 +50 +171 +72 +50 +171 +72 +50 +171 +72 +50 +171 +72 +50 +170 +72 +49 +170 +72 +49 +169 +72 +49 +146 +60 +49 +170 +72 +49 +168 +72 +49 +168 +72 +49 +170 +72 +49 +169 +71 +49 +169 +71 +49 +170 +71 +49 +170 +71 +49 +169 +71 +49 +170 +71 +49 +143 +58 +47 +143 +58 +47 +143 +58 +47 +144 +58 +48 +144 +58 +48 +144 +58 +48 +169 +70 +48 +119 +48 +48 +191 +185 +170 +169 +70 +48 +169 +70 +48 +169 +70 +48 +169 +69 +48 +169 +70 +48 +169 +69 +48 +169 +71 +48 +169 +71 +48 +136 +57 +48 +136 +57 +48 +136 +57 +49 +136 +57 +49 +136 +57 +49 +136 +57 +49 +136 +58 +49 +136 +58 +49 +136 +58 +49 +122 +50 +49 +136 +58 +49 +136 +58 +49 +136 +58 +49 +136 +58 +49 +136 +58 +49 +136 +58 +49 +136 +58 +49 +136 +58 +49 +136 +58 +49 +136 +58 +49 +136 +58 +49 +136 +58 +49 +115 +113 +109 +120 +50 +50 +170 +71 +49 +170 +72 +49 +170 +71 +49 +170 +71 +49 +170 +71 +49 +170 +71 +49 +170 +71 +49 +145 +60 +49 +145 +60 +49 +145 +60 +49 +145 +60 +49 +145 +60 +49 +145 +60 +49 +165 +70 +49 +163 +69 +49 +165 +69 +49 +164 +69 +49 +164 +69 +48 +165 +69 +48 +166 +70 +48 +165 +69 +48 +167 +70 +48 +144 +59 +48 +141 +56 +46 +142 +56 +46 +142 +56 +46 +142 +56 +46 +142 +57 +46 +142 +57 +46 +167 +68 +47 +117 +47 +47 +191 +183 +168 +167 +68 +47 +167 +68 +47 +167 +68 +47 +133 +55 +47 +167 +68 +47 +133 +55 +47 +168 +69 +47 +133 +56 +47 +133 +56 +47 +133 +56 +47 +133 +56 +47 +134 +56 +47 +134 +56 +47 +134 +56 +47 +134 +56 +47 +134 +56 +47 +134 +56 +47 +134 +56 +47 +134 +56 +47 +134 +56 +47 +134 +56 +47 +134 +56 +47 +120 +48 +47 +134 +56 +47 +134 +56 +47 +168 +69 +47 +168 +70 +48 +168 +69 +47 +168 +70 +48 +134 +56 +47 +112 +110 +107 +120 +49 +49 +168 +69 +47 +168 +68 +47 +143 +58 +47 +143 +58 +47 +143 +58 +47 +143 +58 +47 +143 +58 +47 +143 +58 +47 +143 +58 +47 +143 +58 +47 +143 +58 +47 +143 +58 +47 +143 +57 +47 +160 +66 +47 +160 +67 +47 +143 +57 +47 +143 +57 +47 +143 +57 +47 +164 +68 +47 +163 +66 +47 +143 +57 +47 +142 +57 +47 +142 +57 +47 +139 +55 +45 +139 +55 +45 +139 +55 +45 +139 +55 +45 +139 +55 +45 +139 +55 +45 +139 +55 +45 +115 +46 +46 +190 +182 +166 +112 +45 +45 +165 +66 +45 +163 +65 +45 +130 +53 +45 +166 +66 +45 +130 +53 +45 +166 +66 +45 +130 +53 +45 +130 +53 +45 +130 +53 +45 +116 +46 +45 +116 +46 +45 +130 +53 +45 +116 +46 +45 +131 +54 +45 +116 +46 +45 +116 +46 +45 +116 +46 +45 +116 +46 +45 +116 +46 +45 +116 +46 +45 +116 +47 +46 +116 +47 +46 +131 +54 +46 +131 +54 +46 +131 +54 +46 +166 +67 +46 +131 +54 +46 +131 +54 +46 +113 +46 +46 +110 +108 +104 +120 +49 +48 +164 +67 +46 +141 +56 +46 +140 +55 +45 +140 +55 +45 +140 +55 +45 +140 +55 +45 +140 +55 +45 +140 +55 +45 +140 +55 +45 +140 +55 +45 +140 +55 +45 +140 +55 +45 +140 +55 +45 +140 +55 +45 +140 +55 +45 +140 +55 +45 +140 +55 +45 +140 +55 +45 +140 +55 +45 +140 +55 +45 +140 +55 +45 +112 +45 +45 +140 +55 +45 +137 +53 +43 +108 +43 +43 +137 +53 +43 +137 +53 +43 +136 +53 +43 +136 +53 +43 +137 +53 +43 +112 +45 +45 +190 +180 +164 +109 +44 +43 +127 +51 +43 +163 +63 +43 +163 +63 +43 +127 +51 +43 +127 +51 +43 +163 +64 +44 +127 +51 +43 +127 +51 +44 +127 +51 +43 +112 +44 +44 +127 +51 +44 +127 +51 +44 +127 +51 +44 +112 +44 +44 +127 +51 +44 +112 +44 +44 +112 +44 +44 +112 +44 +44 +127 +51 +44 +112 +44 +44 +112 +44 +44 +112 +44 +44 +127 +51 +44 +127 +51 +44 +127 +51 +44 +163 +64 +44 +127 +51 +44 +127 +51 +44 +109 +44 +44 +107 +105 +101 +143 +58 +47 +137 +53 +44 +137 +53 +44 +137 +53 +44 +137 +53 +44 +137 +53 +44 +137 +53 +44 +137 +53 +44 +137 +53 +44 +137 +53 +44 +163 +64 +44 +137 +53 +44 +137 +53 +44 +137 +53 +44 +137 +53 +44 +137 +53 +43 +137 +53 +43 +137 +53 +43 +137 +53 +43 +137 +53 +43 +137 +53 +43 +137 +53 +44 +108 +43 +43 +137 +53 +43 +133 +50 +41 +133 +50 +41 +133 +50 +41 +133 +50 +41 +133 +50 +41 +133 +50 +41 +103 +41 +41 +108 +43 +43 +189 +177 +161 +106 +42 +41 +123 +48 +41 +122 +48 +41 +123 +49 +41 +123 +49 +41 +123 +49 +41 +123 +49 +41 +123 +49 +41 +122 +48 +41 +108 +42 +41 +108 +42 +41 +108 +42 +41 +123 +49 +41 +108 +42 +41 +108 +42 +41 +108 +42 +41 +108 +42 +41 +108 +42 +41 +108 +42 +41 +108 +42 +41 +107 +42 +41 +107 +42 +41 +107 +42 +41 +123 +49 +41 +123 +49 +41 +123 +49 +41 +123 +49 +41 +123 +49 +41 +123 +49 +41 +104 +41 +41 +149 +139 +132 +120 +50 +46 +133 +50 +41 +133 +50 +41 +133 +50 +41 +133 +50 +41 +104 +41 +41 +133 +50 +41 +133 +50 +41 +133 +50 +41 +133 +50 +41 +133 +50 +41 +133 +50 +41 +133 +50 +41 +104 +41 +41 +133 +50 +41 +133 +50 +41 +133 +50 +41 +133 +50 +41 +104 +41 +41 +133 +50 +41 +133 +50 +41 +133 +50 +41 +104 +41 +41 +104 +41 +41 +98 +39 +39 +128 +47 +39 +128 +47 +39 +128 +47 +39 +128 +47 +39 +128 +47 +39 +98 +39 +39 +101 +40 +40 +150 +142 +136 +119 +46 +39 +101 +39 +39 +101 +39 +39 +101 +39 +39 +101 +39 +39 +101 +39 +39 +101 +39 +39 +101 +39 +39 +101 +39 +39 +101 +39 +39 +118 +46 +39 +101 +39 +39 +101 +39 +39 +101 +39 +39 +118 +46 +39 +102 +40 +39 +101 +39 +39 +101 +39 +39 +101 +39 +39 +101 +39 +39 +101 +39 +39 +101 +39 +39 +101 +39 +39 +98 +39 +39 +98 +39 +39 +118 +46 +39 +118 +46 +39 +97 +39 +39 +97 +39 +39 +97 +39 +39 +147 +136 +130 +113 +46 +43 +97 +39 +39 +97 +39 +39 +97 +39 +39 +97 +39 +39 +97 +39 +39 +98 +39 +39 +97 +39 +39 +97 +39 +39 +98 +39 +39 +98 +39 +39 +128 +47 +39 +98 +39 +39 +98 +39 +39 +128 +47 +39 +128 +47 +39 +128 +47 +39 +128 +47 +39 +128 +47 +39 +98 +39 +39 +98 +39 +39 +98 +39 +39 +98 +39 +39 +98 +39 +39 +93 +37 +37 +124 +45 +37 +124 +45 +37 +124 +45 +37 +124 +44 +36 +124 +45 +37 +93 +36 +36 +94 +36 +36 +48 +47 +45 +116 +45 +38 +97 +37 +37 +97 +37 +37 +97 +37 +37 +70 +30 +30 +70 +30 +30 +70 +30 +30 +96 +37 +36 +96 +37 +36 +96 +37 +36 +96 +37 +36 +96 +37 +36 +96 +37 +36 +96 +37 +36 +96 +37 +36 +96 +37 +36 +100 +39 +36 +97 +38 +37 +113 +43 +36 +113 +43 +37 +113 +43 +36 +93 +36 +36 +93 +36 +36 +93 +36 +36 +93 +36 +36 +93 +36 +36 +113 +43 +36 +93 +36 +36 +93 +36 +36 +93 +37 +37 +146 +134 +127 +105 +42 +41 +93 +36 +36 +93 +36 +36 +93 +36 +36 +93 +36 +36 +93 +36 +36 +92 +36 +36 +93 +36 +36 +93 +37 +37 +93 +36 +36 +93 +36 +36 +93 +36 +36 +93 +36 +36 +93 +36 +36 +93 +36 +36 +93 +36 +36 +93 +36 +36 +93 +36 +36 +93 +36 +36 +124 +45 +37 +124 +44 +36 +124 +45 +37 +93 +36 +36 +93 +36 +36 +88 +35 +35 +120 +42 +35 +120 +42 +35 +120 +42 +35 +119 +42 +35 +119 +42 +35 +88 +35 +35 +89 +35 +35 +48 +47 +45 +37 +36 +35 +90 +35 +35 +66 +28 +28 +66 +28 +28 +90 +35 +35 +66 +28 +28 +90 +35 +35 +90 +35 +35 +90 +35 +34 +66 +28 +28 +90 +35 +34 +90 +35 +34 +90 +35 +35 +90 +35 +34 +107 +40 +34 +88 +36 +36 +87 +35 +35 +87 +35 +34 +86 +34 +35 +86 +34 +34 +86 +35 +35 +86 +34 +34 +86 +34 +34 +86 +34 +34 +87 +34 +34 +87 +34 +34 +87 +34 +34 +87 +34 +34 +66 +28 +28 +66 +28 +28 +144 +131 +125 +100 +40 +40 +86 +34 +34 +86 +34 +34 +86 +34 +34 +86 +34 +34 +86 +34 +34 +86 +34 +34 +66 +28 +28 +86 +34 +34 +66 +28 +28 +66 +28 +28 +86 +34 +34 +86 +34 +34 +86 +34 +34 +86 +34 +34 +86 +34 +34 +86 +34 +34 +86 +35 +35 +119 +42 +34 +86 +35 +35 +119 +42 +34 +86 +34 +34 +86 +35 +35 +86 +35 +35 +99 +40 +40 +131 +50 +41 +134 +52 +43 +134 +52 +43 +100 +41 +41 +96 +39 +39 +96 +38 +38 +180 +146 +134 +110 +109 +105 +38 +38 +36 +38 +37 +36 +69 +29 +29 +44 +25 +25 +44 +25 +25 +92 +36 +36 +92 +36 +36 +69 +29 +29 +69 +29 +29 +89 +37 +36 +92 +37 +37 +93 +37 +38 +94 +38 +38 +94 +38 +38 +94 +38 +38 +94 +38 +38 +96 +39 +39 +97 +39 +39 +97 +39 +39 +97 +39 +39 +99 +40 +40 +104 +42 +42 +108 +44 +44 +107 +44 +44 +107 +44 +44 +105 +43 +43 +105 +43 +43 +105 +43 +43 +85 +36 +36 +186 +167 +153 +153 +148 +141 +151 +144 +138 +114 +47 +47 +116 +48 +48 +118 +49 +49 +118 +49 +49 +94 +40 +40 +93 +40 +40 +90 +39 +39 +108 +44 +44 +78 +33 +33 +72 +31 +31 +89 +36 +36 +69 +30 +30 +89 +36 +36 +94 +38 +38 +98 +40 +40 +94 +38 +38 +92 +37 +37 +88 +36 +36 +88 +36 +36 +89 +36 +36 +89 +36 +36 +89 +36 +36 +88 +36 +35 +191 +184 +170 +155 +152 +145 +155 +152 +145 +155 +152 +145 +155 +152 +145 +155 +152 +145 +116 +115 +111 +116 +115 +111 +116 +115 +111 +116 +115 +111 +155 +152 +145 +155 +152 +145 +155 +152 +145 +155 +152 +145 +155 +152 +145 +192 +187 +173 +191 +185 +171 +191 +183 +169 +191 +184 +171 +191 +183 +170 +190 +183 +170 +189 +183 +169 +189 +180 +168 +188 +180 +167 +190 +181 +168 +191 +183 +170 +191 +186 +173 +192 +185 +172 +192 +187 +173 +192 +187 +173 +192 +187 +173 +192 +187 +173 +192 +187 +173 +192 +187 +173 +192 +187 +173 +192 +187 +173 +192 +187 +173 +192 +187 +173 +192 +187 +173 +155 +152 +145 +155 +152 +145 +155 +152 +145 +192 +187 +173 +192 +187 +173 +192 +187 +173 +192 +187 +173 +116 +115 +111 +192 +187 +173 +192 +187 +173 +192 +187 +173 +192 +187 +173 +192 +187 +173 +192 +187 +173 +192 +187 +173 +192 +187 +173 +192 +187 +173 +192 +187 +173 +192 +187 +173 +192 +187 +173 +192 +187 +173 +192 +187 +173 +192 +187 +173 +191 +186 +172 +190 +184 +171 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +156 +67 +50 +121 +50 +50 +192 +187 +173 +192 +187 +173 +96 +45 +41 +96 +45 +41 +121 +55 +50 +121 +55 +50 +121 +55 +50 +121 +55 +50 +121 +55 +50 +121 +55 +50 +121 +55 +50 +121 +55 +50 +121 +55 +50 +121 +55 +50 +121 +55 +50 +121 +55 +50 +121 +55 +50 +121 +55 +50 +121 +55 +50 +121 +55 +50 +121 +55 +50 +121 +55 +50 +121 +55 +50 +121 +55 +50 +121 +55 +50 +121 +55 +50 +121 +55 +50 +121 +55 +50 +121 +55 +50 +121 +55 +50 +71 +70 +67 +116 +115 +111 +155 +152 +145 +155 +152 +145 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +195 +86 +63 +195 +86 +63 +195 +86 +63 +195 +86 +63 +195 +86 +63 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +121 +50 +50 +121 +50 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +121 +50 +50 +121 +50 +50 +192 +187 +173 +96 +45 +41 +121 +55 +50 +121 +55 +50 +121 +55 +50 +121 +55 +50 +121 +55 +50 +121 +55 +50 +171 +81 +50 +171 +81 +50 +121 +55 +50 +121 +55 +50 +121 +55 +50 +121 +55 +50 +171 +81 +50 +121 +55 +50 +171 +81 +50 +171 +81 +50 +195 +94 +63 +195 +94 +63 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +121 +55 +50 +121 +55 +50 +96 +45 +41 +71 +70 +67 +155 +152 +145 +121 +50 +50 +121 +50 +50 +171 +73 +50 +171 +73 +50 +121 +50 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +121 +50 +50 +156 +67 +50 +156 +67 +50 +121 +50 +50 +121 +50 +50 +192 +187 +173 +121 +55 +50 +121 +55 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +121 +55 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +195 +94 +63 +171 +81 +50 +171 +81 +50 +195 +94 +63 +195 +94 +63 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +96 +45 +41 +155 +152 +145 +121 +50 +50 +171 +73 +50 +121 +50 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +195 +86 +63 +195 +86 +63 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +121 +50 +50 +171 +73 +50 +121 +50 +50 +121 +50 +50 +156 +67 +50 +156 +67 +50 +121 +50 +50 +192 +187 +173 +121 +55 +50 +171 +81 +50 +132 +61 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +195 +94 +63 +171 +81 +50 +195 +94 +63 +171 +81 +50 +171 +81 +50 +132 +61 +50 +132 +61 +50 +132 +61 +50 +132 +61 +50 +171 +81 +50 +171 +81 +50 +96 +45 +41 +155 +152 +145 +121 +50 +50 +121 +50 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +195 +86 +63 +195 +86 +63 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +171 +73 +50 +171 +73 +50 +121 +50 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +121 +50 +50 +121 +50 +50 +192 +187 +173 +121 +55 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +195 +94 +63 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +195 +94 +63 +171 +81 +50 +171 +81 +50 +195 +94 +63 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +132 +61 +50 +132 +61 +50 +132 +61 +50 +171 +81 +50 +121 +55 +50 +155 +152 +145 +121 +50 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +195 +86 +63 +171 +73 +50 +171 +73 +50 +171 +73 +50 +156 +67 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +156 +67 +50 +171 +73 +50 +171 +73 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +156 +67 +50 +121 +50 +50 +192 +187 +173 +121 +55 +50 +171 +81 +50 +132 +61 +50 +171 +81 +50 +171 +81 +50 +132 +61 +50 +132 +61 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +132 +61 +50 +132 +61 +50 +132 +61 +50 +121 +55 +50 +121 +55 +50 +121 +55 +50 +155 +152 +145 +121 +50 +50 +171 +73 +50 +171 +72 +50 +171 +72 +50 +195 +85 +63 +170 +72 +49 +170 +72 +49 +155 +66 +49 +156 +67 +50 +171 +73 +50 +171 +73 +50 +156 +67 +50 +171 +73 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +156 +67 +50 +121 +50 +50 +71 +70 +67 +121 +55 +50 +171 +81 +50 +171 +81 +50 +132 +61 +50 +132 +61 +50 +132 +61 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +132 +61 +50 +132 +61 +50 +171 +81 +50 +132 +61 +50 +132 +61 +50 +132 +61 +50 +132 +61 +50 +132 +61 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +132 +61 +50 +131 +61 +50 +131 +61 +50 +120 +55 +50 +120 +54 +49 +120 +54 +49 +154 +151 +144 +120 +49 +49 +170 +72 +49 +170 +71 +49 +170 +71 +49 +194 +84 +61 +169 +71 +49 +169 +71 +48 +169 +71 +48 +156 +67 +50 +156 +67 +50 +156 +67 +50 +171 +73 +50 +156 +67 +50 +171 +73 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +132 +55 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +171 +73 +50 +156 +67 +50 +52 +51 +49 +52 +51 +49 +132 +61 +50 +171 +81 +50 +132 +61 +50 +171 +81 +50 +171 +81 +50 +171 +81 +50 +132 +61 +50 +132 +61 +50 +132 +61 +50 +132 +61 +50 +171 +81 +50 +171 +81 +50 +132 +61 +50 +132 +61 +50 +132 +61 +50 +132 +61 +50 +132 +61 +50 +131 +61 +50 +131 +61 +50 +131 +61 +50 +131 +60 +49 +131 +60 +49 +131 +60 +49 +131 +60 +49 +170 +79 +49 +170 +79 +49 +130 +60 +49 +130 +59 +49 +119 +53 +49 +118 +53 +48 +154 +151 +144 +118 +48 +48 +169 +70 +48 +168 +70 +48 +169 +70 +48 +168 +70 +48 +168 +69 +47 +153 +64 +47 +152 +63 +47 +131 +54 +49 +155 +66 +49 +156 +67 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +132 +55 +50 +156 +67 +50 +156 +67 +50 +132 +55 +50 +132 +55 +50 +132 +55 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +71 +70 +67 +116 +115 +111 +132 +61 +50 +171 +81 +50 +171 +81 +50 +132 +61 +50 +132 +61 +50 +132 +61 +50 +132 +61 +50 +132 +61 +50 +132 +61 +50 +171 +80 +50 +131 +61 +50 +171 +80 +50 +131 +60 +49 +131 +60 +49 +131 +60 +49 +131 +60 +49 +130 +60 +49 +119 +54 +49 +130 +60 +49 +130 +59 +49 +130 +59 +49 +129 +59 +48 +129 +59 +48 +129 +59 +48 +129 +59 +48 +128 +58 +48 +128 +58 +48 +128 +58 +48 +116 +52 +47 +117 +52 +48 +154 +150 +143 +116 +47 +47 +167 +68 +47 +167 +68 +47 +163 +65 +47 +126 +51 +46 +126 +51 +46 +126 +51 +46 +151 +62 +46 +129 +53 +48 +130 +53 +49 +155 +66 +49 +155 +66 +49 +155 +66 +50 +156 +67 +50 +132 +55 +50 +132 +55 +50 +132 +55 +50 +156 +67 +50 +132 +55 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +132 +55 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +121 +50 +50 +116 +115 +111 +132 +61 +50 +131 +61 +50 +171 +80 +50 +171 +80 +50 +131 +60 +49 +131 +60 +49 +131 +60 +49 +131 +60 +49 +130 +60 +49 +130 +60 +49 +130 +60 +49 +130 +59 +49 +130 +59 +49 +129 +59 +48 +129 +59 +48 +129 +59 +48 +129 +59 +48 +117 +53 +48 +128 +58 +48 +117 +52 +48 +116 +52 +47 +128 +58 +47 +127 +58 +47 +127 +57 +47 +167 +76 +47 +127 +57 +47 +127 +57 +47 +126 +57 +46 +126 +56 +46 +115 +52 +47 +191 +183 +168 +114 +46 +46 +115 +47 +46 +165 +66 +46 +153 +62 +45 +124 +50 +45 +166 +66 +45 +124 +49 +45 +165 +66 +45 +127 +52 +47 +128 +52 +48 +129 +53 +48 +129 +53 +48 +154 +65 +49 +131 +54 +49 +131 +55 +50 +132 +55 +50 +132 +55 +50 +132 +55 +50 +132 +55 +50 +127 +53 +50 +132 +55 +50 +132 +55 +50 +156 +67 +50 +132 +55 +50 +132 +55 +50 +132 +55 +50 +155 +66 +50 +155 +66 +50 +155 +66 +50 +155 +66 +49 +155 +66 +49 +121 +49 +49 +115 +113 +109 +130 +60 +49 +130 +60 +49 +130 +60 +49 +130 +59 +49 +130 +59 +49 +129 +59 +48 +129 +59 +48 +129 +59 +48 +129 +59 +48 +128 +58 +48 +128 +58 +48 +128 +58 +48 +128 +58 +47 +128 +58 +47 +127 +58 +47 +127 +57 +47 +127 +57 +47 +115 +52 +47 +127 +57 +47 +115 +51 +46 +126 +56 +46 +126 +56 +46 +126 +56 +46 +125 +56 +46 +125 +56 +46 +125 +56 +46 +166 +73 +45 +124 +55 +45 +124 +55 +45 +114 +51 +46 +190 +182 +166 +112 +45 +45 +113 +45 +45 +164 +65 +44 +123 +49 +44 +122 +49 +44 +122 +48 +44 +122 +48 +44 +122 +48 +44 +124 +50 +45 +125 +50 +46 +126 +51 +46 +127 +52 +47 +127 +52 +47 +128 +52 +48 +129 +53 +48 +129 +53 +48 +119 +49 +49 +120 +50 +49 +121 +51 +49 +122 +51 +49 +123 +50 +49 +130 +53 +49 +130 +53 +49 +154 +65 +48 +129 +53 +48 +154 +65 +48 +129 +53 +48 +129 +53 +48 +153 +64 +48 +153 +64 +48 +153 +64 +48 +118 +48 +48 +111 +109 +105 +116 +52 +47 +127 +58 +47 +127 +57 +47 +127 +57 +47 +127 +57 +47 +127 +57 +47 +127 +57 +47 +126 +56 +46 +126 +56 +46 +126 +56 +46 +125 +56 +46 +125 +56 +46 +125 +56 +46 +166 +74 +45 +124 +55 +45 +112 +50 +45 +112 +50 +45 +124 +55 +45 +112 +49 +45 +111 +49 +45 +111 +49 +45 +111 +49 +44 +110 +49 +44 +122 +54 +44 +122 +54 +44 +122 +53 +44 +121 +53 +44 +121 +53 +44 +109 +48 +43 +112 +49 +45 +190 +179 +164 +108 +43 +43 +163 +63 +43 +163 +62 +43 +120 +47 +43 +119 +47 +43 +107 +43 +43 +119 +47 +42 +119 +47 +42 +120 +47 +43 +121 +48 +44 +122 +48 +44 +122 +49 +44 +123 +49 +45 +124 +50 +45 +166 +66 +45 +125 +50 +46 +114 +46 +46 +114 +46 +46 +115 +47 +47 +115 +47 +47 +115 +47 +47 +127 +52 +47 +126 +51 +47 +126 +51 +47 +126 +51 +46 +151 +62 +46 +125 +51 +46 +125 +51 +46 +125 +50 +46 +125 +50 +46 +150 +61 +46 +114 +46 +46 +107 +104 +101 +112 +50 +45 +112 +50 +45 +123 +55 +45 +123 +55 +45 +123 +55 +45 +165 +72 +45 +122 +54 +44 +122 +54 +44 +122 +54 +44 +122 +54 +44 +122 +54 +44 +121 +53 +44 +121 +53 +44 +163 +70 +43 +121 +53 +43 +108 +47 +43 +120 +52 +43 +120 +52 +43 +108 +47 +43 +108 +47 +43 +119 +52 +43 +107 +47 +42 +119 +52 +42 +119 +51 +42 +119 +51 +42 +118 +51 +42 +118 +51 +42 +118 +51 +42 +105 +46 +42 +84 +39 +36 +189 +177 +161 +185 +163 +143 +161 +60 +41 +105 +41 +41 +117 +45 +41 +105 +41 +41 +104 +41 +41 +117 +45 +41 +116 +45 +41 +114 +44 +40 +114 +44 +40 +115 +44 +40 +115 +45 +41 +116 +45 +41 +116 +46 +41 +117 +46 +42 +118 +46 +42 +106 +42 +42 +82 +35 +35 +82 +35 +35 +107 +43 +43 +108 +43 +43 +108 +43 +43 +108 +43 +43 +108 +43 +43 +120 +47 +43 +120 +47 +43 +108 +43 +43 +120 +47 +43 +119 +47 +43 +112 +45 +43 +109 +43 +42 +81 +35 +35 +144 +128 +122 +106 +46 +42 +106 +46 +42 +105 +46 +42 +105 +46 +42 +104 +46 +42 +105 +46 +41 +105 +46 +41 +104 +45 +41 +104 +45 +41 +104 +45 +41 +103 +45 +41 +103 +45 +41 +103 +45 +41 +103 +45 +41 +102 +44 +40 +102 +44 +40 +102 +44 +40 +102 +44 +40 +102 +44 +40 +76 +36 +33 +101 +44 +40 +101 +44 +40 +114 +48 +40 +101 +44 +40 +100 +43 +39 +100 +43 +39 +100 +43 +39 +100 +43 +39 +75 +35 +32 +79 +37 +34 +149 +140 +134 +99 +39 +39 +157 +57 +39 +99 +39 +39 +99 +39 +39 +99 +39 +39 +99 +39 +39 +112 +43 +39 +112 +43 +39 +107 +40 +37 +106 +40 +37 +107 +41 +37 +107 +41 +37 +109 +41 +37 +109 +41 +38 +109 +42 +38 +97 +38 +38 +73 +31 +31 +74 +32 +32 +75 +32 +32 +99 +39 +39 +99 +39 +39 +99 +39 +39 +99 +39 +39 +101 +40 +40 +101 +40 +40 +101 +40 +40 +101 +40 +40 +100 +39 +39 +101 +40 +39 +101 +39 +39 +75 +32 +32 +99 +39 +39 +139 +118 +113 +75 +35 +32 +74 +35 +32 +99 +42 +39 +99 +42 +39 +97 +42 +38 +110 +47 +38 +97 +42 +38 +97 +42 +38 +97 +42 +38 +96 +42 +38 +96 +42 +38 +96 +42 +38 +97 +41 +38 +97 +41 +38 +97 +41 +38 +96 +41 +37 +95 +41 +37 +95 +41 +37 +95 +41 +37 +72 +34 +31 +71 +33 +30 +95 +41 +37 +95 +41 +37 +95 +41 +37 +95 +41 +37 +95 +41 +37 +95 +41 +37 +71 +33 +30 +45 +27 +26 +137 +117 +111 +149 +140 +134 +95 +37 +37 +95 +37 +37 +95 +37 +37 +95 +37 +37 +71 +30 +30 +95 +37 +37 +108 +41 +37 +108 +41 +37 +86 +34 +34 +85 +34 +34 +100 +37 +34 +85 +34 +34 +85 +34 +34 +86 +34 +34 +88 +35 +35 +82 +80 +77 +81 +80 +77 +83 +81 +78 +83 +81 +78 +43 +25 +25 +44 +25 +25 +44 +25 +25 +69 +29 +29 +69 +30 +30 +70 +30 +30 +70 +30 +30 +70 +30 +30 +70 +30 +30 +70 +30 +30 +70 +30 +30 +70 +30 +30 +133 +110 +105 +133 +110 +105 +133 +110 +105 +69 +32 +29 +69 +32 +29 +69 +32 +29 +69 +32 +29 +69 +32 +29 +70 +33 +30 +70 +33 +30 +68 +32 +29 +68 +32 +29 +68 +32 +29 +68 +32 +29 +67 +32 +29 +67 +32 +29 +67 +32 +29 +67 +32 +29 +132 +107 +102 +132 +107 +102 +132 +107 +102 +132 +107 +102 +132 +107 +102 +67 +32 +29 +90 +39 +35 +90 +39 +35 +90 +39 +35 +90 +39 +35 +90 +39 +35 +44 +26 +25 +44 +27 +25 +136 +115 +110 +149 +141 +135 +135 +114 +109 +93 +37 +37 +91 +36 +36 +69 +29 +29 +67 +29 +29 +90 +35 +35 +90 +35 +35 +90 +35 +35 +190 +179 +164 +190 +179 +164 +189 +178 +162 +188 +175 +159 +188 +175 +159 +149 +140 +134 +149 +139 +133 +149 +139 +132 +149 +138 +132 +146 +132 +126 +142 +125 +119 +142 +124 +118 +144 +128 +122 +146 +132 +126 +148 +137 +131 +149 +139 +132 +149 +139 +133 +188 +173 +156 +188 +173 +156 +188 +175 +158 +189 +176 +159 +188 +175 +159 +188 +173 +157 +148 +137 +130 +188 +173 +156 +188 +173 +156 +188 +173 +156 +188 +175 +159 +189 +176 +160 +190 +180 +164 +192 +185 +171 +192 +185 +171 +192 +185 +171 +192 +186 +172 +191 +184 +170 +191 +184 +169 +191 +183 +168 +191 +183 +168 +191 +184 +169 +191 +184 +170 +191 +184 +170 +154 +149 +142 +152 +146 +139 +151 +142 +136 +150 +141 +134 +149 +139 +132 +149 +139 +132 +149 +139 +132 +109 +106 +103 +190 +180 +164 +113 +111 +108 +191 +185 +170 +191 +184 +170 +154 +149 +142 +153 +148 +141 +155 +151 +144 +153 +147 +140 +153 +147 +140 +154 +149 +142 +191 +184 +170 +152 +146 +139 +190 +182 +166 +191 +183 +168 +191 +183 +168 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +96 +41 +41 +96 +41 +41 +121 +50 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +121 +50 +50 +192 +187 +173 +96 +41 +41 +96 +41 +41 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +116 +115 +111 +116 +115 +111 +116 +115 +111 +52 +51 +49 +96 +41 +41 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +121 +50 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +121 +50 +50 +192 +187 +173 +96 +41 +41 +96 +41 +41 +121 +50 +50 +171 +73 +50 +121 +50 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +121 +50 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +132 +55 +50 +121 +50 +50 +132 +55 +50 +132 +55 +50 +132 +55 +50 +121 +50 +50 +116 +115 +111 +116 +115 +111 +52 +51 +49 +96 +41 +41 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +121 +50 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +72 +50 +171 +72 +50 +120 +49 +49 +155 +66 +49 +156 +67 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +171 +73 +50 +156 +67 +50 +171 +73 +50 +156 +67 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +195 +86 +63 +171 +73 +50 +171 +73 +50 +121 +50 +50 +192 +187 +173 +96 +41 +41 +121 +50 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +132 +55 +50 +132 +55 +50 +132 +55 +50 +116 +115 +111 +116 +115 +111 +121 +50 +50 +121 +50 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +72 +50 +171 +72 +50 +170 +72 +49 +155 +66 +49 +170 +72 +49 +170 +71 +49 +169 +71 +49 +169 +70 +48 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +156 +67 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +156 +67 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +121 +50 +50 +192 +187 +173 +96 +41 +41 +121 +50 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +132 +55 +50 +195 +86 +63 +171 +73 +50 +171 +73 +50 +132 +55 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +132 +55 +50 +171 +73 +50 +132 +55 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +132 +55 +50 +116 +115 +111 +192 +187 +173 +121 +50 +50 +171 +73 +50 +171 +73 +50 +171 +72 +50 +171 +72 +50 +195 +85 +62 +170 +72 +49 +155 +66 +49 +170 +71 +49 +169 +71 +49 +169 +70 +48 +169 +70 +48 +169 +70 +48 +168 +69 +47 +168 +69 +47 +171 +73 +50 +171 +73 +50 +171 +73 +50 +156 +67 +50 +171 +73 +50 +156 +67 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +156 +67 +50 +171 +73 +50 +156 +67 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +121 +50 +50 +155 +152 +145 +121 +50 +50 +121 +50 +50 +121 +50 +50 +171 +73 +50 +171 +73 +50 +132 +55 +50 +171 +73 +50 +171 +73 +50 +132 +55 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +132 +55 +50 +132 +55 +50 +132 +55 +50 +132 +55 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +132 +55 +50 +155 +151 +144 +154 +151 +144 +120 +50 +50 +170 +72 +49 +170 +72 +49 +170 +72 +49 +170 +71 +49 +169 +71 +49 +154 +65 +48 +169 +70 +48 +169 +70 +48 +153 +64 +47 +152 +63 +47 +152 +63 +47 +167 +68 +47 +151 +62 +46 +167 +67 +46 +171 +73 +50 +171 +73 +50 +171 +73 +50 +156 +67 +50 +171 +73 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +171 +73 +50 +156 +67 +50 +171 +73 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +171 +73 +50 +155 +152 +145 +155 +152 +145 +121 +50 +50 +121 +50 +50 +121 +50 +50 +132 +55 +50 +171 +73 +50 +132 +55 +50 +171 +73 +50 +132 +55 +50 +132 +55 +50 +132 +55 +50 +132 +55 +50 +132 +55 +50 +132 +55 +50 +132 +55 +50 +132 +55 +50 +132 +55 +50 +132 +55 +50 +132 +55 +50 +132 +55 +50 +132 +55 +50 +171 +73 +50 +132 +55 +50 +171 +73 +50 +132 +55 +50 +171 +73 +50 +171 +73 +50 +171 +73 +50 +171 +72 +50 +171 +72 +50 +120 +49 +49 +120 +49 +49 +154 +149 +142 +119 +49 +49 +169 +71 +49 +169 +70 +48 +169 +70 +48 +169 +70 +48 +168 +69 +47 +168 +69 +47 +152 +63 +47 +152 +63 +47 +151 +62 +46 +151 +62 +46 +151 +61 +46 +150 +61 +45 +150 +61 +45 +165 +66 +45 +171 +73 +50 +171 +73 +50 +171 +73 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +132 +55 +50 +132 +55 +50 +132 +55 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +156 +67 +50 +171 +73 +50 +121 +50 +50 +155 +152 +145 +121 +50 +50 +121 +50 +50 +171 +73 +50 +132 +55 +50 +132 +55 +50 +132 +55 +50 +171 +73 +50 +171 +73 +50 +132 +55 +50 +171 +73 +50 +132 +55 +50 +132 +55 +50 +132 +55 +50 +132 +55 +50 +132 +55 +50 +132 +55 +50 +132 +55 +50 +132 +55 +50 +132 +55 +50 +132 +55 +50 +171 +73 +50 +132 +55 +50 +132 +55 +50 +131 +55 +50 +131 +55 +50 +170 +72 +49 +131 +54 +49 +170 +72 +49 +170 +71 +49 +169 +71 +49 +118 +48 +48 +152 +146 +139 +117 +48 +48 +168 +69 +47 +168 +69 +47 +167 +68 +47 +152 +63 +47 +167 +68 +46 +151 +62 +46 +151 +61 +46 +150 +61 +45 +150 +61 +45 +149 +60 +45 +149 +60 +45 +165 +65 +44 +164 +64 +44 +148 +59 +44 +170 +72 +49 +131 +54 +49 +155 +66 +49 +155 +66 +49 +131 +54 +49 +131 +54 +49 +155 +66 +49 +155 +66 +49 +131 +54 +49 +155 +66 +49 +155 +66 +49 +155 +66 +49 +155 +66 +49 +155 +66 +49 +155 +66 +49 +120 +49 +49 +115 +114 +110 +120 +49 +49 +120 +49 +49 +131 +54 +49 +131 +54 +49 +131 +54 +49 +131 +54 +49 +131 +54 +49 +131 +54 +49 +131 +54 +49 +131 +54 +49 +131 +54 +49 +131 +54 +49 +131 +54 +49 +131 +54 +49 +131 +54 +49 +131 +54 +49 +131 +54 +49 +131 +54 +49 +131 +54 +49 +131 +54 +49 +130 +54 +49 +170 +71 +49 +169 +71 +49 +169 +71 +48 +129 +53 +48 +129 +53 +48 +128 +52 +48 +128 +52 +47 +168 +69 +47 +167 +68 +47 +115 +47 +47 +150 +141 +135 +114 +46 +46 +166 +67 +46 +166 +67 +46 +166 +66 +45 +166 +66 +45 +149 +60 +45 +149 +60 +45 +148 +59 +44 +122 +48 +44 +122 +48 +44 +147 +58 +44 +163 +63 +43 +147 +58 +43 +163 +62 +43 +163 +62 +43 +129 +53 +48 +129 +53 +48 +129 +53 +48 +129 +53 +48 +153 +64 +48 +129 +53 +48 +129 +53 +48 +129 +53 +48 +129 +53 +48 +129 +53 +48 +153 +64 +48 +153 +64 +48 +153 +64 +48 +153 +64 +48 +153 +64 +48 +118 +48 +48 +112 +110 +107 +118 +48 +48 +129 +53 +48 +129 +53 +48 +129 +53 +48 +129 +53 +48 +129 +53 +48 +129 +53 +48 +129 +53 +48 +118 +48 +48 +129 +53 +48 +118 +48 +48 +129 +53 +48 +129 +53 +48 +129 +53 +48 +128 +53 +48 +128 +52 +48 +128 +52 +48 +128 +52 +47 +128 +52 +47 +127 +52 +47 +127 +52 +47 +126 +51 +47 +126 +51 +46 +125 +51 +46 +125 +50 +46 +125 +50 +46 +124 +50 +45 +124 +50 +45 +165 +66 +45 +165 +65 +45 +111 +44 +44 +147 +134 +128 +110 +44 +44 +121 +48 +44 +121 +48 +43 +120 +47 +43 +146 +58 +43 +119 +47 +43 +119 +47 +42 +145 +56 +42 +118 +46 +42 +145 +56 +42 +145 +56 +42 +117 +46 +41 +160 +60 +41 +161 +60 +41 +160 +60 +41 +126 +51 +46 +126 +51 +46 +126 +51 +46 +126 +51 +46 +126 +51 +46 +126 +51 +46 +126 +51 +46 +126 +51 +46 +151 +62 +46 +151 +62 +46 +151 +62 +46 +126 +51 +46 +151 +62 +46 +151 +62 +46 +151 +62 +46 +114 +46 +46 +109 +106 +103 +114 +46 +46 +126 +51 +46 +126 +51 +46 +126 +51 +46 +126 +51 +46 +126 +51 +46 +114 +46 +46 +114 +46 +46 +114 +46 +46 +114 +46 +46 +114 +46 +46 +113 +46 +46 +166 +67 +46 +125 +50 +46 +124 +50 +46 +124 +50 +45 +124 +50 +45 +112 +45 +45 +123 +49 +45 +111 +45 +45 +122 +49 +44 +122 +49 +44 +121 +48 +44 +121 +48 +44 +120 +48 +43 +120 +47 +43 +120 +47 +43 +119 +47 +43 +162 +62 +42 +162 +62 +42 +81 +34 +34 +143 +127 +121 +105 +41 +41 +116 +45 +41 +116 +45 +41 +143 +55 +41 +115 +45 +41 +115 +44 +40 +115 +44 +40 +115 +44 +40 +114 +44 +40 +114 +44 +40 +113 +44 +40 +113 +44 +40 +113 +44 +40 +113 +44 +40 +113 +44 +40 +122 +49 +44 +110 +44 +44 +122 +49 +44 +122 +49 +44 +122 +49 +44 +122 +49 +44 +122 +49 +44 +122 +49 +44 +148 +59 +44 +148 +59 +44 +148 +59 +44 +148 +59 +44 +148 +59 +44 +148 +59 +44 +110 +44 +44 +110 +44 +44 +147 +134 +128 +85 +36 +36 +122 +49 +44 +122 +49 +44 +122 +49 +44 +122 +49 +44 +122 +49 +44 +110 +44 +44 +122 +48 +44 +109 +44 +44 +109 +44 +44 +109 +44 +44 +108 +43 +43 +108 +43 +43 +108 +43 +43 +108 +43 +43 +107 +43 +43 +106 +42 +42 +118 +46 +42 +105 +42 +42 +117 +46 +42 +117 +46 +42 +104 +41 +41 +116 +45 +41 +115 +45 +41 +115 +45 +41 +114 +44 +40 +114 +44 +40 +114 +44 +40 +158 +58 +40 +101 +40 +40 +76 +32 +32 +138 +119 +113 +99 +39 +39 +111 +43 +39 +111 +42 +39 +111 +42 +38 +110 +42 +38 +97 +38 +38 +110 +42 +38 +110 +42 +38 +110 +42 +38 +110 +42 +38 +110 +42 +38 +97 +38 +38 +110 +42 +38 +110 +42 +38 +110 +42 +38 +106 +42 +42 +106 +42 +42 +119 +47 +42 +119 +47 +42 +162 +62 +42 +119 +47 +42 +119 +47 +42 +119 +47 +42 +119 +47 +42 +119 +47 +42 +145 +57 +42 +145 +57 +42 +106 +42 +42 +106 +42 +42 +106 +42 +42 +106 +42 +42 +144 +129 +123 +81 +35 +35 +106 +42 +42 +118 +46 +42 +118 +46 +42 +106 +42 +42 +105 +42 +42 +105 +42 +42 +105 +42 +42 +105 +41 +41 +104 +41 +41 +104 +41 +41 +103 +41 +41 +103 +41 +41 +102 +40 +40 +102 +40 +40 +101 +40 +40 +101 +40 +40 +101 +40 +40 +100 +39 +39 +99 +39 +39 +112 +43 +39 +111 +43 +39 +111 +42 +39 +97 +38 +38 +110 +42 +38 +110 +42 +38 +109 +42 +38 +96 +38 +38 +95 +37 +37 +95 +37 +37 +95 +37 +37 +135 +113 +107 +94 +37 +37 +71 +30 +30 +94 +37 +37 +94 +37 +37 +94 +37 +37 +107 +40 +37 +107 +40 +37 +154 +54 +37 +107 +40 +37 +107 +40 +37 +94 +37 +37 +94 +37 +37 +94 +37 +37 +94 +37 +37 +94 +37 +37 +78 +33 +33 +103 +40 +40 +103 +40 +40 +103 +40 +40 +103 +40 +40 +103 +40 +40 +103 +40 +40 +115 +44 +40 +143 +54 +40 +143 +54 +40 +103 +40 +40 +103 +40 +40 +143 +54 +40 +103 +40 +40 +103 +40 +40 +103 +40 +40 +141 +122 +117 +77 +33 +33 +77 +33 +33 +101 +40 +40 +101 +40 +40 +101 +40 +40 +100 +39 +39 +100 +39 +39 +99 +39 +39 +99 +39 +39 +99 +39 +39 +99 +39 +39 +74 +32 +32 +98 +38 +38 +97 +38 +38 +96 +38 +38 +96 +38 +38 +95 +37 +37 +95 +37 +37 +95 +37 +37 +95 +37 +37 +94 +37 +37 +94 +37 +37 +106 +40 +36 +106 +40 +36 +92 +36 +36 +91 +36 +36 +91 +36 +36 +91 +36 +36 +69 +29 +29 +68 +29 +29 +84 +81 +78 +132 +107 +102 +68 +29 +29 +90 +35 +35 +90 +35 +35 +90 +35 +35 +90 +35 +35 +104 +39 +35 +90 +35 +35 +90 +35 +35 +90 +35 +35 +90 +35 +35 +90 +35 +35 +90 +35 +35 +68 +29 +29 +68 +29 +29 +68 +29 +29 +76 +32 +32 +74 +32 +32 +74 +32 +32 +74 +32 +32 +74 +32 +32 +74 +32 +32 +74 +32 +32 +74 +32 +32 +47 +27 +27 +47 +27 +27 +47 +27 +27 +74 +32 +32 +74 +32 +32 +74 +32 +32 +73 +31 +31 +138 +116 +111 +137 +116 +110 +137 +115 +110 +73 +31 +31 +72 +31 +31 +95 +37 +37 +95 +37 +37 +95 +37 +37 +95 +37 +37 +94 +37 +37 +94 +37 +37 +93 +36 +36 +70 +30 +30 +92 +36 +36 +92 +36 +36 +91 +36 +36 +91 +36 +36 +91 +36 +36 +90 +35 +35 +68 +29 +29 +43 +25 +25 +67 +29 +29 +67 +29 +29 +89 +35 +35 +88 +35 +35 +88 +35 +35 +87 +34 +34 +87 +34 +34 +66 +28 +28 +66 +28 +28 +66 +28 +28 +66 +28 +28 +80 +78 +76 +80 +78 +76 +67 +29 +29 +70 +30 +30 +72 +31 +31 +72 +31 +31 +72 +31 +31 +72 +31 +31 +72 +31 +31 +72 +31 +31 +72 +31 +31 +72 +31 +31 +70 +30 +30 +67 +28 +28 +66 +28 +28 +66 +28 +28 +66 +28 +28 +189 +177 +161 +189 +177 +161 +188 +175 +159 +187 +172 +156 +187 +169 +153 +186 +166 +149 +185 +164 +147 +185 +164 +147 +185 +165 +147 +185 +164 +147 +185 +164 +147 +185 +164 +147 +185 +163 +147 +185 +163 +147 +185 +163 +147 +185 +165 +149 +186 +166 +151 +186 +168 +152 +186 +168 +152 +186 +169 +153 +187 +171 +156 +188 +173 +158 +188 +173 +157 +188 +173 +158 +188 +173 +158 +188 +171 +157 +187 +172 +157 +187 +172 +157 +187 +171 +157 +187 +171 +157 +187 +170 +156 +187 +169 +155 +187 +169 +155 +187 +169 +155 +187 +169 +155 +187 +169 +155 +187 +170 +157 +188 +173 +159 +188 +172 +158 +188 +171 +158 +187 +170 +157 +185 +163 +150 +184 +160 +147 +184 +158 +145 +184 +158 +145 +184 +159 +146 +184 +160 +147 +185 +164 +151 +187 +168 +155 +187 +169 +156 +186 +167 +153 +186 +164 +151 +186 +164 +151 +185 +164 +151 +186 +164 +151 +186 +164 +151 +185 +164 +151 +186 +164 +151 +186 +164 +151 +186 +167 +154 +187 +170 +157 +187 +169 +156 +186 +165 +152 +185 +162 +149 diff --git a/sprite/brick_wall_old.ppm b/sprite/brick_wall_old.ppm new file mode 100644 index 0000000..dc4bf07 --- /dev/null +++ b/sprite/brick_wall_old.ppm @@ -0,0 +1,770 @@ +16 16 +255 +136 +136 +136 +131 +131 +131 +131 +131 +131 +136 +136 +136 +136 +136 +136 +77 +90 +53 +136 +136 +136 +131 +131 +131 +148 +148 +148 +131 +131 +131 +131 +131 +131 +155 +155 +155 +96 +96 +96 +136 +136 +136 +148 +148 +148 +136 +136 +136 +115 +115 +115 +121 +121 +121 +103 +123 +63 +121 +121 +121 +148 +148 +148 +96 +96 +96 +115 +115 +115 +121 +121 +121 +115 +115 +115 +99 +112 +73 +103 +123 +63 +131 +131 +131 +77 +90 +53 +121 +121 +121 +121 +121 +121 +115 +115 +115 +115 +115 +115 +103 +123 +63 +99 +112 +73 +121 +121 +121 +136 +136 +136 +77 +90 +53 +115 +115 +115 +115 +115 +115 +121 +121 +121 +103 +123 +63 +121 +121 +121 +136 +136 +136 +77 +90 +53 +121 +121 +121 +115 +115 +115 +115 +115 +115 +103 +102 +102 +103 +102 +102 +96 +96 +96 +96 +96 +96 +103 +102 +102 +91 +89 +89 +83 +97 +56 +77 +90 +53 +94 +94 +94 +104 +104 +104 +104 +104 +104 +103 +102 +102 +91 +89 +89 +77 +90 +53 +100 +102 +95 +103 +102 +102 +131 +131 +131 +136 +136 +136 +96 +96 +96 +136 +136 +136 +106 +127 +67 +121 +137 +91 +136 +136 +136 +131 +131 +131 +155 +155 +155 +96 +96 +96 +136 +136 +136 +131 +131 +131 +131 +131 +131 +136 +136 +136 +136 +136 +136 +131 +131 +131 +121 +121 +121 +131 +131 +131 +96 +96 +96 +106 +127 +67 +99 +112 +73 +121 +121 +121 +121 +121 +121 +121 +121 +121 +131 +131 +131 +96 +96 +96 +115 +115 +115 +121 +121 +121 +103 +123 +63 +115 +115 +115 +121 +121 +121 +121 +121 +121 +121 +121 +121 +136 +136 +136 +91 +89 +89 +115 +115 +115 +103 +123 +63 +115 +115 +115 +115 +115 +115 +121 +121 +121 +136 +136 +136 +91 +89 +89 +121 +121 +121 +115 +115 +115 +121 +121 +121 +99 +112 +73 +103 +123 +63 +121 +121 +121 +104 +104 +104 +103 +102 +102 +91 +89 +89 +83 +97 +56 +83 +97 +56 +77 +90 +53 +104 +104 +104 +104 +104 +104 +91 +89 +89 +83 +97 +56 +83 +97 +56 +77 +90 +53 +96 +96 +96 +103 +102 +102 +103 +102 +102 +103 +102 +102 +136 +136 +136 +131 +131 +131 +131 +131 +131 +155 +155 +155 +77 +90 +53 +148 +148 +148 +127 +127 +127 +131 +131 +131 +106 +127 +67 +121 +137 +91 +136 +136 +136 +131 +131 +131 +155 +155 +155 +164 +164 +164 +103 +102 +102 +136 +136 +136 +115 +115 +115 +115 +115 +115 +121 +121 +121 +131 +131 +131 +96 +96 +96 +121 +121 +121 +115 +115 +115 +99 +112 +73 +99 +112 +73 +115 +115 +115 +115 +115 +115 +121 +121 +121 +121 +121 +121 +131 +131 +131 +96 +96 +96 +121 +121 +121 +103 +123 +63 +115 +115 +115 +121 +121 +121 +136 +136 +136 +103 +102 +102 +115 +115 +115 +115 +115 +115 +103 +123 +63 +121 +121 +121 +115 +115 +115 +115 +115 +115 +103 +123 +63 +121 +121 +121 +136 +136 +136 +96 +96 +96 +121 +121 +121 +91 +89 +89 +77 +90 +53 +83 +97 +56 +104 +104 +104 +103 +102 +102 +83 +97 +56 +83 +97 +56 +77 +90 +53 +96 +96 +96 +91 +89 +89 +91 +89 +89 +103 +102 +102 +103 +102 +102 +104 +104 +104 +96 +96 +96 +91 +89 +89 +131 +131 +131 +136 +136 +136 +104 +104 +104 +136 +136 +136 +136 +136 +136 +121 +137 +91 +131 +131 +131 +131 +131 +131 +136 +136 +136 +155 +155 +155 +104 +104 +104 +136 +136 +136 +136 +136 +136 +131 +131 +131 +136 +136 +136 +131 +131 +131 +121 +121 +121 +131 +131 +131 +96 +96 +96 +121 +121 +121 +99 +112 +73 +121 +121 +121 +121 +121 +121 +115 +115 +115 +121 +121 +121 +131 +131 +131 +103 +102 +102 +115 +115 +115 +121 +121 +121 +99 +112 +73 +103 +123 +63 +115 +115 +115 +121 +121 +121 +136 +136 +136 +77 +90 +53 +121 +121 +121 +103 +123 +63 +99 +112 +73 +115 +115 +115 +121 +121 +121 +121 +121 +121 +136 +136 +136 +104 +104 +104 +121 +121 +121 +99 +112 +73 +103 +123 +63 +121 +121 +121 +121 +121 +121 +96 +96 +96 +77 +90 +53 +77 +90 +53 +77 +90 +53 +83 +97 +56 +83 +97 +56 +77 +90 +53 +96 +96 +96 +104 +104 +104 +103 +102 +102 +103 +102 +102 +103 +102 +102 +83 +97 +56 +77 +90 +53 +96 +96 +96 +96 +96 +96 diff --git a/sprite/brick_wall_raw.ppm b/sprite/brick_wall_raw.ppm new file mode 100644 index 0000000..f0a8f0e --- /dev/null +++ b/sprite/brick_wall_raw.ppm @@ -0,0 +1,5 @@ +P6 +# Created by GIMP version 2.10.30 PNM plug-in +16 16 +255 +›››NLLƒƒƒƒƒƒg{?cpIƒƒƒ››››››[YYyyyyyycpIg{?ƒƒƒ›››ˆˆˆ[YYƒƒƒyyyyyycpIsssƒƒƒƒƒƒ[YYƒƒƒyyycpIyyyyyyˆˆˆƒƒƒNLLg{?yyysssssssssssscpI[YYg{?cpIƒƒƒyyyyyyyyyƒƒƒNLLgffyyyyyyyyyssscpIMZ5NLLyyyˆˆˆƒƒƒƒƒƒƒƒƒyyyNLLNLLNLL[YYgff[YYMZ5NLLNLLNLL[YYMZ5Sa8MZ5[YYNLLƒƒƒƒƒƒ›››NLLˆˆˆjCy‰[ˆˆˆ›››ˆˆˆ››››››MZ5ˆˆˆˆˆˆƒƒƒˆˆˆyyyƒƒƒ```jCcpIyyyyyyyyyyyysssƒƒƒSa8sssyyyyyyyyyyyyƒƒƒ```jCMZ5yyyyyyyyyyyysssƒƒƒSa8sssyyyyyyyyyyyyˆˆˆ[YYMZ5g{?sssyyyyyyyyyyyysssNLLcpIg{?yyysssssssssNLLgffsssyyysssssssssyyyyyy[YYsssssssssNLLNLLNLLMZ5NLL[YY[YY[YY[YY[YYNLLNLLNLLNLLNLLNLLˆˆˆƒƒƒˆˆˆ›››ƒƒƒcpINLLˆˆˆˆˆˆˆˆˆˆˆˆ›››ƒƒƒ›››[YYˆˆˆg{?sssyyyssssssg{?NLLssssssyyysssg{?yyyˆˆˆ[YYyyyg{?sssyyyyyysssg{?NLLsssyyyyyyssscpIyyyˆˆˆ[YYyyyg{?sssyyyyyysssg{?NLLyyyyyyyyycpIMZ5yyyˆˆˆ[YYyyyNLL[YYNLLNLLNLL[YYNLL[YY[YYgffMZ5g{?cpI[YYNLL[YY \ No newline at end of file diff --git a/srcs/cast_ray.c b/srcs/cast_ray.c index 5728982..9462d35 100644 --- a/srcs/cast_ray.c +++ b/srcs/cast_ray.c @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/05/04 18:08:14 by apommier #+# #+# */ -/* Updated: 2022/05/05 02:59:14 by apommier ### ########.fr */ +/* Updated: 2022/05/18 19:13:39 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -64,31 +64,118 @@ int get_dark_red() return (red); } -void draw_ray3d(t_data *img, float dist, int ray, int type) +void draw_ray3d(t_data *img, ray ray) { float line_height; float line_offset; - int i; - int y; + int x = 0; + float y = 0; + int mx = 0; + int my = 0; + int pixel; + int color; + int texture_size = 64; + //char *wall; - i = 0; - line_height = img->map.size * 320 / dist; + //wall = get_texture(1); + /*for(y=0;y180) + // tx=31-tx; + // } + // else + // { + // tx=(int)(ry/2.0)%32; + // if(ra>90 && ra<270) + // tx=31-tx; + // } + + + //pixel = ((int)ty * 32 + (int)tx) * 3 + (hmt * 32 * 32 * 3); + int copy = ray.ty; + + //i = 0; + line_height = img->map.size * 320 / ray.dist; if (line_height > 320) line_height = 320; line_offset = 160 - line_height / 2; - while (i < 8) - { + float gap = 1; + float old_y = 0; + float myy = 0; + printf("mp= %f modulo texture_size= %d\n", ray.mp, ((int)ray.mp / 4) % texture_size); + + //while (x < 8) + //{ y = 0; + my = 0; + myy = 0; + //double step = 1.0 * texHeight / lineHeight; + gap = (texture_size / line_height); + old_y = 0; + //ray.ty = ; + mx = ((int)ray.mp) % texture_size; + //int texX = int(wallX * double(texWidth)); + //if(side == 0 && rayDirX > 0) texX = texWidth - texX - 1; + //if(side == 1 && rayDirY < 0) texX = texWidth - texX - 1; while (y < line_height) { - if (type) - mlx_pixel_put(img->mlx, img->mlx_win, ray * 8 + 530 + i, y + line_offset , get_red()); - else - mlx_pixel_put(img->mlx, img->mlx_win, ray * 8 + 530 + i, y + line_offset , get_dark_red()); + //if (y > old_y + (16 / line_height)/*(line_height / 16)*/) + //{ + // gap++; + // old_y = y; + //} + //(x * 16 + y)* 3 + 1; + //mp= x du mur + + //my = gap; + myy += gap; + my = (int)myy;//gap; + //mx = ((int)ray.mp) % 16; + //ray.pixel = ((((int)ray.mp) % 16) * 16 + gap /*+ x*/) * 3 + 1 ; + ray.pixel = ((my) * texture_size + mx)* 3 - 1; + x = -1; + //printf("my= %d mx= %d pixel= %d\n", my, mx, ray.pixel); + color = get_color(img->map.texture.north[ray.pixel], img->map.texture.north[ray.pixel + 1], img->map.texture.north[ray.pixel + 2]); + while (++x < 8) + { + if (ray.wall_type) + mlx_pixel_put(img->mlx, img->mlx_win, ray.index * 8 + 530 + x, y + line_offset , color); + else + mlx_pixel_put(img->mlx, img->mlx_win, ray.index * 8 + 530 + x, y + line_offset , (color >> 1) & 8355711); + } + //printf("pixel=%d ", ray.pixel); + //if (ray.wall_type) + int l = 0; + //while (l < 8) + //{ + //x = -1; + //while (++x < 8) + + //l++; + //} + //else + // mlx_pixel_put(img->mlx, img->mlx_win, ray.index * 8 + 530 + x, y + line_offset , color); y++; } - i++; - } + x++; + //} + printf("\n"); + //ray.tx++; + } void draw_ray(t_data *img) @@ -111,6 +198,7 @@ void draw_ray(t_data *img) int mp = 0; (void)dist_f; + printf("---NEW RAY----\n\n"); //printf("\nENTER DRAW RAY\n"); //while (++k < ft_strlen(img->map.simple_map)) // printf("%d--- %c\n", k, img->map.simple_map[k]); @@ -120,6 +208,7 @@ void draw_ray(t_data *img) //ray_angle = reset_angle(img->player.angle); while (++nb_ray < 60) { + //if (nb_ray) // ray_angle -= 30; count = 0; @@ -203,20 +292,20 @@ void draw_ray(t_data *img) count = 8; }//looking straight left or right - while (count<8) + while (count < 8) { //printf("ray_y= %f ray_x= %f\n", ray_y, ray_x); mx = (int)(ray_x)>>6; my = (int)(ray_y)>>6; mp = my * img->map.x + mx; //printf("mx=%d my=%d mp= %d\n", mx, my, mp); - if (mp > 0 && mp < img->map.x * img->map.y && img->map.simple_map[mp] == '1') + if (mp > 0 && mp < img->map.x * img->map.y && img->map.simple_map[mp] == '1')//hit { count = 8; //printf ("horizontal wall\n"); //printf("case: x= %d, y= %d mp= %d\n", mx, my, mp); dist_h = cos(deg_to_rad(ray_angle)) * (ray_x - img->player.x) - sin(deg_to_rad(ray_angle)) * (ray_y - img->player.y); - }//hit + } else { ray_x += next_x; @@ -225,27 +314,59 @@ void draw_ray(t_data *img) } //check next horizontal } //printf("dist_h= %f dist_v= %f\n", dist_h, dist_v); - vx = cos(deg_to_rad(ray_angle)); - vy = -sin(deg_to_rad(ray_angle)); - //printf("player.vx= %f vx= %f player.vy= %f vy= %f\n", img->player.vx, vx, img->player.vy, vy); + //vx = cos(deg_to_rad(ray_angle)); + //vy = -sin(deg_to_rad(ray_angle)); + //printf("vx= %f vy= %f\n rx= %f ry= %f", vx, vy, ray_x, ray_y); int wall_type; + ray ray_info; + if (dist_h != -1 && (dist_h < dist_v || dist_v == -1)) { - print_ray2(img, vx, vy, fabs(dist_h)); + print_ray2(img, cos(deg_to_rad(ray_angle)), -sin(deg_to_rad(ray_angle)), fabs(dist_h)); dist_f = dist_h; + printf("rx= %f ry= %f\n", ray_x, ray_y); + ray_info.mp = ray_x; wall_type = 0; } else if (dist_v != -1) { dist_f = dist_v; - print_ray2(img, vx, vy, fabs(dist_v)); + printf("vx= %f vy= %f\n", vx, vy); + ray_x = vx; + ray_y = vy; + ray_info.mp = vy; + print_ray2(img, cos(deg_to_rad(ray_angle)), -sin(deg_to_rad(ray_angle)), fabs(dist_v)); wall_type = 1; } else dist_f = 0; + + float tx; + float ty_off = 0; + float ty_step = 32.0/dist_f; + //float ty = ; + /*if(dist_f > 640) + { + ty_off = (dist_f - 320) / 2.0; + dist_f = 320; + } */ + //ty = ty_off * 16.0 / dist_f; ;//+hmt*32; + //tx = (int) (ray_y / 2.0) % 16; + tx=(int)(ray_x/2.0) % 32; if(ray_angle>180){ tx=31-tx;} + //if(ray_angle > 180) + // tx = 15 - tx; + //ray_info.pixel = ((int)ty * 16 + (int)tx) * 3 + 3; + printf("nb_ray= %d\n", nb_ray); + ray_info.ty = ray_y; + ray_info.tx = ray_x; + + ray_info.index = nb_ray; + ray_info.wall_type = wall_type; int ca = reset_angle(img->player.angle - ray_angle); //fisheye - dist_f = dist_f * cos(deg_to_rad(ca)); //fisheye - draw_ray3d(img, dist_f, nb_ray, wall_type); + dist_f = dist_f * cos(deg_to_rad(ca)); + ray_info.dist = dist_f; //fisheye + draw_ray3d(img, ray_info); + ray_angle = reset_angle(ray_angle - 1); } } \ No newline at end of file diff --git a/srcs/get_texture_array.c b/srcs/get_texture_array.c new file mode 100644 index 0000000..21216c2 --- /dev/null +++ b/srcs/get_texture_array.c @@ -0,0 +1,86 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* get_texture_array.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: apommier +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/05/06 16:10:11 by apommier #+# #+# */ +/* Updated: 2022/05/17 23:49:38 by apommier ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../includes/Cub3D.h" + +int *get_texture(int type) +{ + int fd; + int *ret; + //int start = 1; + int count; + int len; + char *swap = 0; + + //line = 0; + count = 0; + fd = open("./sprite/brick_wall.ppm", O_RDONLY); + while (swap || !count) + { + if (swap) + free(swap); + count++; + swap = get_next_line(fd); + } + close(fd); + ret = ft_calloc(sizeof(int), count + 1); + //char **ret2 = ft_calloc(sizeof(ret), count + 1); + fd = open("./sprite/brick_wall.ppm", O_RDONLY); + if (!ret) + return (0); + ret[count] = -1; + len = count; + count = 0; + while (swap || !count) + { + if (swap) + free(swap); + swap = get_next_line(fd); + //printf("swap= %s\n", swap); + ret[count] = (int)ft_atoi(swap); + count++; + + } + int k = 0; + /*while (len) + { + printf("nbr= %d", ret[len--]); + }*/ + printf("nrb3= %d\n", ret[1]); + //print_double_fd(ret2, 1); + //free_double(ret2); + close(fd); + + + /*int v = 0; + int b = 0; + int pixel = 0; + //printf("pixel=%d ", ray.pixel); + while (v < 16) + { + while (b < 16) + { + pixel = (v * 3) + b; + int color = get_color(ret[pixel], ret[pixel + 1], ret[pixel + 2]); + mlx_pixel_put(img->mlx, img->mlx_win, v, b, color); + b++; + } + v++; + }*/ + + + + + + + return (ret); +} \ No newline at end of file diff --git a/srcs/main.c b/srcs/main.c index dd1f3fd..c90a0fe 100644 --- a/srcs/main.c +++ b/srcs/main.c @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/02/13 16:42:55 by apommier #+# #+# */ -/* Updated: 2022/05/05 02:55:40 by apommier ### ########.fr */ +/* Updated: 2022/05/17 23:52:27 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -189,16 +189,20 @@ void print_player(player player, t_data *img) int main(int argc, char **argv) { t_data img; + sprite texture; + texture.north = get_texture(1); if (argc != 2) ft_error("Error: bad number of arguments, only need a map"); img.mlx = mlx_init(); if (!img.mlx) ft_error("Error: mlx_init fail"); + img.map = set_map(argv); img.mlx_win = mlx_new_window(img.mlx, 1024, 512, "Cub3D"); //img->player.x=150; img->player.y=400; pa=90; //pdx=cos(deg_to_rad(pa)); pdy=-sin(deg_to_rad(pa)); + img.map.texture = texture; img.player.x = 150; img.player.y = 400; img.player.angle = 90; @@ -206,6 +210,12 @@ int main(int argc, char **argv) img.player.vy = sin(deg_to_rad(img.player.angle)); print_map(img.map, &img); print_player(img.player, &img); + + + + + + //print_ray(&img); mlx_hook(img.mlx_win, 2, 1L << 0, &key_press, &img); mlx_hook(img.mlx_win, 17, 0L, &quit_game, &img); diff --git a/srcs/utils.c b/srcs/utils.c index 18fb255..ab771ad 100644 --- a/srcs/utils.c +++ b/srcs/utils.c @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/02/13 23:37:02 by apommier #+# #+# */ -/* Updated: 2022/05/05 03:05:12 by apommier ### ########.fr */ +/* Updated: 2022/05/18 00:08:25 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -130,8 +130,35 @@ int key_press(int code, t_data *img) print_player(img->player, img); print_back(img); draw_ray(img); - print_ray(img); + print_ray(img); } } + + + + int y = 0; + int x = 0; + int pixel = 0; + int color; + //printf("pixel=%d ", ray.pixel); + while (x < 16) + { + y = 0; + while (y < 16) + { + //printf("test\n"); + pixel = (x * 16 + y)* 3 + 1; + color = get_color(img->map.texture.north[pixel], img->map.texture.north[pixel + 1], img->map.texture.north[pixel + 2]); + mlx_pixel_put(img->mlx, img->mlx_win, x, y, color); + y++; + } + x++; + } + + + + + + return (1); }